Projekt: Matrixuhr-Mini

Matrixuhr-Mini-Bild Diese kleine Uhr verwendet ein einfarbiges Matrix-Display, welches aus insgesamt 256 LEDs besteht. Diese sind im Format 32x8 angeordnet und das bietet die Möglichkeit, neben der Uhrzeit auch Textinformationen und Symbole anzuzeigen. Optional lässt sich ein weiteres Matrix-Display anschließen, so dass gleichzeitig die Uhrzeit und weitere Informationen dargestellt werden können. Die Uhr wird von einem ESP8266 (D1 mini) gesteuert, welcher über WLAN mit dem Heimnetz verbunden wird. Über diese Verbindung wird die Uhr per NTP synchronisiert und das ermöglicht die Anzeige von Datum, Wochentag und Geburtstagen. Außerdem kann die Uhr Informationen von einem MQTT-Server beziehen und Wetterdaten, Kraftstoffpreise und Sensordaten, z.B. vom Temperatur-Messsystem oder von einer Hausautomatisierung anzeigen. Die Funktionalität ist ähnlich wie die der großen Matrixuhren (Matrixuhr bzw. Matrixuhr-ESP32), allerdings wurde hier auf Alarme, Sound und Bedienelemente verzichtet und Informationen werden generell als Laufschrift ausgegeben. Alle Einstellungen erfolgen über einen integrierten Web-Server, der auch ein bequemes Firmware-Update über WLAN anbietet.

Symbol Status
Statusaktiv
Letzte Bearbeitung07.04.2025
Aktueller Softwarestandv1.00 vom 28.03.2025
SymbolDownloads
Schaltplan
Stückliste mit Empfehlungen zur Bauteilbestellung
Software v1.00 für ESP8266 (D1 mini) als kompletter Quelltext in C vom 28.03.2025matrixmini-software-v100.zip
Fertig kompilierte Firmware v1.00 für ESP8266 (D1 mini) vom 28.03.2025matrixmini-firmware-v100.zip
Platinen-Layout (Sprint Layout) vom 04.04.2025 von Dietmar Heyermatrixmini-layout.zip
Flash Download Tool für ESP8266 und ESP32 (wird für die Inbetriebnahme benötigt) https://www.espressif.com/en/support/download/other-tools
Homepage von Termite (serielles Terminalprogramm) https://www.compuphase.com/software_termite.htm
Homepage von MQTT Explorer (hilfreich bei Problemen mit der MQTT-Kommunikation)https://mqtt-explorer.com/
Symbol Inhaltsverzeichnis
BeschreibungAllgemeine Informationen über die Matrixuhr-Mini
SchaltungBeschreibung der Schaltung
HardwareBilder und Hinweise zum Aufbau der Uhr
SoftwareBeschreibung der Software der Uhr
InbetriebnahmeInbetriebnahme der Uhr
BedienungBedienungsanleitung und komplette Beschreibung aller Funktionen
Weitere InformationenInformationen zu Sonderzeichen und Symbolen
SonstigesEinige Hintergrundinformationen zur Entwicklung der Uhr
Symbol Beschreibung

Die Matrixuhr-Mini ist eine sehr genaue Uhr, die zyklisch über NTP von einem Zeitserver im Internet (oder vom Router im Heimnetz) synchronisiert wird. Diese Zeit wird auf einem kleinen Matrix-Display angezeigt, welches allerdings nicht genug Platz für weitere Informationen bietet. Aus diesem Grund erfolgt die Zeitanzeige im Wechsel mit anderen Informationen. Das können je nach Konfiguration das Datum, der Wochentag, Geburtstage oder weitere Daten sein, die dann als Laufschrift ausgegeben werden. Das Intervall für die Laufschrift kann in Stufen zwischen 15 Sekunden und 2 Minuten konfiguriert werden. Nach einem Durchlauf aller Informationen erscheint die Uhrzeit wieder bis zum nächsten Intervall. Alternativ kann man die Uhr mit 2 Matrix-Displays aufbauen, dann dient ein Display zur ständigen Zeitanzeige und das andere zur Anzeige aller anderen Informationen. Bei dieser Konfiguration lässt sich das Laufschrift-Intervall abschalten, so dass die Laufschrift ständig ausgegeben wird.

Die Uhr kann über einen MQTT-Server im Heimnetz (z.B. dem Web-Modul) weitere Informationen empfangen und anzeigen. Das können Werte von Sensoren im Haus sein, aber auch Wetterdaten oder Kraftstoffpreise von bestimmten Tankstellen. Weiterhin gibt es die Möglichkeit, eine Liste mit Namen und Geburtstagen zu verwalten. Alle Funktionen werden von einem ESP8266-Mikrocontroller-Board gesteuert, wobei ich hier ein Wemos D1 mini verwendet habe. Der ESP8266 ist zwar schon etwas angestaubt, aber sehr gut für dieses Projekt geeignet und sehr preisgünstig zu bekommen. Gleiches gilt für das Display, welches aus kompakten 8x8-LED-Elementen besteht, die von jeweils einem Treiber-Chip MAX7219 angesteuert werden. Diese MAX7219 lassen sich relativ einfach über eine SPI-Schnittstelle steuern und können kaskadiert werden. Matrix-Displays mit 4 kaskadierten Treibern und 4 LED-Elementen gibt es in verschiedenen Farben recht günstig zu kaufen und diese eignen sich sehr gut für diese Uhr.

Ganz perfekt sind diese Display-Module allerdings nicht. So bieten die MAX7219 zwar die Möglichkeit, die Helligkeit der LEDs zu steuern, allerdings stehen nur 16 recht ungleiche Stufen zur Verfügung. Weiterhin gibt es verschiedene Varianten und man sollte beim Kauf darauf achten, dass die LED-Elemente aufgesteckt und nicht fest eingelötet sind. Unter Umständen müssen nämlich die LEDs entfernt werden, um an einen Widerstand heranzukommen. Über diesen Widerstand wird der Treiberstrom des MAX7219 festgelegt und insbesondere bei roten Displays muss dieser Widerstand ersetzt werden, um die Helligkeit zu reduzieren.

Symbol Schaltung

Schaltung

Die Schaltung der Matrixuhr-Mini ist sehr übersichtlich und benötigt nur wenige Bauelemente. Das zentrale Element ist das Mikrocontroller-Board, welches sich auf einer steckbaren Platine mit 16 Anschlüssen befindet (ESP8266 D1 mini). Auf dieser Platine befindet sich der Mikrocontroller ESP8266 von Espressif, welcher mit einer Taktfrequenz von 80 MHz arbeitet. Außerdem sind noch 4 MB Flashspeicher und 80 kB RAM integriert und für die Kommunikation über WLAN gibt es noch eine Antenne am Platinenrand. Auf dem restlichen Teil des Boards befindet sich eine Micro-USB-Buchse, ein CH340 zur seriellen USB-Kommunikation, ein 3,3V-Spannungsregler und ein Reset-Taster.

Eine wichtige Aufgabe des Mikrocontrollers ist die Ansteuerung der Matrix-Displays. Dazu dienen hauptsächlich die Anschlüsse D5 (SPI-SCLK) und D7 (SPI-MOSI), die eine SPI-Schnittstelle zur Verfügung stellen. Diese Schnittstelle ist mit beiden Display-Modulen verbunden, somit gelangen alle Daten immer an beide Displays. Damit immer das richtige Matrix-Display angesprochen wird, wird vor der Übertragung einer der beiden zusätzlichen Anschlüsse D8 oder D0 aktiv. Diese führen jeweils an den Anschluss CS (Chip Select) eines Displays und aktivieren dessen SPI-Schnittstelle. Im Gegensatz zu den Matrix-Displays der großen Matrixuhren können die MAX7219 die übertragenen Informationen speichern, so dass man die Displays grundsätzlich nur bei Änderungen auffrischen muss.

Über die Bauelemente T1, R1, R2 und C2 wird die Helligkeit erfasst und in eine Gleichspannung zwischen 0 und ca. 3,3V umgesetzt. Diese gelangt über den Anschluss A0 an einen internen Analog-Digital-Konverter des ESP8266. Der Mikrocontroller liest zyklisch den digitalisierten Wert, bildet daraus einen Mittelwert und letztendlich die Helligkeitsstufe 0-15 für die Matrix-Displays. Über das Trimmpotentiometer R2 kann die Empfindlichkeit der Helligkeitsregelung eingestellt werden.

Display-Platine Die hier verwendeten Matrix-Displays gibt es in verschiedenen Farben und Varianten. Das Display in meiner Uhr verwendet grün-gelbe LED-Elemente, die eine recht ausgewogene Helligkeit haben. Ich habe aber auch rote Displays beim Testaufbau verwendet und diese sind unerträglich hell. Sofern das Display nicht im Outdoor-Bereich eingesetzt werden soll, muss man in solchen Fällen insgesamt 4 Widerstände tauschen (jeweils einen bei jedem MAX7219). Das geht wiederum nur, wenn das LED-Element steckbar ist.

Dieses Bild zeigt ein rotes Display-Modul, bei dem die beiden rechten LED-Elemente entfernt wurden. Die betroffenen Widerstände sind mit R1-R4 bezeichnet (hier ist R3 zu sehen), andere Varianten bezeichnen alle 4 Widerstände mit R1. Unabhängig von der Bezeichnung beträgt der Wert normalerweise 10 kΩ und ist als SMD-Widerstand in der Größe 0805 realisiert. Auf dem Bild habe ich diesen Widerstand entfernt und dafür einen 56 kΩ in der Größe 1206 eingelötet. Dieser war gerade vorhanden und passt gerade noch auf die Lötpads.

Bei diesem roten Display-Modul sind 47 kΩ eine gute Wahl, bei anderen LED-Farben muss man den richtigen Wert durch Ausprobieren ermitteln. Dabei sollte man die resultierende Helligkeit bei Tag und bei Dunkelheit testen.

Zur Stromversorgung der Uhr kann ein klassisches 5V-Schaltnetzteil mit Mikro-USB-Anschluss verwendet werden. Alternativ kann man ein USB-Ladegerät mit USB-A-Anschluss und ein passendes Kabel mit Mikro-USB-Anschluss verwenden. Wird die Uhr mit nur einem Matrix-Display betrieben, dann sollte das Netzteil 1A liefern können. Bei 2 Matrix-Displays empfehle ich ein stärkeres Netzteil, welches mindestens 1,5A liefern kann.

Diese Stückliste enthält alle Bauelemente für die Matrixuhr-Mini inklusive einer kleinen Auswahl an SMD-Widerständen für das Display-Modul.

Symbol Hardware

Platine oben Für dieses Projekt wurde eine kleine Lochrasterplatine mit einer Größe von ca. 55 mm x 30 mm verwendet. Den größten Teil nimmt hier das Mikrocontroller-Board ein und es ist so angeordnet, dass sich keine Bauelemente oder Platinenteile in der Nähe der WLAN-Antenne befinden. Ich habe das Mikrocontroller-Board direkt aufgelötet, aber man darf gern die Steckverbinder verwenden, die beim D1 mini mitgeliefert werden.

