Prof. J. Walter - Informationstechnik, Mikrocomputertechnik, Digitale Medien Ausgewählte Lösung
Hochschule Karlsruhe Logo Fach Energieeffiziente Mikrocontroller
8x8-Seq
Wintersemester 2020
Jakob Mattes
Niclas Huber

Ausgewählte Lösung

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



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