OBEGRÄNSAD LED ウォール ランプをライブ ドローイング キャンバスに変えましょう
このソフトウェアは初期段階にあり、この種のソフトウェアは私にとって初めてのものです。改善すべき点があれば、PR または問題点をお知らせください。:)
このコードと手順は自己責任で使用してください。デバイスが損傷する可能性があります。
付属の Web GUI を使用してランプを制御できます。 IP はシリアル出力経由で取得することも、ルーターの設定で検索することもできます。
初めに。このソフトウェアは ESP32 開発ボード用に書かれていますが、他の Arduino ボードでも同様に動作するはずです。 WiFi、OTA、Web サーバー関連のコードを削除するだけです。
私が使用したESP32:
TTGO LoRa32 V2.1 (T3_V1.6.1) で動作することを確認しました。注: esp8266 では、ストレージとグローバル輝度 (analogWrite) が無効になっている場合にのみ、ピクセルごとの輝度が機能します。
申し訳ありませんが、IKEA はここに通常のネジを取り付けていないため、ランプの背面をこじ開ける必要があります。私はネジの間にドライバーを入れて背面を持ち上げ、別の物でこじ開けましたが、バックパネルの破損を避けるためにリベットをドリルで開けることもできます。
裏を開けると、同じプレートが4枚出てきます。これらにはそれぞれ 4 つのフィールドに 64 個の LED が装備されています。私たちは最も低いものだけに興味があります。ここの下端に 6 つのコネクタがあり、そこにボードを接続します。上はマイクロコントローラーです。標準プログラムが含まれているため、削除する必要があります。
変数はinclude/constants.h
内にあります。
include/secrets.h
を作成する# pragma once
# define WIFI_HOSTNAME " "
# ifdef ESP8266
# define WIFI_SSID " "
# define WIFI_PASSWORD " "
# endif
# define OTA_USERNAME " "
# define OTA_PASSWORD " "
OTA アップデートを使用する場合は、 upload.py
内にユーザー名とパスワードも設定します。
注: WiFi マネージャーは ESP32 でのみ動作します。 ESP8266 の場合、 WIFI_SSID
とWIFI_PASSWORD
secrets.h
で指定する必要があります。
このプロジェクトでは tzapu の WiFiManager を使用します。起動後、デバイスは既知のアクセス ポイントへの接続を試みます。利用可能な既知のアクセス ポイントがない場合、デバイスはIkea Display Setup WiFi
というネットワークを作成します。任意のデバイスでこのネットワークに接続します。キャプティブ ポータルがポップアップし、構成プロセスを案内します。接続が成功すると、デバイスが再起動し、使用できるようになります。
作成したネットワークの名前は、 include/constants.h
のWIFI_MANAGER_SSID
変更することで変更できます。
このように接続し、ボードに応じてinclude/constants.h
で忘れずに設定してください。
液晶 | ESP32 | TTGO LoRa32 | ノードMCUv2 | ロリン D32 (プロ) |
---|---|---|---|---|
GND | GND | GND | GND | GND |
VCC | 5V | 5V | VIN | USB |
EN (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 |
ボタンの一方の端 | GPIO16 | IO21 | GPIO2 D4 | GPIO25 |
ボタンのもう一方の端 | GND | GND | GND | GND |
この号でオリジナルのボタン配線の使用方法を紹介してくださった RBEGamer に感謝します。この解決策を使用すると、上の表の「ボタンの一方の端」と「ボタンのもう一方の端」のはんだ付けが必要なくなります。
src
Arduino コードが含まれています。
platformio.ini
内の OTA 行のコメントを解除できます。 IP をデバイスの IP に置き換えます。 frontend
Web コードが含まれています。
npm i
.env
ファイル内でデバイスの IP を設定します。npm run dev
でサーバーを起動しますnpm run build
でビルドします。このコマンドにより、 webgui.cpp
が作成されます。 Docker
使用してフロントエンドを構築する
docker compose run node
を実行します。 プラグイン/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
};
プラグイン/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
に追加します。 # include " plugins/MyPlugin.h "
pluginManager.addPlugin( new MyPlugin());
ボタンまたは Web インターフェイスを使用して、パネルを DDP に設定できます。このプロトコルはUDP を使用し、ポート4048で待機します。
LED ディスプレイ サービスは、ユーザーが 16x16 LED ディスプレイにメッセージやグラフを表示できるようにする、シンプルかつ強力な外部インターフェイスを提供します。この機能には、サービス エンドポイントへの HTTP 呼び出しを通じてアクセスできます。
LED ディスプレイにメッセージを表示するには、ユーザーは次のエンドポイントに HTTP GET リクエストを送信できます。
http://your-server/api/message
text
(オプション): LED ディスプレイに表示されるテキスト メッセージ。graph
(オプション): グラフを表す整数のカンマ区切りのリスト。値は 0 ~ 15 の範囲内である必要があり、LED ディスプレイにグラフとして表示されます。miny
(オプション): グラフの下端のスケーリング、デフォルトは 0maxy
(オプション): グラフの上端のスケーリング、デフォルトは 15repeat
(オプション): メッセージを繰り返す回数。指定しない場合、デフォルトは 1 です。無限に繰り返すには、この値を -1 に設定します。メッセージの表示が保留されている間は、左上隅にあるインジケーターが点滅します。id
(オプション): メッセージの一意の識別子。これは、後でメッセージを削除または変更するために使用できます。delay
(オプション): 各スクロール移動の間の遅延のミリ秒数。デフォルトは50ミリ秒です。 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
この例では、対応するグラフとともに LED ディスプレイにメッセージ「Hello」を表示し、これを 3 回繰り返し、識別子 1 を割り当て、スクロール中に 60 ミリ秒待機します。
メッセージを表示から削除するには、ユーザーは次のエンドポイントに HTTP GET リクエストを送信できます。
http://your-server/api/removemessage
id
(必須): 削除するメッセージの一意の識別子。 GET http://your-server/api/removemessage?id=1
この例では、識別子 1 のメッセージを LED ディスプレイから削除します。
サーバーの現在のステータスを取得します。
GET http://your-server/api/status
行数と列数、利用可能なプラグインのリストなどの (固定) メタデータを取得します。
GET http://your-server/api/metadata
ID によってアクティブなプラグインを設定するには、次のエンドポイントに対して HTTP PATCH リクエストを作成します。
PATCH http://your-server/api/plugin
id
(必須): アクティブとして設定するプラグインの ID。200 OK
で、「プラグイン セット」というメッセージが表示されます。404 Not Found
と「プラグインが見つかりません」というメッセージが表示されます。 LED ディスプレイの明るさを設定するには、次のエンドポイントに HTTP GET リクエストを送信します。
PATCH http://your-server/api/brightness
value
(必須): 明るさの値 (0..255)。200 OK
で「Ok」というメッセージが表示されます。404 Not Found
。「無効な明るさの値」というメッセージが表示されます。 現在表示されているデータをバイト配列として取得するには、各バイトが輝度値を表します。グローバル輝度値はこれらの値の後に適用されるため、グローバル輝度を 16 に設定した場合でも、この方法では引き続き 255 の値が得られることに注意してください。
GET http://your-server/api/data