Die Anschlüsse für das Matrix-Display sind direkt neben den entsprechenden Anschlüssen D5, D7, D8 sowie G und 5V des Mikrocontroller-Boards angeordnet. Hier können später die Anschlusskabel, die dem Matrix-Display beiliegen, aufgesteckt werden. Die beiden Stifte auf der rechten Seite sind für den Anschluss des Fototransistors T1 vorgesehen. Wie man hier erkennen kann, habe ich mich bei R2 nicht an den Schaltplan gehalten. Ich empfehle dennoch einen Wert von 100 kΩ für einen größeren Einstellbereich.

Platine unten Die Platinenunterseite bietet keine Besonderheiten. Es sind nur wenige Verbindungen notwendig, die hier mit 0,5 mm dickem Draht sowie mit Kupferlackdraht (0,3 mm) hergestellt wurden.

Gehäuse 1 Dieses Bild zeigt das Gehäuse der Uhr, welches aus weißen Polystyrol-Material mit einer Dicke von 3 mm aufgebaut wurde. Die Front besteht aus transparentem Plexiglas in der Farbe hellgrün, ebenfalls 3 mm dick. Die Farbe wurde absichtlich so gewählt, da ein grünes Matrix-Display zum Einsatz kommt. Der Holzklotz in der Mitte hält später das Display, welches von oben eingeschoben wird. Die 4 am Gehäuseboden angeklebten Schrauben sind für die Controllerplatine vorgesehen. Über den rechteckigen Ausschnitt an der Rückseite ist der USB-Anschluss zugänglich und über die Bohrung daneben lässt sich das Einstellpotentiometer von außen bedienen.

In dem schmalen Plastikstreifen auf der rechten Seite befindet sich der Fototransistor T1. Hier wurden bereits Kabel und eine 2-polige Pfostenbuchse für die Verbindung zur Controllerplatine angelötet. An den beiden Seitenwänden sind noch 2 kleine Würfel zu sehen. Dies sind Neodym-Magnete mit einer Kantenlänge von 5 mm, die später den ebenfalls mit solchen Magneten ausgestatteten Deckel halten.

Gehäuse 2 Auf diesem Bild wurde das Matrix-Display ins Gehäuse eingebaut. Dieses Display wurde mit fest eingelöteten LED-Elementen ausgeliefert. Das hat den großen Nachteil, dass die Widerstände für die LED-Strom-Einstellung nicht zugänglich sind. Glücklicherweise sind die grünen LEDs nicht so hell, so dass man damit leben kann. Vor dem Einbau des Displays habe ich die 5 seitlichen Anschlüsse vorsichtig nach hinten gebogen, damit alles gut ins Gehäuse passt.

Gehäuse 3 Hier sind jetzt alle Komponenten eingebaut, festgeschraubt und verkabelt. Jetzt fehlt nur noch das Gehäuseoberteil, welches einfach oben aufgelegt und durch die starken Magnete auf beiden Seiten festgehalten wird. Somit sind keine Schrauben sichtbar und es ist kein Werkzeug zum Öffnen des Gehäuses notwendig.

Gehäuse 4 Und so sieht dann die Matrixuhr-Mini im Betrieb aus.

Symbol Software

Dieses Kapitel beschreibt die Software der Matrixuhr-Mini. Das ist sehr trocken und wer sich nicht für die Details interessiert, darf das Kapitel gern überspringen. Für den Nachbau und den Betrieb der Uhr sind die folgenden Informationen nicht notwendig.

Zur Erstellung der Software für den ESP8266 habe ich die Arduino-Plattform und die dort übliche Sprache C++ verwendet. Bei der Entwicklungsumgebung fiel die Wahl auf Visual Studio Code von Microsoft in Verbindung mit PlatformIO. Es ist ebenso möglich, die Arduino-Entwicklungsumgebung zu verwenden, diese ist allerdings nicht so komfortabel. Die Datei matrixmini-software-v100.zip enthält den Quelltext in 2 Versionen: eine für PlatformIO und eine für die Arduino-IDE. Die Programmdateien sind in beiden Versionen identisch und haben folgende Funktion:

main.cpp / matrixuhr-mini.inoenthält die Hauptfunktionen mit Initialisierung und Hauptprogrammschleife
http.henthält die HTML-Seitenstruktur für den Web-Server und eine Funktion für dynamische Inhalte
process.henthält Funktionen für die Verarbeitung von Sensordaten, Geburtstagen und Nachrichten
functions.henthält zahlreiche Funktionen, die vom Hauptprogramm und anderen Komponenten benötigt werden
tables.henthält Zeichensätze, verschiedene Symbole, diverse Tabellen und Listen
platformio.inienthält Projekt-Einstellungen und eine Liste der benötigten Bibliotheken (nur bei der PlatformIO-Version notwendig)

main.cpp bzw. matrixuhr-mini.ino: Das Hauptprogramm der Matrixuhr-Mini beginnt mit einer Liste von Definitionen. Hier werden die benötigten GPIO-Anschlüsse festgelegt und einige wichtige Konstanten definiert. Anschließend folgt eine Liste mit den benötigten Bibliotheken, welche zum Teil von der ESP8266-Entwicklungsumgebung mitgeliefert werden. Einige müssen jedoch von externen Quellen installiert werden. Bei der Verwendung von PlatformIO erfolgt diese Installation automatisch über die Datei platformio.ini, bei Verwendung der Arduino-IDE muss man diese Bibliotheken manuell installieren. Die nachfolgende Tabelle listet alle externen Bibliotheken und deren Bezugsquelle auf, die für die Matrixuhr-Mini notwendig sind:

ESPAsyncTCPhttps://github.com/me-no-dev/ESPAsyncTCP
ESPAsyncWebServerhttps://github.com/ESP32Async/ESPAsyncWebServer
espMqttClienthttps://github.com/bertmelis/espMqttClient
ArduinoJsonhttps://github.com/bblanchon/ArduinoJson

Nach dem Einbinden der Bibliotheken werden eine Reihe Dateinamen festgelegt. Der ESP8266 bietet die Möglichkeit, ein Dateisystem im Flashspeicher anzulegen. Hier können Dateien gespeichert und auch wieder ausgelesen werden. Dieses Dateisystem bleibt auch bei einem Update der Controller-Software erhalten und bietet sich deshalb zur Speicherung der Konfiguration an. Um die Arbeit mit den Konfigurationsdateien etwas zu vereinfachen, habe ich die Informationen auf mehrere Dateien aufgeteilt. Im nächsten Abschnitt folgt eine lange Liste mit den Definitionen alle Variablen, die in der Matrixuhr-Mini verwendet werden. Schließlich werden noch weitere Programmteile eingebunden, die wegen der besseren Übersicht in separaten Dateien untergebracht wurden. Jetzt beginnt das eigentliche Programm, welches aus 2 Teilen besteht:

setup(): Dieser Programmteil wird nur einmal beim Systemstart ausgeführt und beginnt mit der Initialisierung der seriellen Schnittstelle, der GPIO-Anschlüsse, der SPI-Schnittstelle und der Matrix-Displays. Die serielle Schnittstelle ist über einen CH340-Chip mit dem USB-Anschluss des ESP8266-Boards verbunden. Hier werden beim Systemstart und auch im laufenden Betrieb der Uhr einige Statusinformationen ausgegeben, die in der Entwicklungsumgebung oder mit einem Terminalprogramm angezeigt werden können. Außerdem dient diese Schnittstelle zur Herstellung der WLAN-Kommunikation bei der Inbetriebnahme. Im nächsten Schritt erfolgt die Prüfung des Dateisystems. Wird kein Dateisystem gefunden, dann wird von einem fabrikneuen ESP8266 ausgegangen und ein neues Dateisystem angelegt. Ich habe mich hier für das Dateisystem LittleFS entschieden, da dieses wohl langfristig das weit verbreitete SPIFFS ablösen wird.

Ist das Dateisystem in Ordnung, werden nacheinander alle Konfigurationsdateien gelesen und die dazugehörigen Variablen gesetzt. Fehlen Dateien oder sind Dateien unvollständig, dann werden die Variablen mit Voreinstellungen belegt. Damit ist in den meisten Fällen ein sauberer Systemstart möglich. Mit den geladenen Einstellungen kann nun die grundsätzliche WLAN-Funktion aktiviert werden. Ein weiterer Programmteil stellt die Uhr auf ein aktuelles Datum und setzt einige Zähler-Variablen auf sinnvolle Werte. Der letzte Block ist zugleich auch der größte: Hier werden alle Funktionen definiert, die mit dem Web-Server zusammenhängen. Dazu sind für jede Web-Seite mindestens 2 Definitionen notwendig: eine für den Aufruf der Seite (HTTP GET) und eine für Aktionen, wenn ein Button auf der Seite angeklickt wird (HTTP POST). Letztere ist teilweise mehrfach vorhanden und etwas aufwändiger, da alle Informationen der Web-Seite ausgelesen und verarbeitet werden müssen.

loop(): Dieser Programmteil läuft in einer endlosen Schleife und erledigt alle zyklischen Aufgaben der Matrixuhr. Zunächst werden die Zeitinformationen für die spätere Ausgabe auf dem Matrix-Display aufbereitet und einige Zeitzähler geprüft. Letztere steuern einige Vorgänge, die nur zu bestimmten Zeiten ausgeführt werden sollen. So wird z.B. der Helligkeitssensor nur alle 40 ms aufgerufen. Für andere Vorgänge wie z.B. die Steuerung der WLAN- und MQTT-Verbindung oder die Überwachung der Zeitsynchronisierung gilt ein Zeitintervall von 1 Sekunde.

Der nachfolgende Block ist für die Ausgabe der Uhrzeit auf dem Matrix-Display zuständig. Falls gerade ein Firmware-Update läuft, dann wird stattdessen ein entsprechender Text ausgegeben. Der nächste Teil prüft das eingestellte Anzeigeintervall und startet gegebenenfalls eine neue Laufschrift-Ausgabe. Hier schließt sich direkt die Laufschrift-Ausgabe an. Viele Funktionen der Ausgabe wurden in die Datei functions.h ausgelagert, damit das Hauptprogramm halbwegs übersichtlich bleibt. Es folgen weitere Abfragen, die prüfen, ob neue Wetterdaten, Kraftstoffdaten oder eine neue Nachricht bereitstehen und startet deren Verarbeitung.

Der nächste Abschnitt prüft einige Timeout-Zähler und Statuswerte und steuert damit den Verbindungsaufbau von WLAN und MQTT, insbesondere im Falle einer Unterbrechung. Den Abschluss bildet ein Programmteil, der die serielle Schnittstelle am USB-Anschluss bedient und die Eingabe von neuen WLAN-Zugangsdaten steuert.

http.h: In dieser Datei sind alle Programmteile und Informationen zusammengefasst, die mit dem Web-Server der Matrixuhr zusammenhängen. Das betrifft die komplette Web-Seiten-Struktur: HTML-Header, Seitenmenü, Hauptseite, alle Unterseiten sowie einige spezielle Elemente. Ein weiterer großer Block ist eine spezielle Funktion mit dem Namen processor, die für dynamische Informationen auf der Web-Seite notwendig ist. Dazu befinden sich in der Web-Seiten-Struktur Platzhalter-Elemente, die in Prozentzeichen eingeschlossen sind. Die Processor-Funktion wird immer dann aktiv, wenn ein Platzhalter in der Web-Seite gefunden wird. Dabei wird der Platzhalter durch den entsprechenden Wert oder Text ersetzt. Den Abschluss bilden 2 spezielle Funktionen: Eine ist zur Erstellung einer Liste für den Datei-Manager zuständig, die andere zur Erstellung einer Geburtstagsliste.

