Wie du am neuen Raspberry Pi Pico 2 das Waveshare 1,3″ TFT-LCD Display in MicroPython programmieren kannst. Du kannst dieses Display selbstverständlich auch mit dem Vorgängermodell und auch dem Pi Pico W programmieren, nur gerne möchte ich dir dieses heute am neuen Mikrocontroller der Raspberry Foundation präsentieren.
Disclaimer: Dieser Beitrag ist nicht gesponsert. Ich habe den Raspberry Pi Pico 2 und das Waveshare Display selbst gekauft, um meine Erfahrungen und Erkenntnisse mit euch zu teilen. Alle Meinungen und Empfehlungen in diesem Artikel basieren auf meinen persönlichen Eindrücken und Tests.
Für diesen Beitrag verwende ich den neuen Raspberry Pi Pico 2 welchen ich dir bereits im Beitrag Raspberry Pi Pico 2: Maximale Leistung bei unverändertem Layout vorgestellt habe, das Display ist jedoch auch voll kompatibel mit dem Vorgängermodell und natürlich dem RPi Pico mit WiFi
Inhaltsverzeichnis
- Bezug des Waveshare 1,3″ TFT-LCD Display
- Aufbau des Displays
- Programmieren des Waveshare Display am Pi Pico mit MicroPython
Bezug des Waveshare 1,3″ TFT-LCD Display
Das mir vorliegende Modell habe ich für knapp 13€ auf ebay.de* gekauft. Du findest dieses jedoch auch auf aliexpress.com und anderen asiatischen Onlinemärkten.
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Aufbau des Displays
Das Modul verfügt neben dem 1,3″ TFT-LCD noch über vier Taster (A, B, X, Y) sowie ein 4 Achsen Joystick mit einem Taster in der Mitte.
Auf der Rückseite des Displays findest du eine Fläche welche mit USB markiert ist, dieses ist der Indikator wie dieses Modul mit dem Raspberry Pi Pico verbunden wird. Solltest du über ein Dual Base Shield verfügen, so gibt es dort ebenso eine solche Markierung.
Technische Daten
Hier kurz zusammengefasst, die technischen Daten des Displays:
- Betriebsspannung: 2,6 bis 5,5 V
- Treiber: ST7789
- Kommunikationsschnittstelle: 4-Draht-SPI
- Display-Panel: IPS
- Auflösung: 240 x 240 Pixel
- Anzeigegröße: 23,4 x 23,4 mm
- Pixelgröße: 0,0975 x 0,0975 mm
- Abmessungen: 52,0 x 26,5 mm
- Auf der offiziellen Seite https://www.waveshare.com/wiki/Pico-LCD-1.3 findest du weitere Informationen zu diesem Modul.
Da dieses Display direkt auf den Mikrocontroller aufgesteckt wird, entfällt der Aufwand für die korrekte Verkabelung. Die Verbindung erfolgt über SPI, wodurch von den 26 verfügbaren GPIO-Pins noch 22 für andere Anwendungen übrig bleiben. Daher ist die Verwendung eines Dual Base Shields sinnvoll, da damit die restlichen Pins für zusätzliche Komponenten genutzt werden können.
Pinout des Displays
Nachfolgend das Pinout des Displays, welches für uns lediglich interessant wird, wenn wir das Display über ein wie oben gezeigtes Dual Base Shield mit dem Mikrocontroller verbinden, denn dann können wir die freien GPIOs verwenden. Solltest du ein anderes Modul zum Programmieren nutzen, so benötigst du dieses Pinout ebenso für die Konfiguration im Code.
Funktion | GPIO | Beschreibung |
---|---|---|
VCC | VSYS | Spannungsversorgung |
GND | GND | Minus-Pol |
DIN | GP11 | MOSI-Pin von SPI, Daten-Eingang des Slave-Geräts |
CLK | GP10 | SCK-Pin von SPI, Takt-Pin |
CS | GP9 | Chip-Auswahl von SPI, Low-aktiv |
DC | P8 | Daten-/Befehlssteuer-Pin (High für Daten; Low für Befehl) |
RST | GP12 | Reset-Pin, Low-aktiv |
BL | GP13 | Hintergrundbeleuchtungssteuerung |
A | GP15 | Benutzertaste A |
B | GP17 | Benutzertaste B |
X | GP19 | Benutzertaste X |
Y | GP21 | Benutzertaste Y |
HOCH | GP2 | Joystick hoch |
RUNTER | GP18 | Joystick runter |
LINKS | GP16 | Joystick links |
RECHTS | GP20 | Joystick rechts |
MITTE | GP3 | Joystick zentriert |
Programmieren des Waveshare Display am Pi Pico mit MicroPython
Den Mikrocontroller Raspberry Pi Pico 2 kannst du über die Arduino IDE, MicroPython und auch CircuitPython programmieren. Auf der Seite https://micropython.org/download/RPI_PICO2/ findest du die passende Firmware für den Pico 2 um diesen in MicroPython programmieren zu können.
Für das Display benötigen wir noch zusätzlich ein Modul um den Treiberchip ST7789 zu programmieren, dieses kannst du vom GitHub Repository russhughes/st7789py_mpy als ZIP-Datei herunterladen.
Text – “Hallo Welt!” anzeigen
Als erstes Beispiel möchte ich dir zeigen, wie du den Text “Hallo Welt!” auf dem Display anzeigst.
Wir benötigen hier zusätzlich noch die Datei tft_config.py für das Display, diese Datei finden wir ebenso auf dem verlinkten GitHub Repository unter “st7789py_mpy-master\tft_configs\waveshare_13”. Diese Datei kopieren wir in das root Verzeichnis unseres Mikrocontrollers!
Für den Text benötigen wir zusätzlich noch eine Schriftart, hier bietet der Entwickler eine kleine Handvoll von unterschiedlichen Schriftarten an, welche wir verwenden können, die Dateien finden wir unter “st7789py_mpy-master\romfonts”. Die Schriftart wird in das lib Verzeichnis auf dem Mikrocontroller kopiert!
import st7789py as st7789 import tft_config import vga2_bold_16x32 as font tft = tft_config.config(tft_config.WIDE) tft.fill(0) tft.rotation(1) tft.text(font, "Hallo Welt!", 25,100, st7789.BLACK, st7789.MAGENTA)
Sensordaten des DHT11 Sensors anzeigen
Mit dem Dual Base Shield können wir auf die freien GPIOs des Pico zugreifen und dort nun Sensoren wie den DHT11 Sensor anschließen. In meinem Fall habe ich diesen Sensor über GPIO 4, 5V und GND angeschlossen.
import st7789py as st7789 import tft_config import vga1_8x8 as font from machine import Pin import dht from time import sleep tft = tft_config.config(tft_config.WIDE) dhtSensor = dht.DHT11(Pin(4, Pin.IN)) while True: tft.fill(0) tft.rotation(1) tft.text(font, "DHT11 Sensordata", 25,10, st7789.MAGENTA, st7789.BLACK) dhtSensor.measure() tft.text(font, "Temperatur: "+str(dhtSensor.temperature())+"°C", 25,35, st7789.BLUE, st7789.BLACK) tft.text(font, "Luftfeuchtigkeit: "+str(dhtSensor.humidity())+"%", 25,55, st7789.RED, st7789.BLACK) sleep(2)
Tasten vom Display auswerten
Das Display von Waveshare besitzt an der Seite 4 Tasten welche mit A, B, X und Y beschriftet sind.
Beschriftung | GPIO | Funktion |
---|---|---|
A | GP15 | Benutzertaste A |
B | GP17 | Benutzertaste B |
X | GP19 | Benutzertaste X |
Y | GP21 | Benutzertaste Y |
Im nachfolgenden Beispiel nutze ich die beiden Taste A & B, um jeweils zwischen den beiden Sensorwerten Temperatur und rel. Luftfeuchtigkeit zu wechseln.
import st7789py as st7789 import tft_config import vga2_16x16 as font import vga2_16x32 as bigFont from machine import Pin import dht from time import sleep tft = tft_config.config(tft_config.WIDE) dhtSensor = dht.DHT11(Pin(4, Pin.IN)) tasterA = Pin(15, Pin.IN, Pin.PULL_UP) tasterB = Pin(17, Pin.IN, Pin.PULL_UP) def displaySensorValue(text, value, symbol): tft.fill(0) tft.rotation(1) tft.text(font, text, 35,35, st7789.BLUE, st7789.BLACK) tft.text(bigFont, str(value)+symbol,100,65, st7789.BLUE, st7789.BLACK) sleep(2) while True: if not tasterA.value(): dhtSensor.measure() displaySensorValue("Temperatur", dhtSensor.temperature(), "C") if not tasterB.value(): dhtSensor.measure() displaySensorValue("Luftfeucht.",dhtSensor.humidity(), "%")
Wie ist seitliche Lesbarkeit und Stromverbrauch?
Suche was als Statusanzeige Smarthome… alternative wären teure eInk_displays
Hi,
also ein e-Ink / e-Paper Display ist im vergleich natürlich bei dem Stromverbrauch unschlagbar und auch die seitliche Ablesbarkeit ist unschlagbar.
Ich finde persönlich dieses Display jedoch schon recht gut in der Ablesbarkeit, den Stromverbrauch habe ich jetzt nicht gemessen.
Gruß, Stefan