Display ansteuern


auf dem 1.69-Zoll-IPS-LCD-Display
240 x 280 Pixel - RP2350


Anleitung getestet mit CircuitPython 10.0.0




Bildbox 1 (klick hier)




Hardware

- 1,69-Zoll-IPS-LCD-Touch-Display WS-30126 (RP 2350)
- USB-A zu USB-C Kabel

Firmware

- CircuitPython 10.0.0

Zuerst nehmen wir das Display in Betrieb. Als Treiber dafür verwenden wir die Bibliothek adafruit.st7789.mpy und kopieren die in den 'lib-Ordner'.

Los gehts

Das Display ist fest auf der Platine mit dem Mikrokontroller installiert. Es versteht sich, dass bisher keine Spannung angelegt ist! Als erstes wird die Firmeware für den Pico benötigt.

1. Bevor Sie das Board erstmalig an die Stromversorgung anschließen, muss zunächst die CircuitPython-Firmware übertragen werden. Ich nutze dazu die Seite von CircuitPython und lade die uf2-Datei für den Pico 2 von hier herunter:
https://circuitpython.org/board/waveshare_rp2040_lcd_1_28/

2. Nach dem Download der uf2-Datei muss diese auf das Displayboard übertragen werden. Im ersten Schritt nehmen Sie das Board im ausgeschalteten Zustand zur Hand und drücken die Boot-Taste (siehe Beschriftung für die Button an der Seite der Platine). Die wird gehalten und das Board erst dann (!!) über das USB-A zu USB-C Kabel mit dem Rechner verbunden. Nach dem Verbinden kann die Boot Taste losgelassen werden. Es öffnet sich im Filesystem ein Explorer-Fenster mit einem neuen Massenspeicher RPI-RP2. Öffnen Sie jetzt auf dem Rechner den Download-Ordner und ziehen die uf2-Datei mit der CircuitPython Firmware auf den Massenspeicher RPI-RP2. Sobald die Firmware-Datei auf das Board kopiert ist, wird die Firmware ausgeführt und ein neuer Massenspeicher 'CIRCUITPY' im Explorerfenster angezeigt. Damit ist die Programmiersprache CircuitPython für die Ansteuerung des Displayboards installiert und die Programmierung kann über Thonny beginnen.

3. Falls bei der ersten Benutzung von Thonny kein Board erkannt wird, muss in den Interpreter-Einstellungen die Port-Auswahl überprüft werden und ggf. auf CircuitPython (generic) eingestellt werden. Auch wenn Sie mehrere Displays benutzen, wird der Com-Port nicht immer richtig erkannt. Klicken Sie dann ganz unten rechts auf den 'Button' und wählen den angezeigten Com-Port aus. Das Fenster sollte jetzt so aussehen:

In der unteren Kommandozeile wird der Controller z.B. mit "Adafruit CircuitPython 10.0.0 on 2025-10-01; Raspberry Pi Pico 2 with rp2350a" angezeigt.

Setzen Sie für die erste Inbetriebnahme des Displays den Quellcode aus dem unteren Kasten in die Thonny IDE ein und speichern ihn mit einem Namen ihrer Wahl.

  
  
1  # Inbetriebnahme des Displays
2  import time
3  import board
4  import busio
5  import displayio
6  import digitalio
7  import terminalio
8  import fourwire
9  from adafruit_display_text import label
10 from adafruit_st7789 import ST7789
11
12 # Release any resources currently in use for the displays
13 displayio.release_displays()
14 cs=board.GP9
15 dc=board.GP8
16 sck=board.GP10
17 mosi=board.GP11
18 reset=board.GP13
19 bl=board.GP25
20 # Release any resources currently in use for the displays
21 displayio.release_displays()
22 spi = busio.SPI(sck, mosi)
23 display_bus = fourwire.FourWire(spi, command=dc, chip_select=cs, reset=reset)
24 display = ST7789(display_bus, rotation=0, width=240, height=280, backlight_pin=bl, rowstart=20, colstart=0)
25 display.brightness = 1
26 # Make the display context
27 main = displayio.Group()
28 display.root_group = main
29
30 ## label Zeit
31 time_area = label.Label(terminalio.FONT, text="", line_spacing=1, color=0xffffff)
32 text_group = displayio.Group(scale=4, x=25, y=140)
33 text_group.append(time_area)
34 main.append(text_group)
35
36 while True:
37     # Digitalzeit anzeigen
38     current_time = time.localtime()
39     hour = current_time.tm_hour
40     minute = current_time.tm_min
41     second = current_time.tm_sec
42     time_area.text = "{:02}:{:02}:{:02}".format(hour,minute,second)
  