process.h: Diese Datei enthält alle Funktionen, die zur Bearbeitung der Daten und zum Erzeugen der Laufschrift benötigt werden. Den Anfang macht eine Funktion zum Dekodieren der Wetterdaten, die im JSON-Format über MQTT empfangen werden. Dieser folgt eine weitere Funktion, die nach dem gleichen Prinzip für die Dekodierung der Kraftstoffpreise zuständig ist. Weitere 2 Funktionen kümmern sich um UTF-8-Zeichen und wandeln diese in den intern verwendeten Zeichenkode der Uhr um. Anschließend sorgen 2 recht große Funktionen für die Ausgabe der gewünschten Informationen als Laufschrift. Den Abschluss bildet eine Funktion, die eine Textnachricht (entweder eingegeben oder über MQTT empfangen) ebenfalls für die Laufschrift-Anzeige aufbereitet.

functions.h: In dieser Datei befinden sich viele Funktionen, die zur besseren Übersicht der Hauptprogrammschleife und anderer Programmteile ausgelagert wurden. Die wichtigsten sind in der folgenden Übersicht aufgelistet:

tables.h: In dieser Datei sind alle Zeichensätze für die Anzeige auf dem Matrix-Display sowie einige Tabellen und Listen untergebracht. Den Anfang machen mehrere Zeichensätze für Ziffern, Zeichen und Symbole. Es folgen einige Texte, 2 kleine Tabellen für die UTF-8-Dekodierung und eine Liste, welche die Datei favicon.png für den Web-Server enthält. Eine weitere Liste hilft bei der Ermittlung des richtigen Wettersymbols und den Abschluss macht eine lange Liste mit den Wetterlagetexten.

platformio.ini: Diese Datei enthält wichtige Informationen zum Projekt und wird nur dann benötigt, wenn der Quelltext mit Visual Studio Code und PlatformIO bearbeitet werden soll. Hier stehen Daten über die genutzte Controller-Plattform, die verwendete Hardware, die genutzten COM-Ports für die Programmierung und den seriellen Monitor sowie eine Liste mit den benötigten Bibliotheken.

Matrix-Display: Hier noch einige Informationen zur Ansteuerung der Displays und die Erzeugung der Laufschrift: Das zentrale Bauteil der Matrix-Displays ist der Treiber-Chip MAX7219, der insgesamt 64 LEDs über eine 8x8-Matrix ansteuern kann. Die Ausgabe erfolgt im Multiplexbetrieb mit einer Frequenz von ungefähr 800 Hz. Die LED-Treiber verwenden Stromquellen, so dass keine Vorwiderstände notwendig sind. Die MAX7219 erhalten ihre Informationen über eine SPI-Schnittstelle mit 3 Leitungen. Dies ermöglicht eine einfache Kaskadierung und so haben die hier verwendeten Display-Module insgesamt 4 MAX7219 und ebenso viele LED-Elemente auf einer Platine vereint. Die MAX7219 speichern alle übertragenen Informationen, somit bleibt ein einmal übermitteltes Bitmuster solange erhalten, bis neue Informationen empfangen werden. Die SPI-Übertragung erfolgt übrigens mit einer Taktfrequenz von 4 MHz und 16-Bit-Werten.

Im Schaltplan fällt auf, dass das optionale zweite Display-Modul nicht mit dem ersten kaskadiert wurde, was ja technisch sinnvoll wäre. Ich habe festgestellt, dass die Ansteuerung so einfacher ist und zudem noch einen Trick erlaubt: Viele Informationen, z.B. für die Initialisierung, die Helligkeitssteuerung oder die Nachtabschaltung müssen an alle Display-Module gesendet werden. In diesen Fällen werden einfach die CS-Leitungen beider Displays gleichzeitig aktiviert und so empfangen beide Module die Daten in der halben Zeit.

Für die Erzeugung der Laufschrift wird ein Pixelpuffer mit einer Größe von 1000 Bytes verwendet. Alle gewünschten Informationen für die Laufschrift werden zu einem einstellbaren Zeitpunkt als fertiges Bitmuster direkt in diesen Puffer geschrieben, wobei ein Byte einer senkrechten Pixelreihe entspricht. Ist die Laufschrift fertig präpariert, dann wird die Position des Endpunktes gespeichert und ein Zeiger auf die erste Position gesetzt. Das Hauptprogramm steuert die zyklische Ausgabe der Laufschrift und wenn der Zeitpunkt zum Weiterrücken der Informationen erreicht ist, wird zuerst der Inhalt des Matrix-Displays um ein Pixel nach links verschoben. Anschließend wird das Byte an der aktuellen Zeigerposition aus dem Pixelpuffer geholt und damit die rechte Pixelspalte der Matrix aufgefüllt. Dieser Vorgang wird fortlaufend bis zur gespeicherten Endposition wiederholt. Daran schließen sich weitere 32 leere Pixelreihen an, so dass nach der Ausgabe der kompletten Laufschrift das Display leer ist. Danach wird auf den nächsten Zeitpunkt zur Laufschrift-Ausgabe gewartet und dann eine neue Laufschrift generiert.

Symbol Inbetriebnahme

Die nachfolgend beschriebene Inbetriebnahme der Matrixuhr-Mini muss nur einmal durchgeführt werden. Dazu wird über den USB-Anschluss des D1-mini-Boards und einer speziellen Software die Firmware in den Flash-Speicher des ESP8266 geschrieben. Anschließend können über die bestehende USB-Verbindung und einem Terminalprogramm die WLAN-Daten eingegeben werden. Bei dieser Inbetriebnahme kann das D1-mini-Board wahlweise mit oder ohne Display an den PC angeschlossen werden.

ESP8266 USB Nach dem Anschluss des D1-mini-Boards an den PC über ein USB-Kabel sollte geprüft werden, ob das Board vom System erkannt und eingebunden wurde. Auf einem Windows-PC erreicht man über Einstellungen, Bluetooth und Geräte und Geräte eine entsprechende Liste. Hier muss wie im Bild das Gerät USB-SERIAL CH340 erscheinen und außerdem ein COM-Port zugewiesen sein. Die Nummer des COM-Ports sollten wir uns merken, die wird später noch gebraucht.

Jetzt gibt es mehrere Möglichkeiten, die Software für die Matrixuhr-Mini in den Flash-Speicher des ESP8266 zu bekommen. Wer bereits eine Entwicklungsumgebung wie Visual Studio Code sowie PlatformIO oder alternativ die Arduino-Entwicklungsumgebung installiert hat, kann diese verwenden. In diesem Fall setze ich voraus, dass bekannt ist, wie man aus dem Quelltext die Software zusammenbaut und den ESP8266 programmiert. Es ist für den Nachbau der Uhr aber nicht notwendig, eines dieser riesigen Software-Pakete zu installieren. Deshalb beschreibe ich hier etwas ausführlicher den Weg über ein relativ einfaches Programmiertool. Dieses wird von Espressif (dem Entwickler des ESP8266) zur Verfügung gestellt und kann auf dessen Homepage geladen werden: https://www.espressif.com/en/support/download/other-tools. Hier findet man das Paket Flash Download Tools und dieses brauchen wir. Außerdem brauchen wir das aktuelle Firmware-Paket für die Matrixuhr-Mini matrixmini-firmware-v100.zip.

Nach dem Download beider Pakete wird zunächst das Flash Download Tool entpackt und alle enthaltenen Dateien in einen geeigneten Ordner kopiert. Wichtig für uns ist die Programmdatei flash_download_tool_x.x.x.exe (die x enthalten die Versionsnummer) und das leere Verzeichnis bin. Dieses Verzeichnis ist für die Dateien vorgesehen, die in den Mikrocontroller programmiert werden sollen und hier kopieren wir die Datei firmware.bin aus dem Firmware-Paket matrixmini-firmware-v100.zip hinein. Jetzt wird das Programm flash_download_tool_x.x.x.exe gestartet.

Flash-Tool-Start Bei jedem Start zeigt das Flash-Download-Tool einen kleinen Dialog wie im nebenstehenden Bild. Hier ist die Voreinstellung mit dem ChipType ESP8266 korrekt und mit einem Klick auf OK erscheint das Hauptfenster.

Flash-Tool-Hauptbild Im Hauptfenster muss jetzt noch die gewünschte Firmware-Datei ausgewählt und die Zieladresse im Flash-Speicher festgelegt werden. Das Ergebnis sollte dann so aussehen wie im Bild.

Beim mittleren Teil SPIFlashConfig besteht kein Handlungsbedarf, hier sind die Voreinstellungen korrekt. Einstellungen sind jetzt nur noch im unteren Teil DownloadPanel 1 notwendig. Hier muss zuerst der COM-Port ausgewählt werden, der unserem D1-mini-Board zugewiesen wurde. Das Flash-Download-Tool erkennt alle aktiven COM-Ports und bietet oft den richtigen in der Auswahlliste an. Zum Schluss kann man noch die Baudrate erhöhen, um den Programmiervorgang etwas zu beschleunigen. Eine gute Einstellung sind hier 921600 Baud.

Jetzt ist alles vorbereitet und mit einem Klick auf START wird der Programmiervorgang gestartet. Dieser dauert bei 921600 Baud ungefähr 7 Sekunden. Mit den voreingestellten 115200 Baud dauert es etwa 30 Sekunden.

Flash-Tool fertig Wenn der untere Teil des Programmfensters so aussieht wie im nebenstehenden Bild, dann war der gesamte Programmiervorgang erfolgreich. Die Werte im Anzeigefeld sind bei jedem ESP8266 anders und zeigen die Netzwerk-Adressen (MAC) an.

Hinweis: Wenn das für die Matrixuhr-Mini vorgesehene ESP8266-Board vorher in einem anderen Projekt verwendet wurde, dann sollte man zuerst über den Button ERASE den Flash-Speicher löschen. Anschließend kann ein normaler Programmiervorgang über START erfolgen.

Das Flash-Download-Tool wird vorerst nicht mehr benötigt und kann beendet werden. Der ESP8266 muss aber noch am PC angeschlossen bleiben, denn jetzt ist es noch erforderlich, die WLAN-Daten einzugeben. Dazu wird ein Terminalprogramm benötigt. Wer schon andere Projekte auf dieser Seite nachgebaut hat, hat vielleicht schon ein Terminal installiert und verwendet, z.B. TeraTerm, PuTTY oder Termite. Falls noch kein Terminalprogramm vorhanden ist, empfehle ich Termite. Dieses Programm ist sehr kompakt und einfach zu bedienen. Auf der Homepage von Termite https://www.compuphase.com/software_termite.htm gibt es 2 Versionen zum Download: eine komplette Setup-Version und eine Minimalversion als ZIP-Datei. Hier überlasse ich jedem selbst die Auswahl, beide Versionen können verwendet werden.

Termite 1 Nach der Installation und dem Programmstart präsentiert sich Termite wie im nebenstehenden Bild. Es müssen jetzt noch einige Einstellungen vorgenommen werden, damit Termite mit dem ESP8266 kommunizieren kann. Dazu klicken wir auf den Button Settings.

