Innehållsförteckning:

Inky_pHAT Väderstation: 5 steg
Inky_pHAT Väderstation: 5 steg

Video: Inky_pHAT Väderstation: 5 steg

Video: Inky_pHAT Väderstation: 5 steg
Video: Плато Путорана. Озеро Аян. Заповедники Таймыра. Nature of Russia. 2024, November
Anonim
Inky_pHAT Väderstation
Inky_pHAT Väderstation
Inky_pHAT Väderstation
Inky_pHAT Väderstation
Inky_pHAT Väderstation
Inky_pHAT Väderstation
Inky_pHAT Väderstation
Inky_pHAT Väderstation

Jag här skulle vilja beskriva en mycket enkel och kompakt, Raspberry Pi Zero-baserad väderstation, som visar värdena uppmätta med en BME280 temperatur/tryck/fuktighetssensor på en Pimoroni Inky pHAT e-paper/e-ink display. För att möjliggöra anslutning av sensorer och pHAT till GPIO på Pi placerade jag en Pimorini Pico HAT -hackare med två kvinnliga headers anslutna mellan GPIO och displayen. Enheten har använts för att ansluta flera sensorer, så BME280 -versionen som beskrivs här är bara ett exempel.

Till skillnad från LCD-skärmar behåller e-bläckdisplayer bilden även om strömmen har stängts av. Därför är de en mycket bra lösning om du vill visa information som uppdateras bara då och då, särskilt för att bygga enheter med låg energi. Den största fördelen med den monokroma/svarta versionen av Inky pHAT är att uppdateringen av skärmen tar ungefär en sekund istället för tio till femton sekunder som krävs av trefärgsversionerna. Se film.

Adafruits Blinka -bibliotek gör det möjligt att köra Circuit Python -kod på Raspberry Pi, och Circuit Python -prover för en mängd olika sensorer är tillgängliga från Adafruit. En detaljerad beskrivning av hur du installerar Blinka och Circuit Python -koder finns på Adafruit -webbplatsen. De bibliotek jag testat hittills (BMP280, BME280, TSL2591, TCS34785, VEML7065, …) fungerade mycket bra, medan det fanns mindre problem i några av exempelkoderna.

BME280 är en sensor för att mäta temperatur, luftfuktighet och atmosfärstryck. BMP280 -utbrott är tillgängliga från många leverantörer, inklusive Adafruit, men jag använde här en billig kinesisk version. Observera att dessa använder olika i2c -adresser (Adafruit: 0x77, andra: 0x76).

Utbrottet är anslutet till Pi med i2c, och att läsa sensorn är mycket enkelt med hjälp av biblioteket och exempelkoden.

Steg 1: Material som används

Material som används
Material som används
Material som används
Material som används
Material som används
Material som används
Material som används
Material som används

En Raspberry Pi Zero, med en manlig header bifogad. Men vilken Raspberry Pi -version som helst.

En Pimoroni Inky pHAT, svart/monokrom version, 25 € | 22 £ | 20US $, på Pimoroni.

En Pimoroni Pico HAT -hackare, 2,50 € | 2 £, med två kvinnliga rubriker fästa, en av dem en förstärkningsrubrik med längre stift. Jag har byggt två olika versioner, se beskrivning nedan.

Ett BME280 -utbrott, AZ -leverans via Amazon.de @ 7,50 €, med rubrik bifogad.

Förlängningsbygelkablar

Frivillig:

Ett USB -kraftpaket för mobila applikationer

Ett hus för Pi eller enheten (visas inte här)

Steg 2: Montering

hopsättning
hopsättning
hopsättning
hopsättning
hopsättning
hopsättning
  • Löd de kvinnliga rubrikerna till Pico HAT -hackaren. Innan lödning, kontrollera för korrekt orientering. Jag har byggt två versioner av detta, för olika ändamål. En med den nedåtvända förstärkningsrubriken placerad på främre raden och en normal, uppåt/motstående rubrik i den bakre raden, och en version med den nedåtvända förstärkningsrubriken i den bakre raden, och en rätvinklig kvinnlig rubrik i den främre raden. Se bilder. Den första versionen gör det enkelt att fästa och byta sensorer och kablar, medan versionen med det inåtvända huvudet gör det möjligt att omsluta Pi, sensor och Inky pHAT i ett hölje. Alternativt kan du löda kablarna som ansluter GPIO och sensorn direkt till Pico HAT -hackaren och/eller löda Pico HAT -hackaren direkt till GPIO -stiften. I vilket fall som helst, använd den minimala mängd löd som krävs.
  • Löd huvudet till sensorn, om det behövs.
  • Stapla den modifierade Pico HAT -hackarenheten på Pi och lägg sedan till Inky pHAT. Sätt vid behov in lite stöd, t.ex. Ett skumblock eller avstängningar för Inky pHAT.
  • Anslut kablarna och sensorn med 3V-, GND-, SDA- och SCL -portarna. Alla sensorer överlever inte 5V, så kolla innan du ansluter dem till 5V -portar.
  • Installera Blinka -biblioteket och installera sedan Circuit Python BME280 -biblioteket från Adafruit.
  • Installera Inky pHAT -biblioteket från Pimoroni.
  • Installera exemplet Python -kod som beskrivs i ett senare steg och bifogad denna instruerbara.
  • Kör koden.

Steg 3: Använda enheten

Använda enheten
Använda enheten

Det finns två alternativ för att använda enheten.

Koden som visas här ska startas med en bifogad skärm, men kan sedan köras utan.

Med mindre ändringar av koden kan du använda crontab för att utföra mätningar vid bestämda tidpunkter. Detta skulle göra det möjligt att minska strömförbrukningen ytterligare. Utmärkta beskrivningar av hur man använder crontab finns någon annanstans.

