Eigene Funktionen hinzufügen - Aircoookie/WLED-wiki-DE GitHub Wiki
Diese Seite ist für diejenigen gedacht, die den WLED-Code ändern möchten, um ihre eigenen Funktionen hinzuzufügen.
Grundlagen
Die Programmierung erfolgt in der Arduino IDE. Es gibt eine spezielle Datei, wled06_usermod.ino
, um Ihren eigenen Code zu schreiben.
(Wenn Sie jedoch der Meinung sind, dass Ihr Code für viele Benutzer relevant sein könnte, können Sie ihn direkt codieren und eine Pull-Anfrage öffnen.)
Diese Datei hat drei leere Methoden:
userSetup ()
wird nach dem Laden der Einstellungen, aber vor dem Herstellen einer Verbindung zu WiFi aufgerufen. Verwenden Sie diese Option, um eigene Schnittstellen zu starten, wenn dies nicht von WLAN abhängt (IR, Sensoren, GPIOs, ...). Sie können es auch verwenden, um benutzerdefinierte Einstellungen zu laden oder eigene Serverseiten mit der Methodeserver.on ()
anzugeben.userConnected ()
wird aufgerufen, sobald WiFi verbunden ist. Verwenden Sie diese Option, um über WLAN eine Verbindung zu externen Servern oder Init-Schnittstellen herzustellen.userLoop ()
wird von der Hauptfunktionloop ()
aufgerufen.
WLED-Werte ändern
Wenn Sie wissen, was Sie tun, können Sie den Wert einer in wled00.ino
deklarierten globalen Variablen ändern.
Für grundlegende Farb- und Helligkeitsänderungen sind diese jedoch die wichtigsten:
Variablenname | Geben Sie | ein Zweck |
---|---|---|
bri | Byte (0-255) | Master-Helligkeit (0 ist ausgeschaltet, 255 ist maximal) |
col [0] | Byte (0-255) | Roter Farbwert |
col [1] | Byte (0-255) | Grüner Farbwert |
col [2] | Byte (0-255) | Blauer Farbwert |
col [3] | Byte (0-255) | Weißer Farbwert |
Nach dem Aktualisieren der Farbe müssen Sie die Methode colorUpdated (int)
aufrufen. Wenn Sie eine Benachrichtigung mit der neuen Farbe an andere ESPs senden möchten, verwenden Sie "colorUpdated (1)", andernfalls "colorUpdated (5)".
Zeitliche Koordinierung
Wenn Sie nur eine einfache Änderung wünschen, die ein Timing erfordert (z. B. das Senden einer Anfrage alle 2 Sekunden), verwenden Sie bitte niemals die Funktion delay ()
in Ihrer userLoop ()
! Es blockiert alles andere und WLED reagiert nicht mehr und die Effekte funktionieren nicht mehr! Versuchen Sie stattdessen Folgendes:
long lastTime = 0;
int delayMs = 2000; // Wir wollen alle 2 Sekunden etwas machen
void userLoop ()
{
if (millis () - lastTime> delayMs)
{
lastTime = millis ();
// mache alle 2 Sekunden etwas, was du machen willst
}}
}}
Interne Segment-API
Sie können Segmente aus Ihrem Code verwenden, um verschiedene Teile des Streifens auf verschiedene Farben oder Effekte einzustellen. Dies kann sehr nützlich sein für hochgradig angepasste Installationen, Uhren, ...
Verwenden Sie zum Festlegen eines Segments strip.setSegment (id, start, stop);
, wobei id die Segment-ID ist, start die erste LED des Segments und stop die LED nach der letzten im Segment ist.
Verwenden Sie zum Bearbeiten der Konfiguration eines Segments Folgendes:
WS2812FX :: Segment & seg = strip.getSegment (id);
// Farbe setzen (i = 0 ist primär, i = 1 sekundär i = 2 tertiär)
seg.colors [i] = ((myWhite << 24) | ((myRed & 0xFF) << 16) | ((myGreen & 0xFF) << 8) | ((myBlue & 0xFF)));
// Effektkonfiguration setzen
seg.mode = myFxI;
seg.speed = mySpeed;
seg.intensity = myIntensity;
seg.palette = myPaletteId;
Beachten Sie, dass dies ab 0.8.6 keine Schnittstellenaktualisierungen mehr verursacht. Dafür müssen Sie noch 'colorUpdated (1)' verwenden.
Benutzerdefinierte Effekte erstellen
Es ist möglich, eigene Effekte zu erstellen und diese der FX-Bibliothek hinzuzufügen.
Die relevanten Dateien dafür sind FX.cpp
und FX.h
.
Hier ist eine Schritt-für-Schritt-Anleitung, wie Sie Ihren Effekt erzielen können:
-
Schauen Sie sich einige der Effekte in
FX.cpp
an, um zu sehen, wie sie implementiert sind! -
TBD
Wenn Sie einen schönen Effekt programmiert haben, den Sie teilen möchten, senden Sie eine Pull-Anfrage!
Web-Benutzeroberfläche
Änderungen an der eingebetteten Webbenutzeroberfläche sind nicht bequem. Der Grund dafür ist, dass der HTML-Code komprimiert und dem Code als binäres Array in html_ui.h
hinzugefügt wird, um die Geschwindigkeit zu erhöhen und die Flash-Nutzung zu verringern.
Wenn Sie Änderungen an der Benutzeroberfläche testen möchten, ist es am einfachsten, mit der lokalen Datei / wled00 / data / index.htm
zu arbeiten. Sie müssen nur eine einzelne Zeile ändern, damit die lokale Dateischnittstelle zu einem ESP mit installiertem WLED wird. Vorschau
Veränderung
url = Befehl? '/ json / state': '/ json';
(0.9.1 Zeile 1048, Änderungen vorbehalten)
zu
url = Befehl? 'http: // [Ihre ESP-IP-Adresse] / json / state': 'http: // [Ihre ESP-IP-Adresse] / json';
Wichtig: Vergessen Sie nicht, es vor dem Komprimieren der UI-Datei wieder zu ändern! Andernfalls funktioniert es bei keiner anderen WLED-Installation mit einer anderen IP-Adresse.
Um Ihre Änderungen vom internen Webserver zu übernehmen, müssen Sie diese oder ähnliche Schritte ausführen, um die Datei index.html
zu komprimieren:
-
Gzip komprimiere die Datei. Ich verwende diesen Online-Konverter und verwende die Einstellung "Diese Datei komprimieren, ausgeben - gz"
-
Benennen Sie die Datei in "xxx.gz.png" um (ändern Sie den Dateityp in "Bild").
-
Konvertieren Sie es in ein Byte / Zeichen-Array im C-Stil. Ich verwende diesen Konverter, der für Bild-Sprites vorgesehen ist. Daher war der vorherige Schritt zum Ändern des Dateiformats erforderlich. Wählen Sie "Raw" als Farbformat.
-
Öffnen Sie die heruntergeladene .c-Datei in einem Texteditor, z. G. Editor ++. Wählen Sie den Inhalt des Arrays aus und ersetzen Sie den Inhalt des Arrays in
html_ui.h
durch diesen. -
Aktualisieren Sie PAGE_index_L auf die Binärgröße, die unten in der heruntergeladenen .c-Datei angegeben ist
-
WLED neu kompilieren und flashen!