Termite 2 Dieses Bild zeigt die Einstellungen von Termite. Ich habe hier bereits alles passend für das Matrixuhr-Projekt gesetzt. Man muss allerdings diese Einstellungen zweimal aufrufen, damit sich dieses Bild ergibt. Zuerst wird das Element User interface language auf Deutsch (de) geändert. Nach dem Klick auf OK wird ein Neustart-Fenster angezeigt, welches bestätigt werden muss. Anschließend erscheint Termite in deutscher Sprache wieder und über Einst. ruft man erneut die Einstellungen auf. Jetzt müssen noch folgende Elemente angepasst werden:

Schnittstelle - Hier muss der COM-Port eingestellt werden, der unserem ESP8266-Board zugewiesen wurde.

Baudrate - Hier wird 115200 eingestellt.

Schrift - Hier wird die Einstellung auf standard geändert.

Mit OK erscheint wieder das Programmfenster von Termite.


Termite 3 Jetzt ist es notwendig, den ESP8266 neu zu starten. Dazu drückt man kurz auf den Reset-Taster auf dem ESP8266-Board. Der ESP8266 führt nun einen Neustart aus und gibt wie im Bild nebenan jede Menge Fehlermeldungen aus. Das ist völlig normal und hängt damit zusammen, dass noch keine Konfigurationsdateien vorhanden sind. Die letzte Meldung sollte wie auf dem Bild WLAN-Verbindungsaufbau sein. Das Matrix-Display der Uhr sollte jetzt auch schon etwas anzeigen.

Die Matrixuhr-Software auf dem ESP8266 gibt hier nicht nur Informationen aus, es können auch Informationen eingegeben werden. Für einen ersten Test drücken wir einfach mal die Enter-Taste.

Termite 4 Die Software der Matrixuhr bietet hier über 4 Kommandos eine Eingabemöglichkeit für die WLAN-Informationen. Wenn man nur Enter und kein Kommando eingibt, dann erscheint dieser nebenstehende Hilfetext. Um die Matrixuhr mit dem WLAN zu verbinden, sollte zuerst mit dem ssid-Kommando der WLAN-Name eingegeben werden. Anschließend erfolgt die Eingabe des WLAN-Passwortes über das pass-Kommando. Mit dem Kommando list kann man sich die eingegebenen Informationen zur Kontrolle noch einmal anzeigen lassen. Wenn alles passt, wird schließlich das save-Kommando verwendet. Dieses speichert die WLAN-Daten im Dateisystem des ESP8266 ab und startet das System neu.

Termite 5 Dieses Bild zeigt das Terminalfenster nach der Eingabe von Beispieldaten über die Kommandos ssid, pass und list. Das sieht auf den ersten Blick etwas seltsam aus, hat aber seinen Grund. So haben beispielsweise die Zeilen beim ssid-Kommando folgende Bedeutung:

ssid MEIN_WLAN - Dieses Kommando muss über die separate Zeile ganz unten eingegeben werden und nach dem Abschluss mit ENTER erscheint diese Zeile zur Kontrolle hier im Terminalfenster. MEIN_WLAN muss dann natürlich durch den richtigen WLAN-Namen ersetzt werden.

ssid MEIN_WLAN - Diese Zeile wird von Termite generiert und enthält die Informationen, die über die serielle Schnittstelle zum ESP8266 gesendet wurden.

SSID: MEIN_WLAN - Diese Zeile zeigt die Informationen an, die vom ESP8266 empfangen wurden. Hier hat die Software der Matrixuhr das Kommando verarbeitet und die eingegebene SSID akzeptiert.

Zusammengefasst gilt: nur die blauen Zeilen müssen eingegeben werden.

Termite 6 Hier kann man sehen, was nach der Eingabe des save-Kommandos passiert. Der ESP8266 wird neu gestartet und es kommen wegen der noch fehlenden Konfiguration wieder viele Fehlermeldungen. Aber jetzt wird die WLAN-Verbindung hergestellt und die vom Netzwerk zugewiesene IP-Adresse sowie die Empfangsfeldstärke des WLAN-Signals angezeigt. Die Matrixuhr-Software hat sogar schon einen voreingestellten Zeitserver kontaktiert und die Uhrzeit gesetzt.

Wenn alles wie beschrieben funktioniert hat, kann man das Terminalprogramm wieder beenden. Die USB-Verbindung zum PC wird nun getrennt und ein Netzteil an das ESP8266-Board angeschlossen.

Es kann durchaus passieren, dass auch nach längerer Wartezeit keine Verbindung zum WLAN hergestellt wird. In einem solchen Fall kann man die Eingabeprozedur der WLAN-Informationen wiederholen. Das ist jederzeit möglich, dabei müssen nach einem Neustart immer beide Parameter (SSID und Passwort) neu eingegeben werden. Ein weiterer Sonderfall tritt ein, wenn das gewünschte WLAN nicht in Reichweite ist. In diesem Fall geht man genau so vor wie bei einer erfolgreichen Verbindung: Terminalprogramm beenden, USB-Verbindung zum PC trennen und ein Netzteil an das ESP8266-Board anschließen. Die Uhr wird dann am zukünftigen Platz, wo auch das eingegebene WLAN erreichbar sein sollte, final in Betrieb genommen.

Hinweis: Diese Inbetriebnahme-Prozedur ist nur einmal erforderlich. Firmware-Updates können später über einen Web-Browser und die bestehende WLAN-Verbindung durchgeführt werden. Falls es erforderlich sein sollte, die WLAN-Daten zu ändern oder wenn die Uhr in ein anderes WLAN umziehen soll, dann kann man über die bisherige Verbindung ebenfalls mittels Web-Browser die neuen WLAN-Daten eingeben. Beim nächsten Neustart verbindet sich die Matrixuhr dann mit dem neuen WLAN.

Symbol Bedienung

Dieser Abschnitt gliedert sich in 2 Teile. Im ersten Teil werden einige Informationen und Besonderheiten der Matrixuhr-Anzeige beschrieben. Teil zwei beschreibt alle Möglichkeiten, die der integrierte Web-Server für die Einstellung und Konfiguration der Matrixuhr bietet.

Symbol Teil 1 - Bedienung der Matrixuhr-Mini

Anzeige 1 Die Matrixuhr-Mini verwendet ein einfarbiges LED-Matrix-Panel mit insgesamt 256 LEDs, die in 8 Zeilen und 32 Spalten angeordnet sind. Damit lässt sich eine relativ gut ablesbare Zeitanzeige realisieren. In der Grundeinstellung werden Stunden, Minuten und ein blinkender Doppelpunkt angezeigt.

Anzeige 2 Alternativ lässt sich die Zeit auch mit Sekunden anzeigen. Dafür mussten allerdings die Ziffern etwas schmaler gestaltet werden.

Anzeige 3 Die Matrixuhr kann den Wochentag, das Datum und Geburtstage anzeigen. Diese Informationen erscheinen grundsätzlich als Laufschrift. Falls die Uhr mit einem einzelnen Matrix-Display aufgebaut wurde, wird die Zeitanzeige regelmäßig durch die Laufschrift-Ausgabe unterbrochen. Die Laufschrift erscheint dann in einem einstellbaren Intervall zwischen 15 Sekunden und 2 Minuten. Verwendet man zwei Matrix-Displays, dann ist eins davon für die Zeitanzeige zuständig und das andere für die Zusatz-Informationen.

Anzeige 4 Die Matrixuhr kann eine Verbindung zu einem MQTT-Server im Heimnetz herstellen. Das ermöglicht die Anzeige von praktisch allen Daten, die der Server als Wert im Klartext zur Verfügung stellt, z.B. Sensorwerte von einer Hausautomatisierung. Hat man auf dem Server zusätzlich Node-RED und die Module für OpenWeatherMap und Tankerkönig installiert, dann lassen sich auch Wetterdaten und ausgewählte Kraftstoffpreise anzeigen. Diese Daten erscheinen dann ebenfalls als Laufschrift.

Anzeige 5 Über den integrierten Web-Server der Matrixuhr lässt sich eine Textnachricht eingeben und diese erscheint dann auf der Uhr ebenfalls als Laufschrift. Alternativ ist es auch möglich, eine über MQTT übermittelte Textnachricht anzuzeigen. Diese Nachricht wird dann vorrangig angezeigt, wobei sie einstellbar bis zu 5 mal wiederholt wird. Anschließend erfolgt wieder die normale Anzeige. Für die Laufschrift der Textnachricht lässt sich eine andere Geschwindigkeit einstellen, so dass man die Anzeigen unterscheiden kann.

Anzeige 6 Die Matrixuhr kann auch auf einige abnormale Zustände hinweisen. Normalerweise ist zwischen dem Stunden- und Minutenwert ein blinkender Doppelpunkt zu sehen. Dieses Bild zeigt das Display der Matrixuhr kurz nach dem Start. Hier ist ein größeres Symbol zu sehen, welches durch Blinken darauf hinweist, dass keine WLAN-Verbindung vorhanden ist.

Anzeige 7 Auf diesem Bild ist ebenfalls ein alternatives Symbol zu sehen. Dieses blinkt, wenn die WLAN-Verbindung aktiv, jedoch noch keine gültige Uhrzeit vorhanden ist.

Anzeige 8 Wenn ein Firmware-Update über die Web-Oberfläche gestartet wird, dann erscheint dieses Bild.

Anzeige 9 Wenn ein Firmware-Update über die Web-Oberfläche erfolgreich abgeschlossen wurde, dann wird das mit diesem Bild angezeigt.

Anzeige 10 Bei einem fehlgeschlagenen Firmware-Update ist dieses Bild zu sehen (wird hoffentlich nie passieren).

Noch ein Hinweis: Es ist möglich, das Display der Matrixuhr in einem einstellbaren Zeitbereich, z.B. über Nacht auszuschalten. Diese Funktion steht nur zur Verfügung, wenn die Uhr eine gültige Zeit über NTP empfangen hat.

Symbol Teil 2 - Bedienung der Web-Seite

Alle Einstellungen an der Matrixuhr-Mini erfolgen über einen integrierten Web-Server. Dieser kann von einem beliebigen Web-Browser über die IP-Adresse der Uhr aufgerufen werden. Voraussetzung dafür ist eine vollständige Inbetriebnahme des ESP8266-Boards und eine aktive WLAN-Verbindung. Wichtig ist natürlich auch die IP-Adresse der Uhr. Diese kann man bei der Inbetriebnahme des ESP8266-Boards aus dem Terminalfenster auslesen oder beim Start der Uhr auf dem Matrix-Display ablesen. Wir starten nun unseren Lieblings-Web-Browser und geben die IP-Adresse der Matrixuhr-Mini in die Adresszeile ein. Ich verwende hier eine Beispiel-Adresse: http://192.168.1.225

Web-Seite 1 Wenn alles passt, dann sollte das nebenstehende Bild zu sehen sein, wobei einige der angezeigten Daten abweichen werden.

Die Web-Seite ist relativ einfach aufgebaut und besteht aus einem Seitenmenü und einem Hauptfenster, welches den im Menü ausgewählten Inhalt anzeigt. Das Seitenmenü ist zur besseren Übersicht in 4 Bereiche unterteilt. Der nachfolgende Abschnitt beschreibt die 4 Bereiche und deren Menü-Optionen in der Reihenfolge, wie sie im Menü erscheinen.

