Hier ist der Link zu unserem Abschlussvideo:
https://www.youtube.com/watch?v=x1Avcgo37bo
Bibliotheken
Die von uns verwendeten Bibliotehekn zum Ansteuern der LED-Matrizen
sind FastLED, Adafruit NeoMatrix und FastLED NeoMatrix, welcher
ein Mix aus beiden zuvor genannten Bibliotheken darstellt.
FastLED
FastLED ist eine Bibliothek zur einfachen und effizienten Steuerung
einer Vielzahl von LED-Chipsätzen, wie die von adafruit (Neopixel,
DotStar, LPD8806) und Sparkfun (WS2801). Zusätzlich zum Schreiben
auf die Leds enthält diese Bibliothek auch eine Reihe von Funktionen
für hochperformante 8-Bit-Mathematik zur Manipulation der RGB-Werte
sowie Low-Level-Klassen zur Abstrahierung des Zugriffs auf Pins und
SPI-Hardware.
Die Bibliothek wird in einem ersten Schritt
eingebunden. Danach muss die Anzahl an LEDs angegeben werden. Im
nächsten Schritt wird das Objekt leds initialisiert. Dieses muss
im setup mit dem benutzen Chipsatz der LED (NEOPIXEL) und dem
Ausgangspin am Microcontroller (6) eingerichtet werden.
Adafruit NeoMatrix
Die Adafruit NeoMatrix Bibliothek
ist eine auf die von Adafruit erhältichen Matrix LEDs ausgelegte
Bibliothek. Zusätzlich werden für den Betrieb noch die beiden
Bibliotheken Adafruit_NeoPixel und Adafruit_GFX benötigt.
Adafruit NeoMatrix baut auf Adafruit NeoPixel auf, um
zweidimensionale grafische Anzeigen mit NeoPixeln zu erstellen.
Das NeoMatrix Objekt wird wie folgt deklariert.
Hierbei sind die 5 und die 8, die
Zeilen und Spalten der verwendeten Matrix. Das dritte Argument
ist der Ausgangspin am Microcontroller
FastLED NeoMatrix
Die Bibliothek vereint die beiden
Bibliotheken Adafruit NeoMatrix und FastLED. Hierfür muss die
FastLED und die Adafruit_GFX Bibliothek eingebunden werden.
Weiterhin muss die FastLED NeoMatrix eingefügt werden. Danach kann
sowohl FastLED als auch NeoMatrix genutzt werden.
Wird
die zusätzliche FastLED NeoMatrix Bibliothek nicht eingebunden
entsteht ein Konflikt zwischen den beiden Objekten NeoMatrix und
FastLED, da beide die gleichen LEDs steuern möchten.
Funktionsablauf
1. Einlesen der MQTT-Topics
MQTT sendet die ausgewählten Informationen in der WebApp
mittels Topics an das ESP32. Am ESP werden die Information
ausgelesen und verarbeitet. Ein solches Topic ist beispielsweise
die ausgewählte Funktion (Lightshow, TapToLight, Generate Text).
Genauere Informationen zu den einzelnen Topics finden Sie im
Abschnitt
Softwaredokumentation und bei der Projektgruppe
Ansteuerung MQTT.
2.
Ansteuern der einzelen Funktionen
Die Information
über die gewünschte Funktion wird in Current state ausgelesen
und die jeweilige Funktion wird über einen switch case
gestartet.
3. Funktionen
Die programmierten Sequenzen
benötigen lediglich die Information, welche der 16 Sequenzen
abgespielt werden soll und in welcher Helligkeit. Diese
Parameter werden wieder über weitere Topics vom MQTT-Handler
geliefert.
3.1 Ansteuern der
LEDs
Für die Ansteuerung der Pixel liefern die
beiden genannten Bibliotheken einiges an Hilfestellung und
nützlichen Funktionen.
In folgendem Beispiel wird dem
NeoMatrix Objekt matrix das Pixel 0, 0 (Zeile = 1, Reihe = 1)
mit den RGB-Farben (0, 0, 255) versehen. Somit leuchtet das LED der
Zeile 1 und Reihe 1 mit der Farbe blau.
Das Äauivalent für die FastLED Biliothek ist wie folgt
aufgebaut.
Das erste Pixel des FastLED Objektes
leds wird mit blauer Farbe beleuchtet.
Somit können die LEDs angesteuert werden und der
Programmierer muss lediglich kreativ werden.
3.2 Tap-To-Light
Die Tap-To-Light Funktion
ermöglicht einzelne LEDs über die WebApp anzusteuern. Dabei wählt
der Benutzer das entsprechende LED und die gewünschte Farbe aus.
Dieses LED beginnt nun auf dem ausgewählten ESP an zu leuchten.
3.3Textgenerierung
Die Funktion Textgenerierung
erzeugt einen gewünschten Text auf der 8x8-Matrix. Dabei müssen vom
Benutzer die Inputparameter Text, Farbe und Geschwindigkeit
geliefert werden.
3.4 Lightshow
Die Lightshow besteht aus 16 vorgefertigten
Funktionen, welche vom Benutzer abgerufen werden können. Hierzu muss
lediglich die entsprechende Funktion und das ESP, auf welchem die
Lightshow abgespielt werden soll, ausgewählt werden. Eingestellt
kann bei den vorgefertigten Funktionen nur die Helligkeit.
3.5 Delay
Bei den Sequenzen selbst musste
zusätzlich darauf geachtet werden, dass nicht die herkömmliche
"delay(ms)" Funktion verwendet wird. Über den Delay
kann beispielweise eingestellt werden, in welcher Frequenz ein
LED blinkt. Dieser Arduino
eigene Delay wurde durch eine Eigenentwicklung ersetzt (Siehe
nächster Codeabschnitt). Beim
ersten durchlaufen der Funktion wird der Variable last die
aktuelle Zeit in Millisekunden zugewiesen. In der
If-Schleife wird die aktuelle Zeit mit der vergangenen Zeit
verglichen. Wenn diese Zeit, wie im Beispiel 150 ms zurückliegt,
wird der Code ausgeführt. Beim Beenden der Funktion wird der
Variable last, wieder die aktuelle Zeit zugeordnet.
Weiterhin besitzt jede Funktion einen übergeordneten
Delay. Dieser übergeordnete Delay ist für jedes ESP individuell
und wird von der WebApp definiert. Somit können Lightshows für
mehrere Matrizen entwickelt werden.
4. Senden der Daten an 8x8-Matrix
Die
aktuellen Daten werden durch die FastLED NeoMatrix Bibliothek an
die LED-Matrix versendet. Die Befehle sind wie folgt aufgebaut:
Zur Anpassung der aktuellen
Helligkeit der LEDs wird der folgende Befehl verwendet.
Betreut durch:
Gruppe - 8x8 App Sequenz Niclas Huber Jakob Mattes
|