Mit dem LCD1602 wollen wir unseren Wettersensor erweitern, um die aktuellen Werte direkt anzeigen zu können.
Waveshare LCD1602
Das LCD1602 ist ein LC (Liquid Crystal) Display, das 16 Zeichen in zwei Zeilen ausgeben kann. Von Waveshare gibt es eine Version mit bereits montierter Treiberplatine, die nur noch die Anschlüsse an den I²C Bus zur Verfügung stellt (Datenblatt). Dies müsstest du sonst selbst anlöten. Der mitgelieferte Kabelsatz ist wie folgt farbcodiert
- SDA – gelb
- SCL – blau
- GND – violett
- VCC – grün
Warum Waveshare keine einheitlichen Farben verwendet, ist mir schleierhaft. Sowas sorgt nur für Verwirrung und öffnet Fehlern Tor und Tür.
Material
Die Materialliste findest du im Vorgängerpost. Zusätzlich verwende ich noch ein Breadboard als Mehrfachsteckdose und Stiftleisten , um das Display und den BME280 gleichzeitig an den Bus anzuschließen. Dazu brauchst du noch fünf Jumperkabel (f-m), um den Raspberry Pi mit dem Breadboard zu verbinden.Die Farbgebung dieser Jumper orientiert sich bei mir an den Farben der Kabel des BME280.
Schaltungsaufbau
Da Sowohl das Breakout des BME280 als auch das des LC-Displays Anschlüsse mit f-Steckern haben, habe ich die von beiden benötigten Pins von zwei Stiftleisten abgegriffen. Der Fallstrick ist hier, das beim BME280 SCL gelb ist, beim Display aber blau und umgekehrt!
Testen der Schaltung
Nach der Verkabelung (ich weiß, das sieht etwas chaotisch aus) startest du den Raspi und scannst mit i2cdetect -y 1
den I²C Bus. Das Ergebnis sollte dann so aussehen:
Wieder hat der BME280 die Adresse 0x76. Das LCD1602 ist jetzt mit der Adresse 0x3e parallel am I²C dazugekommen.
Python
Jetzt geht’s darum, mit Python etwas auf dem Display anzuzeigen. Dazu benötigen wir erstmal das richtige Python-Modul. Dies kannst du hier herunterladen.Nachdem du das ZIP-Archiv entpackt hast, findest du eine Datei LCD1602.py
vor, die das Modul repräsentiert, dass wir für das Display benötigen. Kopiere es in das Verzeichnis, in dem auch unser eigenes Programm liegt.
Aus dem Modul sind für uns hier zwei Methoden wichtig. setCursor(x,y)
setzt den Cursor auf Zeile x und Spalte y, die Werte sind Null-basiert, also x=0
für die erste Zeile und 1
für die zweite. Genauso wird die erste Position einer Zeile mit 0
adressiert.
Mit der Methode printout(str)
wird der String str
ab der aktuellen Cursorposition ausgegeben.
Jetzt erweitern wir unser Programm vom Vorgänger-Post um einen Methode print_weather().
def print_weather(temperature, humidity, pressure):
lcd.setCursor(0, 0)
lcd.printout('T:{:5.1f}'.format(temperature))
lcd.printout(' D:{:5.1f}'.format(pressure))
lcd.setCursor(0, 1)
lcd.printout('F:{:5.2f}%'.format(humidity))
Die Methode schreibt die Messwerte aufs Display, Temperatur und Druck in die erste Zeile, den Wert für die Feuchtigkeit in die zweite. Das Ergebnis siehst du im Foto oben.
Der Aufruf der Methode geschieht in der Arbeitsschleife gleich nach dem Auslesen der Sensorwerte und vor dem Schreiben in die Datenbank.
print_weather(temperature,humidity, pressure)
Das vollständige Programm wdisp.py findest du im GIT-Repository.
Du kannst jetzt Sensor, Raspi und Display in ein Kunststoff Gehäuse schrauben und hast damit eine 1A Wetterstation. Allerdings wäre dazu ein Pico vermutlich besser geeignet, wegen des Stromverbrauchs.