Bei der ersten Inbetriebnahme empfehle ich, mit dem Bereich System-Einstellungen zu beginnen.

Informationen / Status

Über diese Menü-Option gelangt man zu einer Übersichtsseite mit allgemeinen Informationen über die Matrixuhr (siehe Bild oben). Diese Seite ist auch gleichzeitig die Startseite. Die meisten Informationen in der tabellarischen Übersicht sind selbsterklärend. Bei einigen Werten sind vielleicht noch einige Worte notwendig:

Systemlaufzeit: Diese wird zunächst in Minuten angegeben. Nach einer Laufzeit von 60 Minuten wechselt der Wert in Stunden mit einer Nachkommastelle und nach 24 Stunden in Tage mit 2 Kommastellen.

RAM frei: Dieser Wert bezieht sich auf den Heap-Speicher der C++ Firmware.

Dateisystem, Zeit-Status, MQTT-Status: Die Anzeige dieser Statuswerte erfolgt über Symbole. Es können folgende Zustände auftreten:

ParameterStatusBedeutung
DateisystemFehler beim Zugriff auf das Dateisystem. Das Lesen und Speichern von Einstellungen ist nicht möglich.
Das Dateisystem ist in Ordnung.
Zeit-StatusDie Uhr hat noch keine gültige Zeit.
Die Uhr hat eine gültige Zeit, wurde aber schon länger nicht mehr synchronisiert.
Die Uhr hat eine gültige Zeit und wurde vor kurzem synchronisiert.
MQTT-StatusDie Uhr hat keine Verbindung zum MQTT-Server.
Die Verbindung zum MQTT-Server wurde hergestellt.

Auf dieser Seite befinden sich 2 Buttons, die folgende Funktion haben:

Aktualisieren Ein Klick auf diesen Button lädt die Seite neu und aktualisiert dabei alle Werte. Eine automatische Aktualisierung der Daten erfolgt generell nicht.

Nachricht anzeigen Mit einem Klick auf diesen Button wird der Text in der darüberliegenden Eingabezeile als Laufschrift auf der Uhr angezeigt. Neben dem Button erscheint der Hinweis  OK  als Bestätigung.

Konfiguration / Geburtstage

Web-Seite 2 Über diese Menü-Option kann eine Geburtstagsliste verwaltet werden. Wenn die Software der Matrixuhr Einträge in der Liste findet, die zum aktuellen Datum passen, dann lässt sich der Name und das errechnete Alter der Jubilare auf der Matrixuhr als Laufschrift ausgeben. Auf diesem Beispiel-Bild ist bereits ein Eintrag vorhanden.

Die Geburtstagsliste kann bis zu 100 Einträge aufnehmen und jeder Eintrag besteht aus dem Geburtsdatum und einem Namen, der bis zu 20 Zeichen lang sein darf. Die Geburtstagsliste wird immer nach dem Datum sortiert angezeigt.

Zur Eingabe eines neuen Geburtstages klickt man zunächst auf das kleine Kalender-Symbol im Datum-Eingabefeld. Es öffnet sich ein Kalender mit einer Monatsübersicht und hier hat man die Möglichkeit, über ein Auswahlfeld das Geburtsjahr und den Monat auszuwählen. Anschließend klickt man noch auf den Tag in der Übersicht und es erscheint wieder das Datum-Eingabefeld mit dem fertigen Datum. Alternativ kann man auch direkt auf die Felder für Tag, Monat und Jahr klicken und die Werte direkt eingeben. Jetzt wird noch der Name im entsprechenden Feld ergänzt und mit einem Klick auf den Button  +  wird der neue Eintrag übernommen. Dabei erfolgt automatisch eine Sortierung und Speicherung der Liste. Wenn der Vorgang erfolgreich war, erscheint unten rechts ein  OK , anderenfalls  Fehler .

Über den Button Eintrag löschen kann ein Eintrag aus der Liste entfernt werden. Dazu muss vorher die Nummer des Geburtstages in das kleine Feld links neben dem Button eingetragen werden. Auch hier wird die Liste automatisch neu geordnet und gespeichert und es erscheint unten rechts ein  OK , wenn die Löschung erfolgreich war, anderenfalls  Fehler . Eine Korrektur ist übrigens nicht vorgesehen. Ein fehlerhafter Eintrag muss gelöscht und neu angelegt werden.

Konfiguration / Sensoren

Web-Seite 3 Die Matrixuhr-Mini kann Sensorwerte über MQTT empfangen und anzeigen. Zur Aktivierung dieser Funktion ist es zunächst erforderlich, alle benötigten Sensoren auf dieser Seite zu erfassen. Damit wird der Datenempfang über MQTT aktiviert und jedem Sensor ein eindeutiger Name [A] bis [H] zugeordnet. Auf der im nächsten Abschnitt beschriebenen Seite Datenausgabe kann die Anzeige der Sensorwerte konfiguriert werden.

Voraussetzung für die Anzeige von Sensorwerten ist ein MQTT-Server im lokalen Netzwerk. Im Rahmen des Projektes Temperatur-Messsystem habe ich den Aufbau des Web-Moduls beschrieben. Dieses Modul stellt neben anderen Funktionen auch einen MQTT-Server bereit, den die Matrixuhr nutzen kann. Von diesem Server kann die Uhr neben Sensorwerten aus dem Haus auch Informationen aus dem Internet beziehen, wie z.B. Wetterdaten und Kraftstoffpreise.

Um einen Sensorwert für die Anzeige auf der Uhr zu definieren, muss dessen MQTT-Topic bekannt sein. Dies ist der Name, unter dem der Sensorwert auf dem MQTT-Server abgelegt wurde. Dieser Name wird für jeden gewünschten Sensor in eines der 8 Felder wie auf dem Beispielbild eingetragen. Die Felder müssen übrigens nicht zwingend der Reihe nach belegt werden, es können auch Lücken bleiben. Über das Auswahlfeld in der Spalte Dezimal lässt sich die Anzahl der Nachkommastellen (0, 1 oder 2) festlegen. Empfangene Sensordaten werden auf Plausibilität geprüft und später für die Anzeige auf dem Display in die gewählte Einstellung konvertiert. Zusätzlich steht noch die Auswahlmöglichkeit aus zur Verfügung. Diese schaltet die Plausibilitätsprüfung und Konvertierung komplett aus und ermöglicht die Anzeige beliebiger Informationen, die z.B. dynamisch von Node-RED generiert werden können.

Der untere Bereich ist für spezielle Informationen vorgesehen. Wenn der MQTT-Server Wetterdaten von OpenWeatherMap und Kraftstoffpreise von Tankerkönig bereitstellt, dann kann man die entsprechenden MQTT-Topics hier eintragen. Die Übertragung dieser Informationen erfolgt als Datenblock im JSON-Format und wird von der Uhr in Einzelwerte zerlegt. Die letzte Zeile ermöglicht den Empfang von Textnachrichten vom MQTT-Server, diese werden dann von der Uhr als Laufschrift mit höherer Priorität angezeigt.

Mit einem Klick auf den Button Einstellungen speichern werden alle Eingaben im Dateisystem des ESP8266 gespeichert und außerdem alle MQTT-Topics beim Server abonniert. War die Aktion erfolgreich, dann erscheint neben dem Button ein  OK , anderenfalls  Fehler . An dieser Stelle sollte die letzte Tabellenspalte Wert erwähnt werden: Hier werden die über MQTT empfangenen Daten angezeigt. Es handelt sich dabei um die Roh-Daten, die Dezimal-Einstellung wird bei dieser Anzeige nicht berücksichtigt. Bei den speziellen Informationen für Wetter, Kraftstoff und Nachricht sieht man die ersten 12 Zeichen des JSON-Datensatzes bzw. die ersten 12 Zeichen der Nachricht.

Diese Seite wird nicht automatisch aktualisiert. Um aktuelle Werte zu bekommen, ist ein Klick auf den Button Aktualisieren erforderlich. Übrigens, wenn neue MQTT-Topics definiert werden, dann kann es etwas dauern, bis Werte verfügbar sind. Das liegt daran, dass der MQTT-Server keine Daten zwischenspeichert. Erst wenn ein Sensor einen neuen Wert an den MQTT-Server übermittelt, geht dieser an die Abonnenten weiter. Diese Eigenschaft lässt sich allerdings auf der Senderseite ändern (Retain Funktion).

Konfiguration / Datenausgabe

Web-Seite 4 Auf dieser Seite lassen sich die Informationen und Sensordaten zusammenstellen, die auf der Matrixuhr angezeigt werden sollen. Dies erfolgt über eine Eingabezeile, welche von der Uhr in einem einstellbaren Intervall zur einer Laufschrift verarbeitet und dann auf dem Matrix-Display ausgegeben wird. In dieser Eingabezeile können Wochentag, Datum, Geburtstage, Sensorwerte, Wetterdaten, Kraftstoffpreise, einige Symbole sowie beliebige Texte miteinander kombiniert werden.

Als kleine Hilfe befindet sich unter der Eingabezeile eine Übersicht mit allen zur Verfügung stehenden Daten. Hier sind auch die jeweils aktuellen Werte (sofern vorhanden) in Klammern zu sehen. Weiterhin wird noch auf 7 Symbole hingewiesen, die ebenfalls für die Anzeige verwendet werden können. Eine besondere Funktion ist der dynamische Bereich mit den geschweiften Klammern, dieser wird weiter unten noch genauer beschrieben.

Mit dem Button Einstellungen speichern werden alle Eingaben übernommen und im Dateisystem gespeichert. War die Aktion erfolgreich, dann erscheint neben dem Button ein  OK , anderenfalls  Fehler . Im Erfolgsfall werden die neuen Eingaben sofort wirksam und bei der nächsten Laufschrift sichtbar.

Der Button Aktualisieren erneuert alle in Klammern stehenden Werte im Hilfe-Bereich. Es erfolgt hier keine automatische Aktualisierung.

Zum besseren Verständnis der Syntax für die Datenausgabe habe ich ein einfaches Beispiel konstruiert. Es soll die vom Wetterdienst gelieferte Außentemperatur angezeigt werden und das könnte man über folgenden Eintrag in die Eingabezeile realisieren:

Außen [M]°C

Als Ergebnis würde folgende Laufschrift generiert:

Anzeige 11

Jetzt kann allerdings ein Sonderfall eintreten. Wenn z.B. nach dem Start der Uhr noch keine Wetterdaten vorliegen oder der Wetterdienst über einen längeren Zeitraum nicht erreichbar ist, dann ist kein Sensorwert vorhanden und die Laufschrift würde folgendermaßen aussehen:

Anzeige 12

Man kann zwar damit leben, aber es sieht nicht schön aus. Die großen Matrixuhren (Matrixuhr und Matrixuhr-ESP32) geben solche Informationen als wechselnde Datenfelder aus und würden in einem solchen Fall das betroffene Datenfeld einfach ausblenden. Dieser Mechanismus funktioniert hier nicht, da es eben keine abgegrenzten Datenfelder gibt. Aber das Problem lässt sich elegant lösen und zwar mit dem dynamischen Bereich. Dazu schließt man das Beispiel von oben einfach in geschweifte Klammern ein:

{Außen [M]°C}

Jetzt passiert folgendes: Ist der auszugebende Sensorwert vorhanden, dann wird alles innerhalb der Klammern ganz normal als Laufschrift ausgegeben (natürlich ohne die geschweiften Klammern). Ist kein Sensorwert vorhanden, dann wird der gesamte Inhalt zwischen den Klammern verworfen und nicht ausgegeben. Es gibt hier keine Einschränkungen und es ist auch möglich, längere Bereiche mit mehreren Sensorwerten einzuschließen. In diesem Fall erfolgt die Ausgabe nur dann, wenn alle Werte vorhanden sind. Man kann übrigens beliebig viele dynamische Bereiche definieren, diese dürfen aber nicht verschachtelt werden.

Dynamische Bereiche kann man bei allen auszugebenden Daten verwenden, also auch beim Wochentag, beim Datum und bei den Geburtstagen, denn auch hier werden anderenfalls bei fehlenden Informationen Ersatzwerte wie kein Tag, kein Datum oder kein Geburtstag angezeigt. Setzt man die dynamischen Bereiche konsequent ein, dann kann man noch einen weiteren Vorteil nutzen: Die Uhr setzt bei der Laufschrift-Ausgabe automatisch ein Trenn-Element zwischen die Bereiche und dieses kann selbst definiert werden. Hier habe ich als weiteres Beispiel die Zeile aus dem Screenshot weiter oben noch einmal im Klartext aufgelistet:

{[f], [e]}{[g]}{[X]}{[W] [A]°C [B]%}{Bad [C]°C}

Damit ergibt sich folgende Laufschrift-Ausgabe:

Anzeige 13Anzeige 14Anzeige 15Anzeige 14Anzeige 16Anzeige 14Anzeige 17

Obwohl in diesem Beispiel der Bereich {[g]} (Geburtstage) definiert wurde, werden keine Geburtstags-Informationen ausgegeben. Das ändert sich am 10.07.2025, denn hier würde der Beispiel-Geburtstag vom Bild etwas weiter oben aktiv werden und dann könnte die Ausgabe so aussehen:

Anzeige 20Anzeige 14Anzeige 18Anzeige 14Anzeige 15Anzeige 14Anzeige 16Anzeige 14Anzeige 17

Zwischen den dynamischen Elementen werden hier automatisch 3 Leerzeichen als Trenn-Element eingefügt. Dies ist die Voreinstellung und kann auf der im nächsten Abschnitt beschriebenen Seite konfiguriert werden. Hier ist ein Beispiel mit einem alternativen Trenn-Element, welches aus 2 Leerzeichen, einem Stern und weiteren 2 Leerzeichen besteht:

Anzeige 19Anzeige 14Anzeige 15Anzeige 19Anzeige 16Anzeige 19Anzeige 17

Vermutlich werden viele Versuche nötig sein, bis man die optimale Laufschrift-Anzeige gefunden hat. Hier sollte man einfach experimentieren und alle Möglichkeiten ausprobieren. Wichtig zu wissen: Eine Laufschrift wird einmal zusammengestellt und dann ausgegeben. Änderungen werden also erst beim Start eines neuen Laufschrift-Zyklus wirksam.

Konfiguration / Anzeige

Web-Seite 5 Über diese Seite kann das Matrix-Display konfiguriert werden. Die meisten Optionen sollten eigentlich selbsterklärend sein, einige erfordern vielleicht noch zusätzliche Informationen:

2 Display-Module verwenden: Über diese Einstellung wird festgelegt, ob das optionale zweite Display-Modul verwendet werden soll. In der Grundeinstellung teilen sich die Zeitanzeige und die Laufschrift ein Display. Aktiviert man diese Option, dann werden die Funktionen getrennt: Das obere Display zeigt dann ständig die Uhrzeit an und alle Informationen erscheinen auf dem unteren Display.

Uhrzeit mit Sekunden: In der Grundeinstellung werden nur die Stunden und Minuten mit fetten Ziffern angezeigt. Schaltet man diese Option ein, dann werden schmale Ziffern verwendet und der Platz reicht dann für Stunden, Minuten und Sekunden.

Datenausgabe-Intervall: Diese Einstellung legt die Zeitabstände fest, an denen eine Laufschrift-Ausgabe gestartet werden soll. Die Grundeinstellung 30 Sekunden bewirkt beispielsweise, dass zur Sekunde 0 und 30 eine Laufschrift-Ausgabe gestartet wird. Sollte zu diesem Zeitpunkt noch eine Laufschrift aktiv sein, dann wird auf den nächsten Zeitpunkt gewartet. Zur Auswahl stehen die Intervalle 15, 20, 30, 60 und 120 Sekunden. Die Einstellung kein schaltet das Intervall aus und ist für einen Aufbau der Uhr mit 2 Display-Modulen gedacht. Hier erfolgt dann fortlaufend eine Laufschrift-Ausgabe auf dem unteren Display.

Nachrichten anzeigen: Empfängt die Uhr eine Nachricht (entweder über die Web-Oberfläche oder über MQTT), dann wird eine aktive Informations-Laufschrift abgebrochen und die Nachricht als Laufschrift ausgegeben. Mit dieser Einstellung wird festgelegt, wie oft diese Nachricht wiederholt werden soll. Zur Auswahl stehen die Optionen 1 mal bis 5 mal. Die Voreinstellung bewirkt eine 3-malige Ausgabe der Nachricht, anschließend wird wieder die Informations-Laufschrift aktiv.

dynamisches Trenn-Element: Macht man von den weiter oben beschriebenen dynamischen Bereichen Gebrauch, dann wird das hier konfigurierte Element automatisch zwischen den Bereichen eingefügt. Dieses Trenn-Element kann aus bis zu 10 Zeichen bestehen, wobei keine Buchstaben und Zahlen verwendet werden können. Diese dienen hier als Platzhalter für das Leerzeichen und werden immer durch ein solches ersetzt. Die Voreinstellung xxx bewirkt also das Einfügen von 3 Leerzeichen zwischen den dynamischen Bereichen. Um das alternative Trenn-Element mit einem Stern wie in der Beispiel-Laufschrift weiter oben zu erzeugen, könnte man folgende Eingabe verwenden: xx*xx.

Scroll-Geschwindigkeit Daten: Diese Einstellung bestimmt die Geschwindigkeit der Laufschrift für die normale Datenausgabe.

Scroll-Geschwindigkeit Nachrichten: Diese Einstellung bestimmt die Geschwindigkeit der Laufschrift beim Empfang einer Textnachricht oder bei der Anzeige von IP-Adresse und Empfangsfeldstärke beim Verbinden der Uhr mit dem WLAN.

Nacht Beginn- und Endezeit: Hier lässt sich ein Zeitraum in vollen Stunden einstellen, in dem das Display dunkel bleibt (Nachtmodus). Ist die Beginn- und Endezeit wie in der Grundeinstellung gleich, dann bleibt das Display immer aktiv.

Mit dem Button Einstellungen speichern werden alle Eingaben sofort wirksam und im Dateisystem gespeichert. War die Aktion erfolgreich, dann erscheint neben dem Button ein  OK , anderenfalls  Fehler .

System-Einstellungen

Grundsätzliches zu den System-Einstellungen: Diese werden normalerweise nur bei der Inbetriebnahme einer Matrixuhr-Mini bearbeitet und nur selten im laufenden Betrieb geändert. Hier gibt es auch die Besonderheit, dass fast jede Änderung einen Neustart der Uhr erfordert, damit die neuen Einstellungen wirksam werden. Bei jedem Speichervorgang wird deshalb der entsprechende Hinweis Bitte Matrixuhr neu starten ausgegeben. Der Neustart muss dann über das Menü Wartung / Neustart ausgelöst werden.

System-Einstellungen / WLAN

Web-Seite 6 Auf dieser Seite können die WLAN-Zugangsdaten geändert werden. Zunächst erscheinen hier die Daten des aktuellen WLAN. Falls die Matrixuhr in ein anderes WLAN umziehen soll, dann kann man an dieser Stelle die neuen Zugangsdaten eingeben. Das funktioniert natürlich nur, wenn die Uhr noch mit dem bisherigen Netz verbunden ist.

Mit dem Button Einstellungen speichern werden die Eingaben im Dateisystem gespeichert. War die Aktion erfolgreich, dann erscheint neben dem Button ein  OK , außerdem der Hinweis auf den notwendigen Neustart. Im Fehlerfall wird  Fehler  angezeigt. Wenn die WLAN-Daten geändert wurden und jetzt der Neustart ausgeführt wird, geht die Verbindung zum bisherigen WLAN verloren und die Matrixuhr versucht den Verbindungsaufbau mit dem neuen Netzwerk.

Wichtig: Wenn die Uhr in ein neues WLAN integriert werden soll, dann muss vorher die statische IP-Adresse (siehe nächste Einstellung) deaktiviert werden.

System-Einstellungen / Netzwerk

Web-Seite 7 Diese Seite kann normalerweise leer bleiben. Die Matrixuhr-Mini bekommt vom Router im Heimnetz eine dynamische IP-Adresse zugewiesen und mit dieser kann man grundsätzlich gut arbeiten. Oft besteht aber der Wunsch, eine feste IP-Adresse zu vergeben und diese Möglichkeit wurde über diese Seite geschaffen.

Um die Uhr auf eine statische IP-Adresse umzustellen, muss zunächst die Checkbox aktiviert werden. Anschließend werden die Beispieldaten in den 4 Eingabefeldern durch Werte ersetzt, die zum eigenen Heimnetz passen. Bei der IP-Adresse sollte man beachten, dass diese im Netzwerk frei ist und auch nicht im dynamischen Adress-Bereich des Routers liegt. Die Subnetzmaske ist hier typisch für ein Heimnetzwerk. Für Gateway und DNS wird üblicherweise die IP-Adresse des Routers eingetragen.

Beim Ausfüllen der Felder sollte sehr sorgfältig gearbeitet werden, denn eine falsche Eingabe kann dazu führen, dass die Matrixuhr nicht mehr über das Netzwerk erreichbar ist. In einem solchen Fall muss man (wie bei einer Inbetriebnahme) die Uhr mit einem PC verbinden und mittels Terminalprogramm eine neue WLAN-Verbindung herstellen. Bei dieser Prozedur werden die Einstellungen für die statische IP-Adresse gelöscht und die Matrixuhr bekommt wieder eine dynamische IP-Adresse zugewiesen.

Mit dem Button Einstellungen speichern werden die Eingaben im Dateisystem gespeichert. War die Aktion erfolgreich, dann erscheint neben dem Button ein  OK , außerdem der Hinweis auf den notwendigen Neustart. Im Fehlerfall, der hier auch durch eine fehlende oder falsche Eingabe ausgelöst werden kann, erscheint  Fehler . Nach dem Neustart ist die Matrixuhr nur noch über die neue IP-Adresse erreichbar.

System-Einstellungen / MQTT

Web-Seite 8 Über diese Seite kann die Kommunikation mit einem MQTT-Server im Heimnetz konfiguriert werden. Gibt es diesen nicht, dann lässt man diese Seite einfach in der abgebildeten Voreinstellung. Man hat dann allerdings keine Möglichkeit, Sensorwerte, Wetterdaten oder Kraftstoffpreise anzuzeigen.

