Inhaltsverzeichnis:

Inky_pHAT Wetterstation - Gunook
Inky_pHAT Wetterstation - Gunook

Video: Inky_pHAT Wetterstation - Gunook

Video: Inky_pHAT Wetterstation - Gunook
Video: Build Tour: E-Paper Weather Display 2024, November
Anonim
Inky_pHAT Wetterstation
Inky_pHAT Wetterstation
Inky_pHAT Wetterstation
Inky_pHAT Wetterstation
Inky_pHAT Wetterstation
Inky_pHAT Wetterstation
Inky_pHAT Wetterstation
Inky_pHAT Wetterstation

Ich möchte hier eine sehr einfache und kompakte, Raspberry Pi Zero-basierte Wetterstation beschreiben, die die von einem BME280 Temperatur-/Druck-/Feuchtigkeitssensor gemessenen Werte auf einem Pimoroni Inky pHAT E-Paper/E-Ink-Display anzeigt. Um den Anschluss von Sensoren und dem pHAT an den GPIO des Pi zu ermöglichen, habe ich einen Pimorini Pico HAT Hacker mit zwei Buchsenleisten zwischen dem GPIO und dem Display angebracht. Das Gerät wurde zum Anschluss mehrerer Sensoren verwendet, daher ist die hier beschriebene BME280-Version nur ein Beispiel.

Im Gegensatz zu LCD-Displays behalten E-Ink-Displays das Bild auch dann, wenn der Strom ausgeschaltet wurde. Daher sind sie eine sehr gute Lösung, wenn Sie Informationen anzeigen möchten, die nur von Zeit zu Zeit aktualisiert werden, insbesondere um Niedrigenergiegeräte zu bauen. Der große Vorteil der monochromen/schwarzen Version des Inky pHAT besteht darin, dass die Aktualisierung des Displays nur etwa eine Sekunde dauert, anstatt wie bei den dreifarbigen Versionen zehn bis fünfzehn Sekunden. Film schauen.

Die Blinka-Bibliothek von Adafruit ermöglicht die Ausführung von Circuit-Python-Code auf dem Raspberry Pi, und Circuit-Python-Beispiele für eine Vielzahl von Sensoren sind von Adafruit erhältlich. Eine detaillierte Beschreibung zur Installation von Blinka und den Circuit Python-Codes finden Sie auf der Adafruit-Website. Die bisher getesteten Bibliotheken (BMP280, BME280, TSL2591, TCS34785, VEML7065, …) funktionierten sehr gut, wobei es bei einigen Beispielcodes kleinere Probleme gab.

BME280 ist ein Sensor zur Messung von Temperatur, Luftfeuchtigkeit und Luftdruck. BMP280-Breakouts sind von vielen Anbietern erhältlich, einschließlich Adafruit, aber ich habe hier eine billige chinesische Version verwendet. Bitte beachten Sie, dass diese unterschiedliche i2c-Adressen verwenden (Adafruit: 0x77, andere: 0x76).

Der Breakout ist über i2c mit dem Pi verbunden und das Auslesen des Sensors ist mit der Bibliothek und dem Beispielcode sehr einfach.

Schritt 1: Verwendete Materialien

Verwendete Materialien
Verwendete Materialien
Verwendete Materialien
Verwendete Materialien
Verwendete Materialien
Verwendete Materialien
Verwendete Materialien
Verwendete Materialien

Ein Raspberry Pi Zero, mit angeschlossenem Stecker. Aber jede Raspberry-Pi-Version würde reichen.

Ein Pimoroni Inky pHAT, schwarz/monochrome Version, 25€|22£|20US$, bei Pimoroni.

Ein Pimoroni Pico HAT Hacker, 2.50€|2£, mit zwei angeschlossenen Buchsenleisten, einer davon ein Booster-Header mit längeren Pins. Ich habe zwei verschiedene Versionen gebaut, siehe Beschreibung unten.

Ein BME280 Breakout, AZ Lieferung über Amazon.de @ 7,50 €, mit angehängtem Header.

Dehnungsüberbrückungskabel

Optional:

Ein USB-Netzteil für mobile Anwendungen

Ein Gehäuse für den Pi oder das Gerät (hier nicht abgebildet)

Schritt 2: Montage

