Prof. J. Walter - Informationstechnik, Mikrocomputertechnik, Digitale Medien Konzeptentwicklung
Hochschule Karlsruhe Logo Energy Efficient Microcontroller
8x8-MQTT
Wintersemester 2020
Davin Farrell Lukito (75420)
Muhammad Abiyyu Mufti Hanif (67050)

Konzeptentwicklung


Ablauf der MQTT-Kommunikation
Das Konzept der MQTT-Kommunikation in diesem Projekt kann man ganz deutlich in der untenstehenden Abbildung darstellen:

Blockschaltbild
Abbildung: Skizze der Kommunikation zwischen Web-Applikation und 8x8LEDs über MQTT Protokoll

Das MQTT-Protokoll folgt den Regeln der Publish-Subscribe-Kommunikation. In diesem Protokoll gibt es zwei verschiedene Arten von Teilnehmern: Einen Broker, und “n” Clients, wobei die Clients als Publisher und Subscriber nicht direkt miteinander kommunizieren können, sondern zuerst Nachrichten “publishen” (veröffentlichen) und “subscriben” (abonnieren) müssen. Die Aufgabe des Brokers ist hier die Nachrichtenverwaltung und -verteilung.

In unserem Fall wird eine Lokales Broker in einem PC installiert. Darüber hinaus dienen die Web-Applikation und 16 ESP32 Microcontroller mit 8x8 LEDs als Client. Die beide Art von Client können in unserem Fall als Publisher und gleichzeitig als Subscriber arbeiten.
Zur Steuerung der 8x8 LEDs sind z.B. folgende Topics (Commands, Brighness, Text Generator, Tap To Light, und Lighshow) wichtig. Diese Topics werden von Web-Applikation veröffentlicht (publish) und dann von den ESP32 Microcontrollern abonniert (subscribe).
Außerdem wollen wir auch die Informationen (z.B. Batterie Zustand, Wert der LDR Sensoren und Adresse) von alle ESP32 Microcontroller in Web-Applikation zeigen. In diesem Fall werden die Topics (ESP Status) von ESP32 Microcontrollern veröffentlicht und von der Web-Applikation abonniert (subscribe).


Steuerung der 8x8 LEDs mit ESP32 über MQTT

Wie zuvor schon erwähnt, werden die 8x8 LEDs direkt mit einem ESP32-Mikrocontroller angesteuert. Dieser Mikrocontroller arbeitet vor allem wie ein Zustandsautomat. Er verarbeitet 4 Hauptzustände: Start, Setup, LED Routine und Deep Sleep.
LED Routine Zustand ist der Aktivzustand, der die 8x8 LED Beleuchtung direkt ansteuert. Dieser Zustand besteht aus 4 Subzustände, die in einer Endloseschleife ablaufen: Light Off, Text Generator, Tap To Light und Lightshow.

zustanddiagram
Abbildung: Vereinfachte Zustanddiagramm der 8x8LEDs im ESP32 Microcontroller

Mit Hilfe der von der Web-Applikation empfangenen Informationen mit den MQTT-Topics "Command" können diese Zustände verändert oder miteinander abgewechselt werden.

Darüber hinaus sendet die Webanwendung auch die Parameter für den aktiven Zustand (Text Generator, Tap To Light und Light Show) mit den entsprechenden MQTT Topics, so dass die 8x8LEDs in mehreren Varianten leuchten können.

Auswählen von spezifischem ESP Microcontroller

Da die Webanwendung und die 16 ESP32 nicht direkt miteinander kommunizieren, kann man nicht direkt eine Nachricht von der Web-Applikation senden, um einen bestimmten Mikrocontroller zu steuern. Wie bereits erklärt, abonnieren die 16 ESP32 die gleichen Topics, die von der Web-Applikation veröffentlicht werden. D.h. alle Nachrichten der Webanwendung werden an alle ESP32 weitergeleitet.

ESP32 Anordnung
Abbildung: Beispiel der Anordnung von 16 ESP32 mit 8x8-LEDs

Um trotzdem in der Lage zu sein, bestimmte ESP32 über die Webanwendung zu steuern, wird das Topics "ESP Select" verwendet.
In diesen Topics sendet die Webanwendung ein Array mit 16 booleschen Werten.

Example Array
Abbildung: Beispiel der Array mit boolschen Werten im Topic "ESP Select"

Jeder ESP32 vergleicht dann seine Position und den Wert in diesem Array. Wenn der ESP in dieser Position den Wert "true" hat, sollte die Information von der Web-Applikation ausgeführt werden. Andererseits, wenn der ESP in dieser Position den Wert "false" hat, wird die gesendete Nachricht ignoriert.

Anwendung der JSON-Format für MQTT-Message

Um die Informationen in jedem MQTT-Topic einfach und kompakt zusammenzufassen, wird hier das JSON-Format verwendet. Mit JSON kann man viele Informationen strukturiert verpacken und einfach wieder auspacken.
Als Beispiel sendet man für den Topic TapToLight folgende MQTT-Nachricht
Tap To Light
Dann ist klar, welche Zeile und Spalte mit welcher Farbe beleuchtet werden soll.

  Mit Unterstützung von Prof. J. Walter Wintersemester 2020