I kombination med ett kraftpaket kan du bygga en mobil enhet och använda den för att mäta förhållandena inne eller ute, i kylen, i bastun, din humidor, vinkällaren, i ett plan, ….

Genom att använda en Zero W kan du inte bara visa värdena på displayen utan också skicka dem till en server eller din webbplats via WLAN, som beskrivs på annat håll.

Steg 4: BME280 -skriptet

BME280 -skriptet
BME280 -skriptet

Som nämnts tidigare måste du installera Adafruit Blinka och Circuit Python BME280 -biblioteken samt Pimoroni Inky pHAT -biblioteket.

Koden initierar först sensorn och Inky pHAT, läser sedan temperatur-, tryck- och fuktighetsvärdena från sensorn och visar dem på skärmen och e-ink-displayen. Med hjälp av kommandot time.sleep () mäts varje minut. Justera efter behov. Genom att ställa in en språkparameter kan du ändra språket som används för att visa resultaten.

Med Inky pHAT e-ink display, bygger du först bilden som ska visas i minnet innan den slutligen överförs till skärmen med kommandot inkyphat.show (). Inky pHAT -biblioteket förenklar processen och erbjuder kommandon för att rita och formatera text, linjer, rektanglar, cirklar eller använda bakgrundsbilder.

Förutom mätvärdena visas också mättiden.

Tänk på att både skriptet och biblioteken är skrivna i Python 3, så öppna och kör med Py3 IDLE eller motsvarande.

# Ett skript för bme280 temperatur/tryck/fuktighetssensor (icke -Adafruit -version) # och den bläckfria pHAT - svart version # # version 01 december 2018, Dr H # # Kräver Adafruit Blinka och Circuit Python BME280 -bibliotek # och Pimoroni Inky pHAT bibliotek importtid import datetime import board import busio från adafruit_bme280 import Adafruit_BME280 från adafruit_bme280 import Adafruit_BME280_I2C import inkyphat import sys från PIL import ImageFont inkyphat.set_colour ('svart') # för svartvitt inkyphat (180) 180 ° font1 = ImageFont.truetype (inkyphat.fonts. FredokaOne, 27) # Välj standard font font2 = ImageFont.truetype (inkyphat.fonts. FredokaOne, 19) # Välj standard teckensnittsdata # lang = "DE" # set språkparameter, default ("") -> engelska lang = "EN" i2c = busio. I2C (board. SCL, board. SDA) bmp = Adafruit_BME280_I2C (i2c, address = 0x76) # default i2c -adress (för Adafruit BMP280) 0x77 (standard), 0x76 för kinesisk breakout) # set referenstryck # krävs för al titelberäkning, justera. Standardvärde 1013,25 hPa # manuell ingång: #reference_hPa = input ("Ange referenstryck i hPa:") # eller # ställ in tryck vid starttid som referens, t.ex. för relativa höjdmätningar tid. sömn (1) # vänta en sekund innan första mätningen j = 0 pres_norm_sum = 0 medan j i intervallet (5): # ta fem mätningar för att definiera referensvärdet pres_norm_sum = pres_norm_sum + bmp. tryck j = j + 1 gång. Sömn (1) referens_hPa = (pres_norm_sum/j) # ställ in inledande mätning som referenspunkt för att möjliggöra höjdmätningar bmp.sea_level_pressure = float (reference_hPa) print () medan True: #runs forever, modifiera för crontab-version # uppmätt värden t = bmp.temperatur p = bmp.tryck h = bmp.fuktighet a = bmp.altitude # beräknat av adafruit bibliotek från tryck #timestamp ts = datetime.datetime.now () # timestamp ts0_EN = '{:%Y-% m-%d} '. format (ts) # tidsstämpel - datum, EN -format ts0_DE =' {:%d.%m.%Y} '. format (ts) # tidsstämpel - datum, tyskt format 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 = "Tryck:" pText_DE = "Luftdruck:" h Text_EN = "Luftfuktighet:" 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 = h: # standard engelska ts0 = ts0_EN aText = aText_EN pText = pText_EN hText = hText_EN # utskriftsvärden för att visa print (ts) print (tText, tmp, "° C") print (pText, pre, "hPa") print (hText, hyg, " %") print (aText, alt, "m") print () # utskriftsvärden till Inky pHAT t1 = 5 # tab 1, frist column, förenklar optimering av layout t2 = 110 # tab 2, andra kolumnens inkyphat. rensa () inkyphat.text ((t1, 0), ts0, inkyphat. BLACK, font2) # skriva tidsstämpel datum inkyphat.text ((t2, 0), ts1, inkyphat. BLACK, font2) # skriva tidsstämpel tid inkyphat.line ((t1, 25, 207, 25), 1, 3) # rita en linje 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. SVART, font2) inkyphat.text ((t1, 80), hText, inkyphat. BLACK, font2) inkyphat.text ((t2, 80), (hyg + " %"), inkyphat. BLACK, font2) # alternativt visa beräknad höjd # inkyphat.text ((t1, 80), aText, inkyphat. BLACK, font2) # inkyphat.text ((t2, 80), (alt + "m"), inkyphat. BLACK, font2) inkyphat.show () time.sleep (51) # vänta några sekunder innan nästa mätning, +19 sek per cykel inkyphat.clear () # tom Inky pHAT display procedur, inkyphat.show () # tystnad för crontab-version

Steg 5: BMP280 -skriptet

BMP280 är mycket lik BME280 -sensorn, men mäter bara temperatur och tryck. Skripten är väldigt lika, men du behöver olika Circuit Python -bibliotek. Här visas istället för luftfuktigheten en beräknad höjd, baserat på ett referenstryck.

Bifogat hittar du manuset.

Rekommenderad: