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
- Verbinde zuerst den Raspberry Pi Pico mit dem USB vom Host-Computer.
- Verbinde dann das Display mit VCC (Pin 40) und GND (z. B. (Pin 38) vom Raspberry Pi Pico.
- Wenn das Display mit VCC und GND verbunden ist, sollte es angehen. Angezeigt wird aber noch nichts.
- 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.
- Raspberry Pi Pico: Digitales Thermometer mit Display
- Raspberry Pi Pico: Anwesenheitserkennung für ein Display mit PIR Motion Detector (HC-SR501)
- Raspberry Pi Pico: Anwesenheitserkennung für ein Display mit Ultraschallsensor (HC-SR04P)
- Raspberry Pi Pico: Abstandsmessung mit Ultraschallsensor (HC-SR04P) auf einem Display anzeigen (LCD-1602 mit I2C)
Weitere verwandte Themen:
- Raspberry Pi Pico: Temperatur-Messung und Temperatur anzeigen
- Raspberry Pi Pico: Temperaturregler / Temperaturregelung
- Elektronik mit dem Raspberry Pi Pico
- Raspberry Pi Pico: Grundlagen zum I2C
Teilen:
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
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
Online-Workshop: 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.
Für Ihre Fragen zu unseren Online-Workshops mit dem Raspberry Pi Pico besuchen Sie unseren PicoTalk (Online-Meeting). (Headset empfohlen)