MorrisJobke

Word Clock - Software 20 Mar 2020

Dies ist die Fortsetzung der Anleitung für die Word Clock. Den Hardwareteil habe ich hier beschrieben.

In diesem Beitrag möchte ich auf die Software-Komponente eingehen. Der komplette Quellcode lässt sich auf Github finden und ist unter MIT lizensiert.

Features

Ich habe einige Features im Kopf, die ich gerne in der Uhr umgesetzt haben möchte und deshalb hier beschreibe.

Open Source sei Dank

Da es eine große Open Source Community rund um den Mikrocontroller gibt, wollte ich so wenig wie möglich selbst bauen und auf bestehende Komponenten zurückgreifen. Folgende Bibliotheken und Werkzeuge habe ich genutzt:

IDE

Arduino IDE - dies ist die Entwicklungsumgebung, in der programmiert wird und anschließend das Programm auf den Mikrocontroller übertragen wird. Einsteigerfreundlich und recht einfach gehalten. Wer mehr möchte, sei auf PlatformIO verwiesen. Sämtliche unten genannten Bibliotheken habe ich über die Arduino IDE installiert und aktualisiert. Dazu auf “Werkzeuge” > “Bibliotheken verwalten” gehen, nach der Bibliothek suchen und auf “Installieren” klicken. Schon kann diese genutzt werden.

Unterstützung für den ESP8266 nachrüsten

Von Haus aus kann die Arduino IDE nicht mit dem ESP8266 umgehen. Dazu müssen Informationen zum Mikrocontroller nachgeladen werden. Dies erledigt man, indem man unter “Einstellungen” > “Zusätzliche Boardverwalter-URL” http://arduino.esp8266.com/stable/package_esp8266com_index.json einträgt. Nun kann man unter “Werkzeuge” > “Board” > “Boardverwalter” nach “NodeMCU” suchen. Hier muss man nun das gefundene Paket “esp8266” installieren. Ist dies geschehen, kann man unter “Werkzeuge” > “Board” > “NodeMCU 1.0” auswählen und die Arduino IDE ist bereit das Programm an den Mikrocontroller zu übertragen. Der Bequemlichkeit halber würde ich noch empfehlen den “Upload Speed” unter “Werkzeuge” höher zu setzen, um bei der Übertragung nicht zu lange warten zu müssen. 921.600 hat bei mir super funktioniert.

Bibliotheken

Für die einzelnen Funktionen habe ich auf einige Bibliotheken zurück gegriffen, die ich einmal kurz vorstellen möchte.

Fallstricke

Es gibt noch zwei Fallstricke, die es zu beachten gibt. Einerseits bin ich anfangs über folgenden Fehler in FastLED gestolpert:

error: 'boolean' has a previous declaration as 'typedef bool boolean'
 typedef bool boolean;
              ^

Diesen habe ich behoben, indem in die FastLED Bibliothek entsprechend angepasst habe. Die heruntergeladenen Bibliotheken finden sich normalerweise im “Dokumente/Arduino/libraries” Ordner des aktuellen Nutzers. Dort musste ich die Zeile 15 in FastLED/platforms/esp/8266/led_sysdefs_esp8266.h auskommentieren. Diese Zeile enthält typedef uint8_t boolean;. Danach war der Fehler gelöst. Das ganze habe ich hier gefunden.

Ein zweiter Fallstrick ist, dass “EspMQTTClient” standardmäßig nur Nachrichten bis zu einer Länge von 128 Bytes empfängt. Die Nachrichten von der AWTRIX sind jedoch meistens um die 200 Bytes lang. Um das zu lösen muss der Wert von 128 auf 250 gesetzt werden. Man findet das unter PubSubClient/src/PubSubClient.h als MQTT_MAX_PACKET_SIZE. Sobald der Wert geändert ist, kommen Nachrichten bis zu einer Länge von 250 Bytes an.

Aktuelle Limitierungen

Aktuell gibt es noch 2 Limitierungen des Programms. Die Sommerzeitumstellung ist noch nicht implementiert. Das heißt, man muss die Uhr via API umstellen. Die zweite ist, dass der AWTRIX Teil noch fest eingebaut ist. Man kann diesen aus dem Quellcode löschen, indem man nach // TODO only include if AWTRIX is enabled sucht und die folgenden Zeilen löscht.

Konfiguration

Um Einstellungen vorzunehmen, gibt es eine Datei, die persönliche Einstellungen enthält und damit die Uhr an die eigenen Bedürfnisse anpasst. Hierzu einfach die Datei config.h.dist nach config.h kopieren und die entsprechenden Werte ändern. Dies sind unter anderen WLAN-Name und Passwort oder die IP des MQTT-Servers. Ebenso können die MQTT-Topic-Namen geändert werden.

API

Die Uhr hat eine auf MQTT basierende API. Das heißt, sie verbindet sich zu einem konfigurierten MQTT-Server und lauscht dort auf gewissen Kanälen (Topics). Vom eigenen Rechner aus, kann man sich ebenfalls mit diesem Server verbinden und dann mit der Uhr interagieren. Dazu nach MQTT Client suchen - ich nutze unter macOS MQTT Box, der auf allen Platformen läuft. Aber es gibt auch andere Clients. Der MQTT-Server selbst läuft bei mir hier auf einem Server zuhause - das ist die Software mosqitto, aber es gibt viele verschiedene MQTT-Server, die alle das gleiche Protokoll sprechen.

Die genauen Namen der MQTT-Topics können über die Variablen in config.h angegeben werden.

Farbschema

Uhrmodus und Alle LEDs aktivieren

Helligkeit

Zeitverschiebung

Das wäre es dann. Viel Spaß beim Ausprobieren und lasst mich wissen, falls ihr Fragen habt. :)