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 Methode server.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 Hauptfunktion loop () 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:

  1. Schauen Sie sich einige der Effekte in FX.cpp an, um zu sehen, wie sie implementiert sind!

  2. 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!