NodeMCU ESP8266: HD44780 LCD Display per I2C steuern

Neben vielen Anwendungen, bei denen hauptsächlich Daten erfasst werden, ist der ESP8266 auch zum Anzeigen von Daten geeignet. Dazu brauchen wir lediglich ein einfaches LCD Display am NodeMCU anzuschließen und können jegliche Daten anzeigen lasen. Damit wir nicht unnötig viele GPIO Pins des NodeMCU verwenden, nutzen wir einen I2C Display Adapter, womit nur noch zwei Pins gebraucht werden.

In diesem Tutorial wird die Installation, Verbindung und ein Beispiel zum Anzeigen von Text auf einem HD44780 Display mittels PCF8574 I2C Adapter über einen ESP8266 NodeMCU Mikrocontroller gezeigt.

Zubehör

Damit wir das HD47780 Display per I²C über unseren ESP ansprechen können, ist folgendes Zubehör nötig:

Falls du ein solches Projekt bereits für den Raspberry Pi umgesetzt hast, wirst du wahrscheinlich die meisten Komponenten bereits da haben.

Der Logik-Level Konverter wird aus dem selben Grund benötigt, wie er auch für den Raspberry Pi nötig ist: Die Betriebsspannung der IO Pins ist bei 3.3V, allerdings ist die Spannung des Displays 5V.

 

Verbindung des ESP8266 LCD Display

Zunächst einmal muss der Display Adapter auf das Display gelötet werden. Einige Displays haben bereits einen solchen aufgelötet (z.B. interessant, falls keine Lötmaterialien vorhanden sind). Aufgelötet sieht dies folgendermaßen aus:

HD44780 I2C Display 20x04 Zeichen

Die 4 Anschlüsse werden an den Logik-Level Konverter angeschlossen. Falls dir die Funktionsweise nicht bekannt ist, ist hier eine Veranschaulichung:

I2C Logik Level Konverter

Dabei werden auf der einen Seite 5V Spannung angelegt und auf der anderen Seite 3.3V. Jegliche Signale werden auf- oder abskaliert. Damit besteht keine Gefahr für die GPIOs und die Signale kommen dennoch richtig an.

Auf der linken Seite werden demnach die GPIOs des ESP8266 angeschlossen und auf der rechten Seite die Pins des Display Adapters (die vollständige Pinbelegung aller ESP Modelle findest du in diesem Tutorial):

ESP8266 NodeMCU 3.3V Level Konverter 5V Level Konverter I2C LCD Adapter
3V LV
VIN / V0 HV VCC
GND / G GND GND GND
D4 / GPIO2 TX1 (unten)
D3 / GPIO0 TX1 (oben)
 — TX0 (unten) SDA
 — TX0 (oben) SCL

Falls das Board später nicht reagiert, kann es daran liegen, dass z.B. an VIN keine 5V anliegen (dies war bei meinem Development Board der Fall). Du kannst dies mit einem Multimeter überprüfen und ggf. den anderen Pin mit 5V nehmen.

Hier der schematische Aufbau:

ESP8266 I2C display HD44780

 

I2C Erkennung & Installation der Firmware

Um das I2C und damit den Display Adapter überhaupt ansprechen zu können, muss unsere Firmware dies unterstützen. Dazu gehen wir wie gewohnt auf die NodeMCU Build Seite und wählen zusätzlich zu den standardmäßig ausgewählten Bibliotheken noch folgende beiden aus:

  • bit
  • i2c

Weiterhin können natürlich auch noch andere benötigte Bibliotheken dem Build hinzugefügt werden, z.B. falls du anschließend die Temperatur am ESP8266 auslesen und anzeigen lassen willst.
Um die Firmware ordnungsgemäß auf den NodeMCU zu übertragen, folge diesem Tutorial.

Anschließend öffnen wir unser ESPlorer Tool, stellen die Verbindung her und führen einmalig folgenden Code aus (neue Datei -> Code einfügen -> Send to ESP):

Hiermit werden alle angeschlossenen I2C Geräte inkl. derer Adressen erkannt. Dies werden wir im nächsten Schritt brauchen. Meine Ausgabe sieht folgendermaßen aus:

Scanning all pins for I2C Bus device
Device is wired: SDA to GPIO - IO index 4
Device is wired: SCL to GPIO - IO index 3
Device found at address 0x27

Wie du erkennen kannst, ist die I2C Adresse meines Displays 0x27.

 

NodeMCU Bibliothek für das HD44780 LCD Display

Nun brauchen wir noch eine Bibliothek, die wir aus anderen Skripten aufrufen können, um dann daraus Text anzeigen zu lassen. Wir erstellen also eine neue Datei mit dem Namen „i2clcdpcf.lua“ und fügen folgenden Inhalt ein:

Solltest du eine andere Adresse als 0x27 an deinem Display haben, so musst du dies in Zeile 8 anpassen.

Speichere das Skript und übertrage es auf den NodeMCU. Falls du diese Datei versuchst auszuführen, sollte es einen Fehler geben („i2clcdpcf.lua:4: table index is nil“).

 

Beispiel zur Textanzeige über den ESP8266

Die gerade erstellte Datei wird von anderen Skripten aus aufgerufen, wodurch wir dann den Text anzeigen lassen können. Dabei zeige ich ein sehr einfaches Beispiel (ohne WLAN Verbindung), womit der Text angezeigt werden kann.

Erstelle dazu eine neue Datei („hdd44780_example.lua“) mit folgendem Inhalt:

Hierbei musst du ggf. die Pins für SDA und SCL anpassen (diese wurden vorher ebenfalls mit der Adresse ausgelesen).

Nach dem Ausführen sollte der Text nun angezeigt werden. Zu beachten ist, dass innerhalb der Cursor Funktion der erste Wert die Spalte und der zweite Wert die Zeile (beide beginnend bei 0) angibt. Wer möchte kann dies in der Bibliothek ändern.

8 Kommentare

  1. Danke schön das du diese Idee verwirklicht hast (ob du nun mein Kommentar gelesen hast oder das von jemanden der das auch vorgeschlagen hat).
    Es ist ein sehr schönes Tutorial und ich hoffe das du noch mehr davon machst

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

Abonniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!