Ist ein MQTT-Server vorhanden, z.B. in Form des Web-Moduls, dann wird zunächst über die Checkbox die MQTT-Kommunikation aktiviert. Im nächsten Feld muss die IP-Adresse des MQTT-Servers angepasst werden. Das Feld für die Port-Einstellung kann normalerweise so bleiben. Falls der MQTT-Server mit Name und Passwort abgesichert ist, dann müssen diese Daten in die Felder für Username und Passwort eingetragen werden. Anderenfalls bleiben diese leer.

Die Matrixuhr kann nicht nur Daten vom MQTT-Server empfangen, es werden auch Daten an den Server gesendet. Es handelt sich dabei um Status-Informationen, die z.B. auf dem Web-Modul über Node-RED angezeigt werden können.

LWT Topic: LWT steht für „Last will and testament“ und ist eine spezielle MQTT-Funktion. Unter dem hier eingetragenen Topic wird eine Nachricht auf dem MQTT-Server hinterlegt, die im Falle einer Verbindungsunterbrechung zwischen Matrixuhr und MQTT-Server an die Abonnenten verschickt wird. Bei der Matrixuhr lautet diese Nachricht offline. Während des Verbindungsaufbaus zum MQTT-Server wird außerdem unter dem hier eingetragenen Topic die Nachricht online verschickt. Damit werden alle Abonnenten jederzeit über den Online-Status der Matrixuhr informiert: Verbindet sich die Uhr mit dem Server, wird online weitergegeben. Kommt es zur Trennung, greift der LWT-Mechanismus und es wird offline weitergegeben.

Uptime Topic: Über dieses Topic sendet die Matrixuhr einmal pro Minute die aktuelle Systemlaufzeit in Tagen mit 2 Nachkommastellen.

RSSI Topic: Über dieses Topic sendet die Matrixuhr einmal pro Minute (gleichzeitig mit der Systemlaufzeit) die Stärke des WLAN-Empfangssignals in dBm.

Werte-Gültigkeit (2-60 min): Der hier eingegebene Wert bestimmt, wie lange die über MQTT empfangenen Sensorwerte [A] bis [H] gültig sind, die auf der Seite Konfiguration / Sensoren definiert wurden. Werden von einem Sensor keine Daten mehr empfangen, dann wird dessen Wert nach Ablauf der Gültigkeit nicht mehr angezeigt. Für die Wetterdaten und Kraftstoffpreise gilt übrigens eine fest eingestellte Gültigkeit von 60 Minuten.

Mit dem Button Einstellungen speichern werden die Eingaben im Dateisystem gespeichert. War die Aktion erfolgreich, dann erscheint neben dem Button ein  OK , außerdem der Hinweis auf den notwendigen Neustart. Im Fehlerfall, der hier auch durch eine fehlende oder falsche Eingabe ausgelöst werden kann, erscheint  Fehler . Nach dem Neustart baut die Matrixuhr automatisch eine Verbindung zum MQTT-Server auf, abonniert dann alle eingegebenen MQTT-Topics und sendet dann außerdem regelmäßig die Status-Informationen an den Server.

System-Einstellungen / Zeit

Web-Seite 9 Diese Seite ist für die richtige Zeiteinstellung der Matrixuhr wichtig. Die nebenstehende Voreinstellung ist für Deutschland optimiert. In die beiden Felder für den Server können beliebige andere NTP-Server eingetragen werden, wobei der Eintrag für den NTP-Server 2 weggelassen werden kann. Bei Verwendung einer FritzBox als Router im Heimnetz kann man auch deren IP-Adresse als NTP-Server eintragen. Die NTP-Abfrage erfolgt übrigens in einem fest eingestellten Intervall von 60 Minuten.

Zeitzonen-Einstellung: Hier lässt sich die Zeitzone für die Normalzeit, die Sommerzeit sowie die Zeitpunkte zum Wechsel zwischen Normal- und Sommerzeit in einer speziellen Form (Posix-Format) definieren. Die Einstellung auf dem Bild funktioniert in Deutschland und wahrscheinlich auch in allen angrenzenden Ländern. Hier ist eine aktuelle Übersicht mit den weltweiten Zeitzonen-Informationen zu finden.

Mit dem Button Einstellungen speichern werden die Eingaben im Dateisystem gespeichert. War die Aktion erfolgreich, dann erscheint neben dem Button ein  OK , außerdem der Hinweis auf den notwendigen Neustart. Im Fehlerfall, der hier auch durch eine fehlende oder falsche Eingabe ausgelöst werden kann, erscheint  Fehler .

System-Einstellungen / Sicherheit

Web-Seite 10 Über diese Seite lässt sich ein Passwortschutz für den Web-Server der Matrixuhr einrichten. Dazu wird zunächst über die Checkbox die Schutzfunktion aktiviert. Anschließend können geeignete Daten in die beiden Felder für Username und Passwort eingegeben werden, wobei auch Umlaute und Sonderzeichen möglich sind.

Mit dem Button Einstellungen speichern werden die Eingaben im Dateisystem gespeichert. War die Aktion erfolgreich, dann erscheint neben dem Button ein  OK , anderenfalls  Fehler . An dieser Stelle ist kein Neustart notwendig, der Passwortschutz wird sofort wirksam.

Wartung / Datei-Manager

Web-Seite 11 Auf dieser Seite hat man die Möglichkeit, auf das Dateisystem der Matrixuhr-Mini zuzugreifen. Alle auf dem Bild gelisteten Dateien hat die Software der Matrixuhr beim Speichern von Einstellungen erstellt, sie enthalten somit alle Konfigurationsdaten der Matrixuhr. Jede Datei erscheint hier mit einer Nummer, dem Dateinamen, der Dateigröße in Bytes sowie der Zeit des letzten Schreibzugriffes. Alle Dateien können heruntergeladen, gelöscht oder durch Hochladen einer gleichnamigen Datei ersetzt werden.

Zum Download einer Datei wird zunächst deren Nummer in das Eingabefeld links neben dem Download-Button eingegeben und anschließend mit einem Klick auf Download die Übertragung gestartet. Der Browser sollte dann ohne weitere Rückfragen den Download durchführen, was übrigens nur wenige Millisekunden dauert. Eine Erfolgs- oder Fehlermeldung wird nicht ausgegeben.

Zum Löschen einer Datei wird ähnlich vorgegangen. Nach der Eingabe der Dateinummer wird auf den Button Löschen geklickt. Auch hier gibt es keine Meldung, allerdings wird die Dateiliste aktualisiert und hier fehlt dann die gelöschte Datei. Alle verbleibenden Dateien werden dabei neu nummeriert und das sollte man unbedingt beachten, wenn weitere Dateien gelöscht werden sollen.

Im unteren Bereich hat man über 2 Buttons die Möglichkeit, eine Datei in das Dateisystem der Matrixuhr hochzuladen. Der obere Button wird je nach Browser unterschiedlich benannt. Beim hier verwendeten Firefox-Browser heißt dieser Durchsuchen ..., Google Chrome und Microsoft Edge benennen diesen mit Datei auswählen. Die Funktion ist aber identisch und öffnet ein Dialog-Fenster, in dem die gewünschte Datei komfortabel ausgewählt werden kann. Über den Button Öffnen in diesem Fenster wird die gewählte Datei registriert und das Dialog-Fenster wieder geschlossen.

Neben dem Button Durchsuchen ... wird jetzt die soeben ausgewählte Datei angezeigt und ein Klick auf Upload startet die Übertragung zur Matrixuhr. Dieser Vorgang dauert wegen der relativ kleinen Dateien weniger als eine Sekunde und es erscheint anschließend der Hinweis auf einen notwendigen Neustart der Matrixuhr. Hochgeladene Dateien werden nicht ausgewertet, die enthaltenen Konfigurationsdaten werden deshalb erst nach einem Neustart wirksam. Es können aber mehrere Dateien nacheinander hochgeladen und dann mit einem einzigen Neustart aktiviert werden.

Die nachfolgende Tabelle listet alle Konfigurationsdateien der Matrixuhr-Mini in alphabetischer Reihenfolge auf und beschreibt deren Funktion:

DateinameSeiteFunktion
birthdays.txtKonfiguration / GeburtstageGeburtstagsdaten (Namen und Geburtsdaten)
datadisp.txtKonfiguration / DatenausgabeKonfiguration der Laufschrift-Ausgabe
display.txtKonfiguration / AnzeigeAnzeige-Einstellungen
http.txtSystem-Einstellungen / SicherheitPasswortschutz für den Web-Server
mqtt.txtSystem-Einstellungen / MQTTEinstellungen für die MQTT-Kommunikation
network.txtSystem-Einstellungen / NetzwerkNetzwerk-Einstellungen (statische IP-Adresse)
sensors.txtKonfiguration / SensorenSensor-Konfiguration (MQTT-Topics, Parameter)
time.txtSystem-Einstellungen / ZeitZeit-Einstellungen (NTP-Server, Zeitzone)
wifi.txtSystem-Einstellungen / WLANWLAN-Einstellungen (SSID, Passwort)

Wenn die Matrixuhr vollständig konfiguriert ist, sollte man alle Dateien downloaden und auf einem Backup-Medium sichern. Falls eine Neueinrichtung der Matrixuhr notwendig sein sollte, kann man auf diese Dateien zurückgreifen. Zwar ist zur Herstellung der WLAN-Verbindung der Anschluss an einen PC und ein Terminalprogramm wie bei der Inbetriebnahme erforderlich, alle anderen Einstellungen der Uhr können dann aber über den Upload der Konfigurationsdateien wiederhergestellt werden. Auch bei der Einrichtung einer weiteren Uhr können einzelne Dateien die Einrichtung vereinfachen. Übrigens, die Datei birthdays.txt ist kompatibel mit der gleichnamigen Datei der Matrixuhr-ESP32 und der Datei bdaymu der älteren Matrixuhr. Somit kann man relativ einfach alle Geburtstagsdaten von einer der großen Matrixuhren auf die Matrixuhr-Mini übertragen.

Wartung / Firmware-Update

Web-Seite 12 Auf dieser schlichten Seite hat man die Möglichkeit, die Firmware der Matrixuhr-Mini zu ersetzen. Als Firmware wird hier die kompilierte Software bezeichnet, die alle Funktionen der Uhr steuert. Die neue Firmware wird dabei einfach über WLAN in den Flash-Speicher des ESP8266 übertragen. Man nennt dieses Verfahren auch OTA (Over the air). Alle Einstellungen der Matrixuhr bleiben dabei übrigens erhalten.

Vor einem Update sollte man zunächst die Firmware-Datei bereitlegen. Diese findet man im Paket matrixmini-firmware-v100.zip als Datei firmware.bin mit einer Größe von ungefähr 440 kB. Das Firmware-Update funktioniert ähnlich wie der weiter oben beschriebene Upload im Datei-Manager. Über den oberen Button Durchsuchen ... (der auf anderen Browsern mit Datei auswählen bezeichnet ist) wird ein Dialog-Fenster geöffnet, in dem die Firmware-Datei ausgewählt werden kann. Über den Button Öffnen in diesem Dialog-Fenster wird die gewählte Firmware-Datei registriert und das Fenster wieder geschlossen.