Montage
Montage
Montage
Montage
Montage
Montage
  • Löten Sie die Buchsenleisten an den Pico HAT-Hacker. Prüfen Sie vor dem Löten die korrekte Ausrichtung. Ich habe zwei Versionen davon gebaut, für unterschiedliche Zwecke. Eine mit dem nach unten gerichteten Booster-Header in der vorderen Reihe und einem normalen, nach oben gerichteten Header in der hinteren Reihe und eine Version mit dem nach unten gerichteten Booster-Header in der hinteren Reihe und einer rechtwinkligen Buchsenleiste in der vorderen Reihe. Siehe Bilder. Die erste Version ermöglicht das einfache Anbringen und Austauschen von Sensoren und Kabeln, während die Version mit dem nach innen gerichteten Header es erlaubt, Pi, Sensor und Inky pHAT in einem Gehäuse zu umschließen. Alternativ können Sie die Kabel zwischen GPIO und Sensor direkt an den Pico HAT-Hacker anlöten und/oder den Pico HAT-Hacker direkt an die GPIO-Pins anlöten. Verwenden Sie in jedem Fall die minimal erforderliche Menge an Lot.
  • Löten Sie den Header bei Bedarf an den Sensor.
  • Stapeln Sie die modifizierte Pico HAT-Hackereinheit auf dem Pi und fügen Sie dann den Inky pHAT hinzu. Fügen Sie bei Bedarf etwas Unterstützung ein, z. B. Ein Schaumstoffblock oder Abstandshalter für den Inky pHAT.
  • Schließen Sie die Kabel und den Sensor an, indem Sie die 3V-, GND-, SDA- und SCL-Anschlüsse verwenden. Nicht alle Sensoren überleben 5V, also überprüfen Sie bitte, bevor Sie sie an 5V-Anschlüsse anschließen.
  • Installieren Sie die Blinka-Bibliothek und dann die Circuit Python BME280-Bibliothek von Adafruit.
  • Installieren Sie die Inky pHAT-Bibliothek von Pimoroni.
  • Installieren Sie den Beispiel-Python-Code, der in einem späteren Schritt beschrieben und an diese Anleitung angehängt wird.
  • Führen Sie den Code aus.

Schritt 3: Verwenden des Geräts

Verwenden des Geräts
Verwenden des Geräts

Es gibt zwei Möglichkeiten, das Gerät zu verwenden.

Der hier gezeigte Code soll mit einem angehängten Bildschirm gestartet werden, könnte dann aber auch ohne laufen.

Mit geringfügigen Änderungen am Code können Sie mit crontab Messungen zu definierten Zeitpunkten durchführen. Dadurch könnte der Stromverbrauch noch weiter gesenkt werden. Hervorragende Beschreibungen zur Verwendung von crontab finden Sie an anderer Stelle.

In Verbindung mit einem Kraftpaket können Sie ein mobiles Gerät bauen und damit die Bedingungen drinnen oder draußen, im Kühlschrank, in der Sauna, Ihrem Humidor, dem Weinkeller, im Flugzeug, … messen.

Mit einem Zero W können Sie die Werte nicht nur auf dem Display anzeigen, sondern auch wie an anderer Stelle beschrieben per WLAN an einen Server oder Ihre Website senden.

Schritt 4: Das BME280-Skript

Das BME280-Skript
Das BME280-Skript

Wie bereits erwähnt, müssen Sie die Bibliotheken Adafruit Blinka und Circuit Python BME280 sowie die Bibliothek Pimoroni Inky pHAT installieren.

Der Code initialisiert zuerst den Sensor und Inky pHAT, liest dann die Temperatur-, Druck- und Feuchtigkeitswerte vom Sensor und zeigt sie auf dem Bildschirm und dem E-Ink-Display an. Mit dem Befehl time.sleep() werden jede Minute Messungen durchgeführt. Passen Sie nach Bedarf an. Durch Einstellen eines Sprachparameters können Sie die Sprache ändern, in der die Ergebnisse angezeigt werden.

Mit dem Inky pHAT E-Ink-Display erstellen Sie zunächst das anzuzeigende Bild im Speicher, bevor es schließlich mit dem Befehl inkyphat.show() auf den Bildschirm übertragen wird. Die Inky pHAT-Bibliothek vereinfacht den Prozess und bietet Befehle zum Zeichnen und Formatieren von Text, Linien, Rechtecken, Kreisen oder zur Verwendung von Hintergrundbildern.

Neben den Messwerten wird auch der Zeitpunkt der Messung angezeigt.

Bitte beachten Sie, dass das Skript sowie die Bibliotheken in Python 3 geschrieben sind, also öffnen und ausführen mit Py3 IDLE oder gleichwertig.