Wenn Sie das Programm starten, wird die Zeit im Digitalformat angezeigt. Entscheidend sind aber für die spätere Nutzung die Zeilen 14 bis 19. Hier können Sie die GPIO-Pins für die Displayansteuerung entnehmen. Die Ausrichtung des Displays mit dem Wert rotation = 0 (Zeile 24) ist so, dass Sie die Schrift aufrecht sehen, wenn der USB-Anschluss nach rechts zeigt. Beim Wert rotation = 180 wird die Anzeige um 180 Grad gedreht und Sie müssen den USB-Anschluss nach links halten. Diese Ausrichtung wird später bei der Nutzung des Touchsensors noch eine Rolle spielen, worauf ich dann eingehe.



Aber zunächst erkläre ich noch, wie Sie das Board mit einem Litium-Ionen Akku betreiben können. Zunächst muss die Batterie mit dem Akku-Connector des Boards verbunden werden. Achten Sie dabei auf die Polarität.

Achtung! Ich habe bei etlichen Akkubestellungen festgestellt, dass die Polarität nicht immer mit den Angebotsangaben und den Abbildungen übereinstimmte.

Wenn Sie die Rückseite des Displays wie im Foto vor sich sehen, muss der Stecker wie gezeigt, eingelegt werden, d.h. rot (+) ist unten und schwarz (-) ist oben.




Wenn Sie das Board nun in Betrieb nehmen, werden Sie feststellen, dass es trotzdem nur über den USB-C Anschluss läuft. Das liegt daran, dass der Batterie-Connector erst aktiviert werden muss. Er ist am GPIO 15 angeschlossen. Das Aktivieren funktioniert in CircuitPython so:

  
  
1  import board
2  import digitalio
3
4  bat = digitalio.DigitalInOut(board.GP15)
5  bat.direction = digitalio.Direction.OUTPUT
6  bat.value = True
  

In einem bereits existierenden Programm werden die Bibliotheken in den Zeilen 1 und 2 u.U. schon importiert sein, so dass Sie nur die Zeilen 4 bis 6 einfügen müssen. Nach einem Neustart wird der Akku jetzt automatisch geladen und beim Entfernen des USB-C Steckers läuft das Programm weiter. Damit würde das Board jetzt laufen, bis der Akku leer ist oder Sie ihn entfernen. Praktischer wäre die Möglichkeit zum 'Ausschalten'. Dazu befindet sich an der Seite des Boards ein Taster mit der Bezeichnung PWR, der mit GPIO 14 verbunden ist. Die Erweiterung des Programmcode im unteren Kasten (und Einfügen in eine Anwendung) ermöglicht nun das Ausschalten bei Akkubetrieb.

  
  
1  import board
2  import digitalio
3
4  bat = digitalio.DigitalInOut(board.GP15)
5  bat.direction = digitalio.Direction.OUTPUT
6  bat.value = True
7
8  pwr = digitalio.DigitalInOut(board.GP14)
9  pwr.direction = digitalio.Direction.INPUT
10
11 while True:
12     if pwr.value == 0: # PWR-Taster gedrueckt
13         bat.value = False # Herunterfahren
  



Viel Spass und Erfolg beim Ausprobieren.