Neben dem Button Durchsuchen ... wird jetzt die soeben ausgewählte Firmware-Datei angezeigt und ein Klick auf Update startet die Übertragung zur Matrixuhr. Dieser Vorgang dauert normalerweise weniger als 10 Sekunden, kann aber bei schlechter WLAN-Verbindung durchaus auch mehr Zeit in Anspruch nehmen. Auf der Web-Seite sieht man leider keine Informationen während der Übertragung (kommt vielleicht in einer späteren Version), allerdings erscheint auf der Uhr anstatt der Uhrzeit der folgende Hinweis:

Anzeige 8 Wurde die Datei erfolgreich übertragen, dann ändert sich der Text in:

Anzeige 9 Gleichzeitig erscheint im Browser neben dem Update-Button ein  OK  und darunter der Hinweis auf einen notwendigen Neustart der Uhr. Sollte der Upload fehlgeschlagen sein, dann erscheint auf der Uhr dieser Hinweis:

Anzeige 10 Auch im Browser wird dann neben dem Update-Button  Fehler  angezeigt. In einem solchen Fall empfehle ich, das Firmware-Update erneut zu versuchen.

Hinweis: Ein Firmware-Update ist grundsätzlich ein kritischer Vorgang. Wenn die neue Firmware fehlerhaft ist, dann kann es passieren, dass die Matrixuhr nicht mehr startet. Selbstverständlich teste ich neue Firmware auf meiner Uhr, bevor ich sie veröffentliche. Trotzdem kann ich nicht dafür garantieren, dass alles perfekt funktioniert. Vor einem Firmware-Update empfehle ich einen Blick auf die Seite Informationen / Status. Hier sollte das WLAN-Signal zwischen -75 und -40 dBm liegen und nur dann sollte ein Update gestartet werden.

Wartung / Neustart

Diese Menü-Funktion ruft zunächst die Status-Seite (Informationen / Status) auf, wartet noch eine Sekunde und führt dann ohne weitere Nachfragen einen Reboot der Systemsoftware aus. Dabei ist auf dem Matrix-Display der folgende Text zu sehen:

Anzeige 21 Bei einem normalen Neustart sieht man diesen Hinweis nur kurz. Nach einem OTA-Firmware-Update kann der Neustart bis zu 10 Sekunden dauern, weil die empfangenen Firmware-Daten innerhalb des Flash-Speichers umkopiert werden müssen.

Die Status-Seite bleibt dabei unverändert und muss nach dem Neustart manuell aktualisiert werden. Dabei sollte man noch etwa 10 Sekunden warten, damit die Uhr die WLAN-Verbindung wieder herstellen kann und erst dann auf Aktualisieren klicken. Falls vor dem Neustart Änderungen an der WLAN-Verbindung oder an den Netzwerk-Einstellungen vorgenommen wurden, muss die Seite über die neue IP-Adresse der Matrixuhr aufgerufen werden.

Symbol Weitere Informationen

In diesem Abschnitt folgen noch einige Informationen, die in den anderen Kapiteln noch nicht erwähnt worden sind.

• Grenzen der Laufschrift-Ausgabe

Um die Ressourcen des ESP8266 nicht zu überfordern, gibt es 2 Grenzen bei der Laufschrift: So ist das Eingabefeld im Menü Konfiguration / Datenausgabe auf 150 Zeichen begrenzt. Das klingt wenig, aber hier können schon recht viele Informationen untergebracht werden. Die andere Grenze bestimmt der Pixelpuffer von 1000 Bytes. Dieser ermöglicht eine Laufschrift mit einer Länge von ungefähr 200-250 Zeichen und auch das ist eine ganze Menge.

Normalerweise erfolgt die Ausgabe der Laufschrift sehr kontinuierlich. Es kann aber in bestimmten Fällen passieren, dass die Ausgabe ruckelt oder sogar etwas länger stehen bleibt. So führt der Zugriff auf das Dateisystem beim Speichern von Einstellungen oder die Nutzung des Datei-Managers zu kurzen Rucklern. Längere Hänger sind beim Verbindungsaufbau zum WLAN oder MQTT-Server möglich, aber das sollte die große Ausnahme sein und im normalen Betrieb nicht vorkommen.

• Sonderzeichen in Texten

Auf der Web-Seite können an vielen Stellen Texte eingegeben werden. Dabei gibt es folgendes zu beachten:

MQTT-TopicsHier sollten grundsätzlich keine Sonderzeichen verwendet werden.
GeburtstageDie Namen dürfen folgende Sonderzeichen enthalten: ÄÖÜäöüéß°€.
DatenausgabeHier dürfen folgende Sonderzeichen verwendet werden: ÄÖÜäöüéß°€.

• Verschiedene Symbole

Die Matrixuhr kann Symbole für die aktuelle Wetterlage [W], die Windrichtung [V] und noch einige andere anzeigen. Die meisten Symbole werden automatisch entsprechend der empfangenen Wetterinformationen ausgewählt, können aber auch für eigene Anzeigen verwendet werden. Die folgende Tabelle zeigt alle verfügbaren Symbole und deren Kodierung:

SymbolKodierungBedeutungBesonderheit
Symbol$0Windrichtung unbestimmt3 Pixel breit
Symbol$1Wind aus Richtung Süd5 Pixel breit
Symbol$2Wind aus Richtung Südwest7 Pixel breit
Symbol$3Wind aus Richtung West7 Pixel breit
Symbol$4Wind aus Richtung Nordwest7 Pixel breit
Symbol$5Wind aus Richtung Nord5 Pixel breit
Symbol$6Wind aus Richtung Nordost7 Pixel breit
Symbol$7Wind aus Richtung Ost7 Pixel breit
Symbol$8Wind aus Richtung Südost7 Pixel breit
Symbol$AKlarer Himmel (Tag-Symbol)8 Pixel breit
Symbol$BKlarer Himmel (Nacht-Symbol)7 Pixel breit
Symbol$CEin paar Wolken (Tag-Symbol)16 Pixel breit
Symbol$DEin paar Wolken (Nacht-Symbol)15 Pixel breit
Symbol$EMäßig bewölkt (Tag-Symbol)16 Pixel breit
Symbol$FMäßig bewölkt (Nacht-Symbol)16 Pixel breit
Symbol$GÜberwiegend bewölkt, bedeckt (Tag-Symbol)16 Pixel breit
Symbol$HÜberwiegend bewölkt, bedeckt (Nacht-Symbol)16 Pixel breit
Symbol$IRegenschauer (Tag-Symbol)15 Pixel breit
Symbol$JRegenschauer (Nacht-Symbol)15 Pixel breit
Symbol$KRegen (Tag-Symbol)16 Pixel breit
Symbol$LRegen (Nacht-Symbol)16 Pixel breit
Symbol$MGewitter (Tag-Symbol)14 Pixel breit
Symbol$NGewitter (Nacht-Symbol)14 Pixel breit
Symbol$OSchnee (Tag-Symbol)16 Pixel breit
Symbol$PSchnee (Nacht-Symbol)16 Pixel breit
Symbol$QNebel, Dunst, Trüb (Tag-Symbol)16 Pixel breit
Symbol$RNebel, Dunst, Trüb (Nacht-Symbol)16 Pixel breit
Symbol$SEmpfang eines fehlerhaften Symbol-Kodes16 Pixel breit
Symbol$TSonnen-Symbol8 Pixel breit, für die Anzeige der Sonnenzeiten
Symbol$USolar-Symbol11 Pixel breit, für die Anzeige von Solardaten
Symbol$VBatterie-Symbol4 Pixel breit, für die Anzeige von Batterie-Ladeständen
Symbol$WTankstellen-Symbol8 Pixel breit, für die Anzeige von Kraftstoffpreisen
Symbol$XWolken-Symbol16 Pixel breit, für die Anzeige der Wolkendichte
Symbol$YWind-Symbol13 Pixel breit, für die Anzeige von Windinformationen
Symbol$ZRegen-Symbol14 Pixel breit, für die Anzeige der Regenmenge

Symbol Sonstiges

Diese Uhr ist schon seit ungefähr 5 Jahren in meinem Haus in Betrieb und steht im Badezimmer auf dem Spiegelschrank. Ich habe sie damals nach einem Projekt im Internet aufgebaut, welches leider nicht mehr auffindbar ist. Die Software dafür war sehr einfach gestrickt und ermöglichte eine Anzeige von Stunden und Minuten und die Synchronisierung der Zeit über NTP. Für die Inbetriebnahme mussten die WLAN-Daten in den Quelltext eingegeben und dann das Projekt kompiliert werden. Das geht auf jeden Fall besser und da der verwendete ESP8266 genügend Ressourcen für weitere Funktionen hat, machte ich mich Anfang 2025 an die Arbeit und entwickelte eine eigene Software. Als Vorlage diente die Software der größeren Matrixuhr-ESP32, die man allerdings aus verschiedenen Gründen nicht 1:1 übernehmen konnte.

Zunächst musste das auf der Basis von 4 MAX7219 bestehende Display ans Laufen gebracht werden. Dafür gibt es zwar fertige Bibliotheken, aber da die Kommunikation sehr einfach ist, habe ich die Funktionen für die Ansteuerung selbst geschrieben. Dabei kam mir dann auch die Idee, dass man mehrere Matrix-Displays nicht unbedingt kaskadieren muss und diese auch parallel angesteuert werden können. Das vereinfacht einige Dinge wie z.B. die Initialisierung, die Helligkeitssteuerung und die Abschaltung für den Nachtbetrieb. Stichwort Helligkeitssteuerung: Diese bietet 16 Stufen und diese sind leider nicht gleichmäßig verteilt. Im niedrigen Wertebereich sind die Helligkeitsstufen recht groß, im oberen hingegen kaum noch wahrnehmbar. Ich habe deshalb versucht, die Helligkeit über PWM und die Shutdown-Funktion der MAX7219 zu realisieren. Das hat grundsätzlich funktioniert, führte jedoch wegen Überlagerungen mit der internen Multiplexfrequenz der MAX7219 zu einem Flimmern der Anzeigen und wurde deshalb wieder verworfen.

Viele Komponenten der Software wie z.B. Dateisystem, Web-Server, NTP- und MQTT-Client konnte ich von der Matrixuhr-ESP32 übernehmen, allerdings verhalten diese sich auf dem ESP8266 anders, so dass hier einige Anpassungen notwendig waren. Da die Matrix-Displays wegen der geringeren Auflösung gegenüber der großen Matrixuhren nicht genug Platz für wechselnde Informationen bieten, kam nur eine Anzeige als Laufschrift in Frage. Dieser Teil musste komplett neu entwickelt werden. Zunächst war eine entsprechende Eingabemöglichkeit notwendig und diese muss regelmäßig gelesen und ausgewertet werden, damit sich die gewünschte Laufschrift ergibt. Die Ausgabe selbst war dann eher einfach, zumal es schon eine ähnliche Funktion in der Matrixuhr-ESP32 dafür gibt.

Übrigens, die Uhrenvariante mit 2 Display-Modulen gibt es nur als Testaufbau. Im praktischen Einsatz habe ich nur die in den Bildern gezeigte Version mit einem Display-Modul. Hier mache ich auch nur einen sehr sparsamen Gebrauch von der Informations-Laufschrift. Noch mal übrigens: Die Bilder mit den Anzeige-Beispielen und Symbolen wurden mit dem Programm LEDMatrixStudio erstellt.