Im heutigen Blog wollen wir das AZ-Touch Modul so programmieren, dass es als Adventskalender mit täglichen Sprüchen oder Witzen ihre vorWeihnachtliche Zeit abwechslungsreicher macht.
Der Inhalt hinter jedem “Türchen” ist in diesem Fall keine Schokolade, sondern kann von Ihnen ganz nach Belieben individualisiert werden, um einen persönlichen Adventskalender zu erhalten.
Hardware
Sie benötigen lediglich:
ein AZ-Touch Set (2.8” empfohlen)
und ein ESP32 DevKit C
Damit Sie das Projekt erfolgreich umsetzen können, müssen Sie jetzt nur noch das AZ-Touch, wie in der Anleitung beschrieben, zusammenbauen und das Mikrocontroller Board in die Buchsenleisten stecken.
Software
Der Adventskalender soll zuerst die Türchen Nummer und nach dem Berühren des Bildschirms den hinterlegten Text anzeigen.
Da der ESP32 Wroom 32 über 4MB Flash Speicher verfügt, können die 24 Texte direkt im Programm hinterlegt werden.
Treiber
Falls Sie das erste Mal einen ESP32 in der Arduino IDE programmieren, kopieren Sie folgenden Link in der Arduino IDE unter:
File->Preferences->Additional boards manager URLs : https://dl.espressif.com/dl/package_esp32_index.json
und installieren Sie in der Boardverwaltung das ESP32 Paket.
Der Treiber(CP2102) für dieses Board ist bereits vom Betriebssystem installiert.
Libraries
Als nächstes müssen noch die benötigten Bibliotheken installiert werden:
TFTeSPI wird für die Ansteuerung des Displays benötigt.
NTPClient liefert das Datum immer aktuell über einen ntp-Server.
Die Libraries können über die oben gegebenen Links als .zip heruntergeladen und in der Arduino IDE unter Sketch>Include Library>Add .ZIP Library… hinzugefügt werden. Alternativ kann das auch ganz einfach über den in der Arduino IDE integrierten Library Manager erledigt werden.
Code
Als nächstes folgt schrittweise die Programmierung des Mikrocontrollers.
Für den Beginn benötigen wir ein Programm, welches die Nummer des aktuellen Türchens mittig auf dem Display anzeigt.
Damit die Library überhaupt erst mit dem Display kommunizieren kann, ist eine Konfiguration in der Library notwendig.
Die TFTeSPI Bibliothek hat die Besonderheit, dass die gesamte Konfiguration in einer Datei durchgeführt wird. Diese UserSetup.h Datei muss für das AZ-Touch Set folgende Konfiguration aufweisen:
|
#define USER_SETUP_INFO "User_Setup" |
Damit Sie den Inhalt nicht komplett kopieren müssen, können Sie die Datei auch hier herunterladen.
Nun zur eigentlichen Methode, welche die Zahl mittig auf dem Display darstellen soll:
(In den folgenden Beispiel-Ausschnitten fehlen die Library Einbindung und die Objekterstellung über den Konstruktor. Diese wurden für die verbesserte Übersichtlichkeit weggelassen. Verwenden Sie zum Testen das finale Programm!)
|
void showNumber(int number) { |
Erklärung:
Zu Beginn wird die dem Programm übergebene Nummer in eine Zeichenkette (String) umgewandelt (casting).
Im Anschluss wird das Display noch durch das Setzen der Pixel auf Schwarz, der Schriftfarbe auf Rot und des Fonts auf 8 vorbereitet.
Dann werden die Koordinaten berechnet. Die X-Koordinate setzt sich aus der Differenz der halben Displaybreite und der halben Textbreite zusammen. Die y-Position wird durch die Differenz der halben Bildschirmhöhe und halben Schriftart Höhe beschrieben.
Zum Schluss wird die Zahl an der berechneten Position über den println() Befehl angezeigt.
Jetzt kann schon die Türchen Nummer groß auf dem Display angezeigt werden. Als nächstes wollen wir das Datum über das Programm ermitteln, um immer das aktuelle Türchen anzuzeigen.
Eine weit verbreitete Möglichkeit bietet hier ein RTC-Modul. Diese müssen aber manuell über die Software eingestellt werden und können nach einiger Zeit Ungenauigkeiten aufweisen.
Da wir im Projekt einen ESP32 verwenden, kann ganz einfach die WLAN Funktion genutzt werden, um die aktuelle Uhrzeit und das Datum über einen so genannten NTP-Server abzufragen. Diese Network Time Protocol-Server basieren auf Echtzeituhren, wie zum Beispiel Atomuhren.
Für die vereinfachte Abfrage kann die NTPClient Library verwendet werden.
|
int day, mon; |
Erklärung:
Zuerst wird die Zeit vom Server aktualisiert. Im Anschluss das time Objekt ausgelesen und in ein Struct umgewandelt.
Aus diesem Struct werden dann der Tag und Monat ausgelesen und in den entsprechenden globalen Variablen gespeichert.
Nun folgen die setup() Funktion und die loop() Routine:
|
void setup() { |
Erklärung:
Im setup() erfolgt die Initialisierung der seriellen Schnittstelle, des Displays, des WLAN und des timeClients (NTP).
In der loop() Routine wird erst das Datum abgefragt und anhand einer Fallunterscheidung entweder ein Countdown bis zur Adventszeit angezeigt, oder falls der Monat dem Dezember entspricht und der Tag zwischen 1 und 24 liegt, die entsprechende Türchen Nummer über die showNumber() Funktion.
Der Touchscreen verfügt über einen Interrupt Pin, welcher beim Drücken auf LOW wechselt. Somit kann das Berühren des Bildschirms ohne zusätzliche Software ganz einfach mit einer digitalRead() abfrage geprüft werden.
Nach dem Berühren wird der Inhalt auf dem Display mit dem Text aus einem Array mit String-Elementen gefüllt. Hier wurde, damit auch längere Texte angezeigt werden können, der Startpunkt auf 0:0, also der linken oberen Ecke gesetzt. Der Zeilenumbruch wird dann automatisch in der nächsten Zeile fortgesetzt.
Das gesamte Projekt können Sie hier herunterladen.
Um es auf den Mikrocontroller zu laden, wählen Sie in der Arduino IDE unter:
Tools > Board > esp32 > ESP32 Dev Module
und im Anschluss den richtigen seriellen Port.
Falls mehrere Ports erscheinen, stecken Sie den Mikrocontroller ab und wieder an, der neu erscheinende Port ist der des Mikrocontrollers.
Für Fortgeschrittene:
Schaffen Sie es, dass der im AZ-Touch vormontierte Signalgeber weihnachtliche Musik während dem Warten auf eine Display-Berührung abspielt?
TIPP: Nutzen Sie die Tone Befehle an Pin 21. [tone(21, 1000, 100);]
Für komplexe Melodien bietet die TinyRTTTL Bibliothek eine einfache Lösung.
Fazit:
In diesem Projekt haben Sie aus einem AZ-Touch Modul einen Adventskalender gebaut, welcher Ihnen jeden Tag Weihnachtliche Sprüche, Witze oder personalisierten Text anzeigen kann.
Jetzt heißt es: Inhalt für jeden Tag sammeln!
Natürlich bleibt für Sie hier weiterer Spielraum an kreativen Software-Änderungen, wodurch der Adventskalender dann noch persönlicher wird! :)
Viel Spaß beim Nachbauen :)






