Runde Mini-LC-Displays tauchen inzwischen immer häufiger auch abseits von Smartwatches auf. Wir klären wie diese arbeiten und wie Sie diese verwenden.
Bei runden Displays drängt sich förmlich die Frage auf, wie man sie ansteuert und welches Koordinatensystem zum Einsatz kommt. Diese Frage klären wir mithilfe des ESP32-C3-LCDkit. Darauf befindet sich ein rundes LC-Display mit einem Durchmesser von 1,28 Zoll (3,2 Zentimeter). Zur Datenübertragung nutzt das Kit eine SPI-Schnittstelle. Das 192 Seiten umfassende Datenblatt [1] des Displaytreibers liefert profunde Antworten auf die meisten Fragen. Allerdings fehlt eine Beschreibung, wie die einzelnen Pixel auf der runden Fläche angesprochen werden.
Ein interessanter Hinweis darauf versteckt sich in der Dokumentation des Dev-Kits. Sie beschreibt die Auflösung des Displays mit 240 x 240 Pixeln. Was verdächtig simpel klingt, stimmt tatsächlich. Der Mini-Monitor verwendet wie alle anderen einen rechteckigen Speicher für die Daten, zeigt aber nur den runden Bereich an.
Wenn Sie eine Koordinate außerhalb des Sichtfelds beschreiben, erscheint sie dementsprechend nicht im Monitor. Also arbeiten Sie wie gewohnt in einem kartesischen Koordinatensystem und müssen lediglich darauf achten, die Ausgaben ausschließlich im sichtbaren Bereich des Displays zu machen.
Development Kit
Das für diesen Artikel genutzte Development Kit ESP32-C3-LCDkit gibt es bei Amazon [2] für knapp 30 Euro. Zum Redaktionsschluss war der Artikel dort nicht lieferbar, alternativ bekommen Sie das Kit bei Mouser [3]. Sein Kern besteht aus einem an unterschiedliche Peripheriekomponenten angeschlossenen ESP32-C3-Controller, darunter befindet sich das runde Display. Darüber hinaus hängt es an einem Drehimpulsgeber, einem Infrarot-Sender- und Empfänger, einer WS2812 LED und einem Lautsprecher.
Einen Überblick darüber, was genau wo angeschlossen ist, gibt Ihnen die Tabelle Tabelle “Pin-Belegung des ESP32-C3”. Sie benötigen derlei Informationen später außerdem zum Schreiben der ersten Testprogramme. Die Verarbeitung (Abbildung 1) der Platine und den einzelnen Komponenten lässt sich nicht bemängeln. Die komplette und sehr ausführliche Dokumentation zu dem Kit erhalten Sie auf der Seite des Herstellers [4].
|
Pin-Nummer |
MicroPython-Funktion |
|---|---|
|
0 |
LCD_SDA |
|
1 |
LCD_SCL |
|
2 |
LCD_D/C |
|
3 |
AUDIO_PA |
|
4 |
IR_RX/IR_TX |
|
5 |
LCD_BL_CTRL |
|
6 |
ENCODER_A |
|
7 |
LCD_CS |
|
8 |
RGB_LED |
|
9 |
ENCODER_SW |
|
10 |
ENCODER_A |
|
18 |
USB_DN |
|
19 |
USB_DP |
Setup
Um das Display anzusteuern, nutzen Sie MicroPython als Programmiersprache. Damit die Datenübertragung zum Display halbwegs schnell geht, gibt es auf Github [5] eine angepasste, bereits mit entsprechenden Treibern ausgestattete Variante. Laden Sie von dort aus dem Verzeichnis firmware/ ESP32_GENERIC_C3 die Datei Firmware_4MiB.bin herunter.
Unter den vielen Möglichkeiten, mit MicroPython zu arbeiten, favorisiere ich als Entwicklungsumgebung Thonny [6]. Die IDE bringt alles mit, was Sie zum Programmieren benötigen. Nach dem Start von Thonny navigieren Sie zu Werkzeuge | Optionen | Interpreter | MicroPython installieren oder aktualisieren. Im folgenden Dialog wählen Sie im Hamburgermenü (drei horizontale Striche) das heruntergeladene Installationsimage mit Select local Micropyton Image (Abbildung 2) aus. Daraufhin schreiben Sie das Firmware-Image in das ESP32-C3-LCDkit. Nach der erfolgreichen Installation meldet sich MicroPython wie gewohnt in der Konsole (Abbildung 3) von Thonny.
Erstes Beispiel
Um zu testen, ob alles prinzipiell funktioniert, bedienen Sie sich eines alten Bekannten: des Beispielprogramms Blink. Im Fall des ESP32-C3-LCDkit sieht es allerdings etwas ungewöhnlich aus. Das Board verfügt zwar nicht über eine einzelne LED, die Sie blinken lassen könnten, dafür aber über eine WS2812 RGB LED. Sie ist an Pin 8 (RGB_LED) angeschlossen (siehe Tabelle “Pin-Belegung des ESP32-C3”).
Das Programm aus Listing 1 lässt die LED im Sekundentakt blinken. Die Bibliothek neopixel zeichnet dafür zuständig. Sobald Sie sichergestellt haben, dass alles korrekt funktioniert, geht es daran, ein komplexeres Programm zu entwickeln.
Listing 1
Blink-Beispiel
import neopixel import machine import time neo = neopixel.NeoPixel(machine.Pin(8), 1) while(True): neo[0] = (255, 0, 0) time.sleep(1) neo.write() neo[0] = (0, 0, 0) time.sleep(1) neo.write()
Wetterdaten
Das umfassendere Programm soll die Temperatur und die Luftfeuchtigkeit des aktuellen Standorts ausgeben. Da das Kit keinen passenden Sensor mitbringt, beziehen Sie die Daten über die API des freien Projekts Open-Meteo [7]. Dafür benötigen Sie auf Ihrem MicroPython-Gerät die zusätzliche Bibliothek http_client. Holen Sie die Bibliothek per Copy & Paste in das System, oder verwenden Sie die ein wenig elegantere Lösung: das Tool Mpremote [8]. Falls Sie sich für die zweite Variante entscheiden, installiert der Aufruf aus Listing 2 die Bibliothek. Achten Sie bei der Arbeit mit Mpremote darauf, zuvor Thonny vom Controller zu trennen.