# Ein Skript für den bme280 Temperatur-/Druck-/Feuchtigkeitssensor (Nicht-Adafruit-Version)# und die inky pHAT – schwarze Version # # Version 01. Dezember 2018, Dr. H # # Erfordert Adafruit Blinka und Circuit Python BME280 Bibliotheken # und Pimoroni Inky pHAT-Bibliothek import time import datetime import board import busio von adafruit_bme280 import Adafruit_BME280 von adafruit_bme280 import Adafruit_BME280_I2C import inkyphat import sys von PIL import ImageFont inkyphat.set_colour('black') # für s/w inky phat inkyphat.set_rotation(180) #turndisplay 180° font1 = ImageFont.truetype(inkyphat.fonts. FredokaOne, 27) # Standardschriftart auswählen font2 = ImageFont.truetype(inkyphat.fonts. FredokaOne, 19) # Standardschriftdaten auswählen # lang ="DE" # Sprachparameter einstellen, default ("") -> english lang ="EN" i2c = busio. I2C(board. SCL, board. SDA) bmp = Adafruit_BME280_I2C(i2c, address=0x76) # default i2c address (für Adafruit BMP280) 0x77 (default), 0x76 für Chinese Breakout) #Referenzdruck einstellen # für al. erforderlich titute Berechnung, bitte anpassen. Standardwert 1013,25 hPa # manuelle Eingabe: #reference_hPa =input („Referenzdruck in hPa eingeben:“) # oder # Solldruck zum Startzeitpunkt als Referenz, z. B. für relative Höhenmessungen time.sleep (1) # warte eine Sekunde vor der ersten Messung j= 0 pres_norm_sum = 0 während j im Bereich (5): # fünf Messungen durchführen, um den Referenzwert zu definieren pres_norm_sum = pres_norm_sum + bmp.pressure j= j+ 1 time.sleep (1) reference_hPa=(pres_norm_sum/j) # Anfangsmessung als Referenzpunkt setzen, um Höhenmessungen zu ermöglichen bmp.sea_level_pressure = float (reference_hPa) print () while True: #läuft ewig, modifiziere für crontab-Version # gemessen Werte t=bmp.temperature p=bmp.pressure h=bmp.humidity a=bmp.altitude # berechnet von der adafruit-Bibliothek aus dem Druck #timestamp ts = datetime.datetime.now() # timestamp ts0_EN ='{:%Y-% m-%d}'.format(ts) # Zeitstempel - Datum, EN-Format ts0_DE ='{:%d.%m.%Y}'.format(ts) # Zeitstempel - Datum, deutsches Format ts1='{: %H:%M:%S}'.format(ts) # Zeitstempel - Zeit 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 = "Druck: " pText_DE = "Luftdruck: " h Text_EN = "Luftfeuchtigkeit: " 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: # default english ts0 = ts0_EN aText = aText_EN pText = pText_EN hText = hText_EN # Werte zur Anzeige drucken print (ts) print (tText, tmp, "°C") print (pText, pre, " hPa") print (hText, hyg, " %") print (aText, alt, " m") print () # Werte in Inky drucken pHAT t1 = 5 # tab 1, erste Spalte, vereinfacht die Optimierung des Layouts t2 = 110 # tab 2, zweite Spalte inkyphat. clear() inkyphat.text((t1, 0), ts0, inkyphat. BLACK, font2) # Zeitstempeldatum schreiben inkyphat.text((t2, 0), ts1, inkyphat. BLACK, font2) # Zeitstempelzeit schreiben inkyphat.line ((t1, 25, 207, 25), 1, 3) # eine Linie zeichnen 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. SCHWARZ, Schrift2) inkyphat.text ((t1, 80), hText, inkyphat. BLACK, font2) inkyphat.text((t2, 80), (hyg + " %"), inkyphat. BLACK, font2) # alternativ berechnete Höhe anzeigen # inkyphat.text((t1, 80), aText, inkyphat. BLACK, font2) # inkyphat.text((t2, 80), (alt + " m"), inkyphat. BLACK, font2) inkyphat.show() time.sleep(51) # warten Sie einige Sekunden vor der nächsten Messung, +19 Sek. pro Zyklus inkyphat.clear() # leere Inky pHAT-Anzeigeprozedur, inkyphat.show() # Stille für crontab-Version

Schritt 5: Das BMP280-Skript

Der BMP280 ist dem BME280 Sensor sehr ähnlich, misst aber nur Temperatur und Druck. Die Skripte sind sehr ähnlich, Sie benötigen jedoch unterschiedliche Circuit-Python-Bibliotheken. Hier wird anstelle der Luftfeuchtigkeit eine berechnete Höhe, basierend auf einem Referenzdruck, angezeigt.

Anbei finden Sie das Skript.

Empfohlen: