Inhoudsopgave:

Inky_pHAT weerstation: 5 stappen
Inky_pHAT weerstation: 5 stappen

Video: Inky_pHAT weerstation: 5 stappen

Video: Inky_pHAT weerstation: 5 stappen
Video: CdM FLEXPLORER 130 "Aurelia" EXPLORER SUPERYACHT TOUR / Expedition Go Anywhere Yacht 2024, November
Anonim
Inky_pHAT Weerstation
Inky_pHAT Weerstation
Inky_pHAT Weerstation
Inky_pHAT Weerstation
Inky_pHAT Weerstation
Inky_pHAT Weerstation
Inky_pHAT Weerstation
Inky_pHAT Weerstation

Ik zou hier een zeer eenvoudig en compact, op Raspberry Pi Zero gebaseerd weerstation willen beschrijven, dat de waarden weergeeft die zijn gemeten door een BME280 temperatuur/druk/vochtigheidssensor op een Pimoroni Inky pHAT e-paper/e-ink display. Om de aansluiting van sensoren en de pHAT op de GPIO van de Pi mogelijk te maken, heb ik een Pimorini Pico HAT-hacker met twee vrouwelijke headers tussen de GPIO en het display geplaatst. Het apparaat is gebruikt om meerdere sensoren aan te sluiten, dus de hier beschreven BME280-versie is slechts een voorbeeld.

In tegenstelling tot LCD-schermen behouden e-ink-schermen het beeld, zelfs als de stroom is uitgeschakeld. Daarom zijn ze een zeer goede oplossing als u informatie wilt weergeven die van tijd tot tijd wordt bijgewerkt, vooral om apparaten met een laag energieverbruik te bouwen. Het grote voordeel van de zwart-wit/zwarte versie van de Inky pHAT is dat het updaten van het display slechts ongeveer een seconde duurt, in plaats van tien tot vijftien seconden die nodig zijn voor de driekleurenversies. Film zien.

Adafruit's Blinka-bibliotheek maakt het mogelijk om Circuit Python-code op de Raspberry Pi uit te voeren, en Circuit Python-samples voor een breed scala aan sensoren zijn verkrijgbaar bij Adafruit. Een gedetailleerde beschrijving van het installeren van Blinka en de Circuit Python-codes is te vinden op de Adafruit-website. De bibliotheken die ik tot nu toe heb getest (BMP280, BME280, TSL2591, TCS34785, VEML7065, …) werkten erg goed, terwijl er kleine problemen waren in sommige van de voorbeeldcodes.

BME280 is een sensor voor het meten van temperatuur, vochtigheid en atmosferische druk. BMP280-breakouts zijn verkrijgbaar bij veel leveranciers, waaronder Adafruit, maar ik gebruikte hier een goedkope Chinese versie. Houd er rekening mee dat deze verschillende i2c-adressen gebruiken (Adafruit: 0x77, anderen: 0x76).

De breakout is via i2c verbonden met de Pi en het lezen van de sensor is heel eenvoudig met behulp van de bibliotheek en voorbeeldcode.

Stap 1: Gebruikte materialen

Gebruikte materialen
Gebruikte materialen
Gebruikte materialen
Gebruikte materialen
Gebruikte materialen
Gebruikte materialen
Gebruikte materialen
Gebruikte materialen

Een Raspberry Pi Zero, met een mannelijke header eraan bevestigd. Maar elke Raspberry Pi-versie zou het doen.

Een Pimoroni Inky pHAT, zwart/monochrome versie, 25€|22£|20US$, bij Pimoroni.

Een Pimoroni Pico HAT-hacker, 2,50€|2£, met twee vrouwelijke headers bevestigd, een van hen een booster-header met langere pinnen. Ik heb twee verschillende versies gebouwd, zie onderstaande beschrijving.

Een BME280 breakout, AZ Delivery via Amazon.de @ 7,50 €, met bijgevoegde header.

Verlengde startkabels

Optioneel:

Een USB-voedingspakket, voor mobiele toepassingen

Een behuizing voor de Pi of het apparaat (hier niet afgebeeld)

Stap 2: Montage

samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
  • Soldeer de vrouwelijke headers aan de Pico HAT-hacker. Controleer voor het solderen de juiste oriëntatie. Ik heb hier twee versies van gebouwd, voor verschillende doeleinden. Een met de naar beneden gerichte booster-header op de voorste rij en een normale, omhoog / gerichte header op de achterste rij, en een versie met de naar beneden gerichte booster-header op de achterste rij en een rechthoekige vrouwelijke header op de voorste rij. Zie afbeeldingen. Met de eerste versie kunnen sensoren en kabels heel eenvoudig worden bevestigd en verwisseld, terwijl de versie met de naar binnen gerichte header het mogelijk maakt om Pi, sensor en Inky pHAT in een behuizing te plaatsen. Als alternatief kunt u de kabels die GPIO en sensor verbinden rechtstreeks op de Pico HAT-hacker solderen en/of de Pico HAT-hacker rechtstreeks op de GPIO-pinnen solderen. Gebruik in ieder geval de minimaal benodigde hoeveelheid soldeer.
  • Soldeer de header aan de sensor, indien nodig.
  • Stapel de aangepaste Pico HAT-hackereenheid op de Pi en voeg vervolgens de Inky pHAT toe. Plaats indien nodig een steun, b.v. Een schuimblok of afstandhouders, voor de Inky pHAT.
  • Bevestig de kabels en de sensor met behulp van de 3V-, GND-, SDA- en SCL-poorten. Niet alle sensoren overleven 5V, dus controleer dit voordat u ze aansluit op 5V-poorten.
  • Installeer de Blinka-bibliotheek en installeer vervolgens de Circuit Python BME280-bibliotheek van Adafruit.
  • Installeer de Inky pHAT-bibliotheek van Pimoroni.
  • Installeer de Python-voorbeeldcode die in een latere stap wordt beschreven en aan deze instructable is gekoppeld.
  • Voer de code uit.

Stap 3: Het apparaat gebruiken

Het apparaat gebruiken
Het apparaat gebruiken

Er zijn twee mogelijkheden om het apparaat te gebruiken.

De code zoals hier wordt weergegeven, wordt gestart met een bijgevoegd scherm, maar kan ook zonder worden uitgevoerd.

Met kleine aanpassingen aan de code kun je crontab gebruiken om metingen uit te voeren op gedefinieerde tijdstippen. Dit zou het stroomverbruik nog verder kunnen verminderen. Uitstekende beschrijvingen voor het gebruik van crontab zijn elders te vinden.

In combinatie met een powerpack kan je een mobiel toestel bouwen en het gebruiken om de omstandigheden binnen of buiten, in de koelkast, in de sauna, je humidor, de wijnkelder, in een vliegtuig, … te meten.

Met een Zero W kunt u de waarden niet alleen op het display weergeven, maar ook via WLAN naar een server of uw website sturen, zoals elders beschreven.

Stap 4: Het BME280-script

Het BME280-script
Het BME280-script

Zoals eerder vermeld, moet u de Adafruit Blinka en Circuit Python BME280-bibliotheken installeren, evenals de Pimoroni Inky pHAT-bibliotheek.

De code initialiseert eerst de sensor en Inky pHAT, leest vervolgens de temperatuur-, druk- en vochtigheidswaarden van de sensor en geeft deze weer op het scherm en het e-ink-display. Met behulp van het time.sleep()-commando worden elke minuut metingen uitgevoerd. Pas zo nodig aan. Door een taalparameter in te stellen, kunt u de taal wijzigen die wordt gebruikt om de resultaten weer te geven.

Met het Inky pHAT e-ink display bouwt u eerst de afbeelding die in het geheugen moet worden weergegeven voordat deze uiteindelijk naar het scherm wordt overgebracht met behulp van de opdracht inkyphat.show(). De Inky pHAT-bibliotheek vereenvoudigt het proces en biedt opdrachten om tekst, lijnen, rechthoeken, cirkels te tekenen en op te maken of achtergrondafbeeldingen te gebruiken.

Naast de gemeten waarden wordt ook de tijd van de meting weergegeven.

Houd er rekening mee dat zowel het script als de bibliotheken zijn geschreven in Python 3, dus open en voer het uit met Py3 IDLE of gelijkwaardig.

# Een script voor de bme280 temperatuur/druk/vochtigheidssensor (niet-Adafruit-versie)# en de inktzwarte pHAT - zwarte versie # # versie 01 december 2018, Dr H # # Vereist Adafruit Blinka en Circuit Python BME280-bibliotheken # en de Pimoroni Inky pHAT bibliotheek import tijd import datetime import board import busio uit adafruit_bme280 import Adafruit_BME280 uit adafruit_bme280 import Adafruit_BME280_I2C import inkyphat import sys uit PIL import ImageFont inkyphat.set_colour('black') # voor zwart/wit inky phat inkyphat) #set_rotation 180° font1 = ImageFont.truetype(inkyphat.fonts. FredokaOne, 27) # Selecteer standaard lettertype font2 = ImageFont.truetype(inkyphat.fonts. FredokaOne, 19) # Selecteer standaard lettertypegegevens # lang ="DE" # stel taalparameter in, default ("") -> english lang ="EN" i2c = busio. I2C(board. SCL, board. SDA) bmp = Adafruit_BME280_I2C(i2c, address=0x76) # default i2c-adres (voor Adafruit BMP280) 0x77 (standaard), 0x76 voor Chinese breakout) #set referentiedruk # vereist voor al titutieve berekening, gelieve aan te passen. Standaardwaarde 1013,25 hPa # handmatige invoer: #reference_hPa =input ("Voer referentiedruk in hPa in: ") # of # stel de druk op het starttijdstip in als referentie, b.v. voor relatieve hoogtemetingen time.sleep (1) # wacht een seconde voor de 1e meting j= 0 pres_norm_sum = 0 terwijl j binnen bereik (5): # voer vijf metingen uit om de referentiewaarde te definiëren pres_norm_sum = pres_norm_sum + bmp.pressure j= j+ 1 time.sleep (1) reference_hPa=(pres_norm_sum/j) # stel initiële meting in als referentiepunt om hoogtemetingen mogelijk te maken bmp.sea_level_pressure = float (reference_hPa) print () while True: #runs forever, wijzig voor crontab-versie # gemeten waarden t=bmp.temperatuur p=bmp.druk h=bmp.humidity a=bmp.altitude # berekend door adafruit-bibliotheek van druk #timestamp ts = datetime.datetime.now() # timestamp ts0_EN ='{:%Y-% m-%d}'.format(ts) # timestamp - date, EN-formaat ts0_DE ='{:%d.%m.%Y}'.format(ts) # timestamp - date, Duits formaat ts1='{: %H:%M:%S}'.format(ts) # timestamp - time tmp = "{0:0.1f}".format(t) pre = "{0:0.1f}".format(p) hyg = "{0:0.1f}".format(h) alt="{0:0.1f}".format(a) tText = "Temp.: " pText_EN = "Druk: " pText_DE = "Luftdruck: " h Text_EN = "Vochtigheid: " hText_DE = "rel. LF: " aText_EN = "Altitude: " aText_DE = "Höhe üNN: " # exakt: ü. NHN, über Normal Höhen Null if (lang =="DE"): ts0 = ts0_DE aText = aText_DE pText = pText_DE hText = hText_DE else: # standaard engels ts0 = ts0_EN aText = aText_EN pText = pText_EN hText = hText_EN # print waarden om print (ts) print (tText, tmp, "°C") print (pText, pre, " hPa") print (hText, hyg, " %") print (aText, alt, " m") print () # print waarden naar Inky pHAT t1 = 5 # tab 1, eerste kolom, vereenvoudigt optimalisatie van lay-out t2 = 110 # tab 2, tweede kolom inkyphat. clear() inkyphat.text((t1, 0), ts0, inkyphat. BLACK, font2) # schrijf tijdstempel datum inkyphat.text((t2, 0), ts1, inkyphat. BLACK, font2) # schrijf tijdstempel inkyphat.line ((t1, 25, 207, 25), 1, 3) # teken een lijn inkyphat.text((t1, 30), tText, inkyphat. BLACK, font2) inkyphat.text((t2, 30), (tmp + "°C"), inkyphat. BLACK, font2) inkyphat.text((t1, 55), pText, inkyphat. BLACK, font2) inkyphat.text((t2, 55), (pre + " hPa"), inkyphat. ZWART, lettertype2) inkyphat.text ((t1, 80), hText, inkyphat. BLACK, font2) inkyphat.text((t2, 80), (hyg + " %"), inkyphat. BLACK, font2) # alternatief berekende hoogte weergeven # inkyphat.text((t1, 80), aText, inkyphat. BLACK, font2) # inkyphat.text((t2, 80), (alt + " m"), inkyphat. BLACK, font2) inkyphat.show() time.sleep(51) # wacht enkele seconden voor de volgende metingen, +19 sec per cyclus inkyphat.clear() # lege Inky pHAT weergave procedure, inkyphat.show() # stilte voor crontab-versie

Stap 5: Het BMP280-script

De BMP280 lijkt erg op de BME280 sensor, maar meet alleen temperatuur en druk. De scripts lijken erg op elkaar, maar je hebt verschillende Circuit Python-bibliotheken nodig. Hier wordt in plaats van de luchtvochtigheid een berekende hoogte, gebaseerd op een referentiedruk, weergegeven.

In bijlage vind je het script.

Aanbevolen: