Raspberry Pi Pico: LCD-1602-Display mit I2C-Modul programmieren

So ein Mikrocontroller wie der Raspberry Pi Pico verfügt über keine typischen Ausgabe-Schnittstelle, wie man es von einem Computer kennt. Im einfachsten Fall ist die Ausgabe auf das Leuchten einer oder mehrerer LEDs beschränkt. Wenn man Zeichen und Zahlen ausgeben will, dann eignen sich dafür ein- oder mehrstellige 7-Segment-Anzeigen. Allerdings ist man damit in den Darstellungsmöglichkeiten beschränkt.

Wenn es darum geht, Text und andere Zeichen darzustellen, dann ist ein HD44780-kompatibles LCD das Mittel der Wahl. Besonders beliebt sind LCD-1602-Displays mit einem Modul für die I2C-Schnittstelle. Das ist ein zweizeiliges LCD mit je 16 Zeichen. Durch das I2C-Modul zur Kommunikation mit dem Raspberry Pi Pico ist die Verdrahtung (4 Adern) und Ansteuerung (über eine Bibliothek) spielend leicht.

Im folgenden Aufbau geht es nur darum, das Display am Raspberry Pi Pico in Betrieb zu nehmen und ein kleines Programm auszuprobieren, das folgende Funktionen ausführt.

  • Zweizeiligen Text ausgeben
  • Bildschirm-Inhalt löschen
  • Punkte darstellen
  • Hintergrundbeleuchtung ausschalten
  • Hintergrundbeleuchtung einschalten
  • Display ausschalten
  • Display einschalten

Aufbau und Bauteile

Raspberry Pi Pico mit LCD 1602 Display mit I2C-Modul

  1. Verbinde zuerst den Raspberry Pi Pico mit dem USB vom Host-Computer.
  2. Verbinde dann das Display mit VCC (Pin 40) und GND (z. B. (Pin 38) vom Raspberry Pi Pico.
  3. Wenn das Display mit VCC und GND verbunden ist, sollte es angehen. Angezeigt wird aber noch nichts.
  4. Wenn das Display mit Strom versorgt ist, dann verbinde das Display mit I2C0 SDA (GPIO20, Pin 26) und I2C0 SDL (GPIO21, Pin 27) vom Raspberry Pi Pico.

Hinweis: Warum wählen wir gerade Pin 26 und 27? Diese Pins haben nur den I2C als Doppelbelegung. Man kommt nicht mit SPI, ADC oder UART in Konflikt.

Schnell und einfach alle Bauteile zusammen bestellen

Programmcode und Konfiguration

Dreh- und Angelpunkt der softwareseitigen Ansteuerung des 1602-Displays mit der I2C-Schnittstelle sind zwei Python-Bibliotheken. Eine für den I2C und das andere für das Display selber. Die beiden folgenden Dateien müssen heruntergeladen und auf dem Pico gespeichert werden:

Damit hast Du die softwareseitigen Voraussetzungen zur Ansteuerungen des Displays erfüllt.

Der folgende Programmcode ist dann denkbar einfach. Zuerst werden die Bibliotheken eingebunden, die für die Ansteuerung wichtig sind. Anschließend werden die GPIO-Pins für I2C und dann das Display initialisiert. Und dann wird ein Text auf dem Display ausgegeben.

Anschließend werden noch ein paar Kommandos zur Steuerung des Displays ausgeführt. Was gerade aktiv oder deaktiv ist, wird in der Kommandozeile ausgegeben.

# Bibliotheken laden
from time import sleep_ms
from machine import I2C, Pin
from machine_i2c_lcd import I2cLcd

# Initialisierung I2C
i2c = I2C(0, sda=Pin(20), scl=Pin(21), freq=100000)

# Initialisierung LCD über I2C
lcd = I2cLcd(i2c, 0x27, 2, 16)

# Text in Zeilen
zeile_oben  = 'Hello World';
zeile_unten = 'Hurra ich lebe'

# Display-Zeilen ausgeben
lcd.putstr(zeile_oben + "\n" + zeile_unten)
sleep_ms(3000)

# Display-Inhalt löschen
lcd.clear()
sleep_ms(1000)

# Position im Display
for zeile in range (0,2):
    for spalte in range (0,16):
        lcd.move_to(spalte, zeile)
        lcd.putstr('.')
        sleep_ms(300)

print("Hintergrundlicht aus")
lcd.backlight_off()
sleep_ms(3000)

print("Hintergrundlicht an")
lcd.backlight_on()
sleep_ms(3000)

print("Display aus")
lcd.display_off()
sleep_ms(3000)

print("Display an")
lcd.display_on()
sleep_ms(3000)

Troubleshooting

Wenn nach dem Aufbau und der Programmausführung etwas nicht funktioniert, dann muss Du Dich auf die Fehlersuche begeben. Hier musst Du berücksichtigen, dass das Display aus zwei Bauteilen besteht. Das Display selber und das I2C-Modul. Software-seitig werden beide separat angesteuert.

Das Display selber macht dabei selten Probleme. In der Regel ist der Fehler in der Verkabelung oder im Programmcode bei der Initialisierung und den Parametern der I2C-Schnittstelle zu suchen.

Fehler: Es wird kein Text oder kaum sichtbar angezeigt

Der Programmcode wird ausgeführt, aber auf dem Display nichts oder nur sehr schwach angezeigt. Das wird daran liegen, dass der Kontrast des Displays zu schwach oder zu stark eingestellt ist. Es kommt oft vor, dass der Display-Kontrast im Auslieferungszustand ungünstig eingestellt ist.

Lösung: Auf der Rückseite des Displays, auf dem sich das I2C-Modul befindet, befindet sich ein blaues Potentiometer. Mit einem feinen Kreuzschlitz-Schraubendreher kann damit der Kontrast des Displays eingestellt werden. Durch Drehen nach Links und Rechts ist der Kontrast so einzustellen, dass die Schrift im Display gut lesbar angezeigt wird.
Vorsicht: Mit dem Schraubendreher keine Kurzschlüsse auf der Platine verursachen.

Hinweis: Ein LCD-1602-Display lässt sich in der Regel mit 5 Volt oder 3,3 Volt betreiben. Typischerweise mit 5 Volt. Wenn man eines hat, dass mit 3,3 Volt funktioniert, muss man hier oft das Kontrast-Potentiometer auf dem I2C-Modul bis an den Anschlag drehen, damit das Display etwas anzeigt.

Fehler: Programmabbruch mit Fehlermeldungen

Wenn man ein LCD-1602-Displays mit I2C-Modul programmiert und es bei der Programmausführung zu Fehlermeldungen kommt, die offensichtlich mit dem Display zu tun haben, dann muss man mehrere Fehlerquellen berücksichtigen und systematisch und konsequent ausschließen.

  • Wird das Display mit Strom versorgt? Das ist dann der Fall, wenn das Display leuchtet. Außerdem befindet sich auf der Rückseite, auf dem I2C-Modul, eine rote LED, die leuchten sollte.
  • Sind die I2C-Leitungen mit dem Raspberry Pi Pico korrekt verbunden? Die Leitungen für SDA und SCL des I2C werden gerne mal vertauscht. Da solltest Du noch einmal einen Blick drauf werfen.
  • Sind die GPIO-Nummern im Programmcode richtig eingetragen? Gleich zwei Fehlerquellen können hier auftreten. Zum einen hat man hier die Pin-Nummern verwendet und nicht die Nummern der GPIOs. Desweiteren können die GPIO-Nummern von SDA und SCL vertauscht sein.

I2C verbinden und programmieren

Um Probleme mit dem I2C, dessen Verkabelung und Konfiguration im Programmcode auszuschließen, kann man erstmal einen I2C-Scan durchführen, der die Adressen (in dezimaler Schreibweise) der Geräte, die mit diesem I2C-Bus verbunden sind anzeigt.

Darf es etwas mehr sein?

Was könnte man mit dem Display alles anstellen? Grundsätzlich könnte alles ausgegeben werden, wofür die Kommandozeile verwendet wird. Allerdings ist ein Display für konkrete Projekte und Anwendungen viel spannender.

Weitere verwandte Themen:

Frag Elektronik-Kompendium.de

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Entprellen und Zustände anzeigen
  • LED mit Taster einschalten und ausschalten
  • Ampel- und Lauflicht-Steuerung
  • Elektronischer Würfel
  • Eigene Steuerungen programmieren

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

Programmieren mit dem Raspberry Pi Pico

Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren