Verwandeln Sie Ihre OBEGRÄNSAD LED-Wandleuchte in eine lebendige Zeichenfläche
Diese Software befindet sich in einem frühen Stadium und ist meine erste ihrer Art. Wenn Sie etwas zu verbessern haben, würde ich mich sehr über eine PR oder ein Problem freuen :)
Die Verwendung dieses Codes und dieser Anweisungen erfolgt auf eigene Gefahr! Das Gerät könnte beschädigt werden!
Sie können die Lampe mit einer mitgelieferten Web-GUI steuern. Sie können die IP über die serielle Ausgabe erhalten oder in Ihren Router-Einstellungen suchen.
Erstens. Diese Software wurde für das ESP32 Dev Board geschrieben, sollte aber auch mit jedem anderen Arduino-Board funktionieren. Sie müssen lediglich den WLAN-, OTA- und Webserver-bezogenen Code entfernen.
Der ESP32, den ich verwendet habe:
Verifiziert, dass es mit TTGO LoRa32 V2.1 (T3_V1.6.1) funktioniert. Hinweis: Bei ESP8266 funktioniert die Helligkeit pro Pixel nur, wenn Speicherung und globale Helligkeit (analogWrite) deaktiviert sind.
Es tut mir leid, das sagen zu müssen, aber Sie müssen die Rückseite Ihrer Lampe aufhebeln, da IKEA hier keine normalen Schrauben angebracht hat. Ich habe die Rückseite mit einem Schraubenzieher zwischen den Schrauben angehoben und mit einem zweiten Gegenstand aufgehebelt, man kann die Nieten aber auch aufbohren, um ein Zerbrechen der Rückwand zu vermeiden.
Nachdem Sie die Rückseite geöffnet haben, sehen Sie 4 identische Platten. Diese sind jeweils mit 64 Leds in 4 Feldern ausgestattet. Uns interessiert nur das niedrigste. Hier finden Sie am unteren Rand 6 Anschlüsse, an die wir unser Board anschließen. Oben ist ein Mikrocontroller. Sie müssen es entfernen, da es die Standardprogramme enthält.
Variablen können in include/constants.h
gefunden werden.
include/secrets.h
# pragma once
# define WIFI_HOSTNAME " "
# ifdef ESP8266
# define WIFI_SSID " "
# define WIFI_PASSWORD " "
# endif
# define OTA_USERNAME " "
# define OTA_PASSWORD " "
Legen Sie auch Benutzernamen und Passwort in upload.py
fest, wenn Sie OTA-Updates verwenden möchten.
Hinweis: Der WLAN-Manager funktioniert nur auf ESP32. Für ESP8266 müssen WIFI_SSID
und WIFI_PASSWORD
in secrets.h
angegeben werden.
Dieses Projekt verwendet den WiFiManager von tzapu. Nach dem Hochfahren versucht das Gerät, eine Verbindung zu bekannten Zugangspunkten herzustellen. Wenn kein bekannter Zugangspunkt verfügbar ist, erstellt das Gerät ein Netzwerk namens Ikea Display Setup WiFi
. Stellen Sie auf jedem Gerät eine Verbindung zu diesem Netzwerk her. Es öffnet sich ein Captive-Portal, das Sie durch den Konfigurationsprozess führt. Nach erfolgreicher Verbindung startet das Gerät neu und ist betriebsbereit.
Der Name des erstellten Netzwerks kann durch Ändern von WIFI_MANAGER_SSID
in include/constants.h
geändert werden.
Verbinden Sie sie auf diese Weise und denken Sie daran, sie entsprechend Ihrem Board in include/constants.h
festzulegen.
LCD | ESP32 | TTGO LoRa32 | NodeMCUv2 | Lolin D32 (Pro) |
---|---|---|---|---|
GND | GND | GND | GND | GND |
VCC | 5V | 5V | Fahrgestellnummer | USB |
DE (PIN_ENABLE) | GPIO26 | IO22 | GPIO16 D0 | GPIO26 |
IN (PIN_DATA) | GPIO27 | IO23 | GPIO13 D7 | GPIO27 |
CLK (PIN_CLOCK) | GPIO14 | IO02 | GPIO14 D5 | GPIO14 |
CLA (PIN_LATCH) | GPIO12 | IO15 | GPIO0 D3 | GPIO12 |
KNOPF an einem Ende | GPIO16 | IO21 | GPIO2 D4 | GPIO25 |
KNOPF am anderen Ende | GND | GND | GND | GND |
Vielen Dank an RBEGamer, der in dieser Ausgabe zeigt, wie man die Original-Tastenverkabelung verwendet. Mit dieser Lösung benötigen Sie die Lötstellen „KNOPF an einem Ende“ und „KNOPF am anderen Ende“ aus der obigen Tabelle nicht.
src
enthält den Arduino-Code.
platformio.ini
auskommentieren, wenn Sie möchten. Ersetzen Sie die IP durch die IP Ihres Geräts. frontend
enthält den Webcode.
npm i
aus.env
Datei festnpm run dev
npm run build
. Dieser Befehl erstellt die webgui.cpp
für Sie. Erstellen Sie ein Frontend mit Docker
docker compose run node
aus Plugins/MyPlugin.h
# pragma once
# include " PluginManager.h "
class MyPlugin : public Plugin {
public:
MyPlugin ();
~MyPlugin () override ;
void setup () override ;
void loop () override ;
const char * getName () const override ;
void teardown () override ; // optional
void websocketHook (DynamicJsonDocument &request) override ; // optional
};
Plugins/MyPlugin.cpp
# include " plugins/MyPlugin.h "
MyPlugin::MyPlugin () {
// Constructor logic, if needed
}
void MyPlugin::setup () {
// Setup logic for your plugin
}
void MyPlugin::loop () {
// Loop logic for your plugin
}
const char * MyPlugin::getName () const {
return " MyPlugin " ; // name in GUI
}
void MyPlugin::teardown () {
// code if plugin gets deactivated
}
void MyPlugin::websocketHook (DynamicJsonDocument &request) {
// handle websocket requests
}
main.cpp
hinzu. # include " plugins/MyPlugin.h "
pluginManager.addPlugin( new MyPlugin());
Über den Button oder über das Webinterface können Sie das Panel auf DDP umstellen. Dieses Protokoll verwendet UDP und lauscht auf Port 4048 .
Der LED-Display-Dienst bietet eine einfache, aber leistungsstarke externe Schnittstelle, die es Benutzern ermöglicht, Meldungen und Grafiken auf einem 16x16-LED-Display anzuzeigen. Auf diese Funktionalität kann über HTTP-Aufrufe an den Dienstendpunkt zugegriffen werden.
Um eine Meldung auf dem LED-Display anzuzeigen, können Benutzer eine HTTP-GET-Anfrage an den folgenden Endpunkt stellen:
http://your-server/api/message
text
(optional): Die Textnachricht, die auf dem LED-Display angezeigt werden soll.graph
(optional): Eine durch Kommas getrennte Liste von Ganzzahlen, die ein Diagramm darstellen. Die Werte sollten im Bereich von 0 bis 15 liegen und werden als Diagramm auf dem LED-Display angezeigt.miny
(optional): Skalierung für das untere Ende des Diagramms, standardmäßig 0maxy
(optional): Skalierung für das obere Ende des Diagramms, standardmäßig 15repeat
(optional): Die Häufigkeit, mit der die Nachricht wiederholt werden soll. Wenn nicht angegeben, ist der Standardwert 1. Setzen Sie diesen Wert auf -1, um eine unendliche Wiederholung zu erreichen. Während Meldungen zur Anzeige anstehen, blinkt eine Anzeige-LED in der oberen linken Ecke.id
(optional): Eine eindeutige Kennung für die Nachricht. Dies kann zum späteren Entfernen oder Ändern der Nachricht verwendet werden.delay
(optional): Die Anzahl der ms Verzögerung zwischen jeder Bildlaufbewegung. Der Standardwert ist 50 ms. GET http://your-server/api/message?text=Hello&graph=8,5,2,1,0,0,1,4,7,10,13,14,15,15,14,11&repeat=3&id=1&delay=60
In diesem Beispiel wird die Meldung „Hallo“ auf dem LED-Display mit einem entsprechenden Diagramm angezeigt, dreimal wiederholt, ihr die Kennung 1 zugewiesen und beim Scrollen 60 ms gewartet.
Um eine Nachricht aus der Anzeige zu entfernen, können Benutzer eine HTTP-GET-Anfrage an den folgenden Endpunkt stellen:
http://your-server/api/removemessage
id
(erforderlich): Die eindeutige Kennung der zu entfernenden Nachricht. GET http://your-server/api/removemessage?id=1
In diesem Beispiel wird die Nachricht mit der Kennung 1 aus der LED-Anzeige entfernt.
Um den aktuellen Status des Servers abzurufen.
GET http://your-server/api/status
Um die (festen) Metadaten zu erhalten, wie die Anzahl der Zeilen und Spalten und eine Liste der verfügbaren Plugins.
GET http://your-server/api/metadata
Um ein aktives Plugin anhand der ID festzulegen, stellen Sie eine HTTP-PATCH-Anfrage an den folgenden Endpunkt:
PATCH http://your-server/api/plugin
id
(erforderlich): Die ID des Plugins, das als aktiv festgelegt werden soll.200 OK
mit der Meldung „Plugin Set“.404 Not Found
mit der Meldung „Plugin nicht gefunden“. Um die Helligkeit der LED-Anzeige festzulegen, stellen Sie eine HTTP-GET-Anfrage an den folgenden Endpunkt:
PATCH http://your-server/api/brightness
value
(erforderlich): Der Helligkeitswert (0..255).200 OK
mit der Meldung „Ok“.404 Not Found
mit der Meldung „Ungültiger Helligkeitswert“. Um die aktuell angezeigten Daten als Byte-Array zu erhalten, stellt jedes Byte den Helligkeitswert dar. Beachten Sie, dass der globale Helligkeitswert NACH diesen Werten angewendet wird. Wenn Sie also die globale Helligkeit auf 16 einstellen, erhalten Sie auf diese Weise immer noch Werte von 255.
GET http://your-server/api/data