OBEGRäNSAD LED 벽 램프를 라이브 드로잉 캔버스로 바꿔보세요
이 소프트웨어는 초기 단계에 있으며 최초의 소프트웨어입니다. 개선할 점이 있으면 PR이나 이슈에 대해 매우 기쁘게 생각합니다 :)
이 코드와 지침을 사용하는 데 따른 책임은 사용자 본인에게 있습니다! 기기가 손상될 수 있습니다!
제공된 웹 GUI를 사용하여 램프를 제어할 수 있습니다. 직렬 출력을 통해 IP를 얻거나 라우터 설정에서 검색할 수 있습니다.
가장 먼저. 이 소프트웨어는 ESP32 개발 보드용으로 작성되었지만 다른 Arduino 보드에서도 작동합니다. WiFi, OTA 및 웹 서버 관련 코드만 제거하면 됩니다.
내가 사용한 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
에 설정하는 것을 잊지 마세요.
LCD | ESP32 | TTGO LoRa32 | NodeMCUv2 | 로린 D32 (프로) |
---|---|---|---|---|
접지 | 접지 | 접지 | 접지 | 접지 |
VCC | 5V | 5V | 빈 | 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 |
BUTTON 한쪽 끝 | GPIO16 | IO21 | GPIO2 D4 | GPIO25 |
BUTTON 반대쪽 끝 | 접지 | 접지 | 접지 | 접지 |
이번 호에서 원래 버튼 배선을 사용하는 방법을 보여주신 RBEGamer에게 감사드립니다. 이 솔루션을 사용하면 위 표의 "BUTTON 한쪽 끝" 및 "BUTTON 반대쪽 끝" 납땜이 필요하지 않습니다.
src
Arduino 코드가 포함되어 있습니다.
platformio.ini
에서 OTA 줄의 주석 처리를 해제할 수 있습니다. IP를 장치 IP로 바꾸십시오. frontend
웹 코드가 포함되어 있습니다.
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());
버튼을 사용하거나 웹 인터페이스를 통해 패널을 DDP로 설정할 수 있습니다. 이 프로토콜은 UDP를 사용하고 포트 4048 에서 수신 대기합니다.
LED 디스플레이 서비스는 사용자가 16x16 LED 디스플레이에 메시지와 그래프를 표시할 수 있는 간단하면서도 강력한 외부 인터페이스를 제공합니다. 이 기능은 서비스 엔드포인트에 대한 HTTP 호출을 통해 액세스할 수 있습니다.
LED 디스플레이에 메시지를 표시하기 위해 사용자는 다음 엔드포인트에 HTTP GET 요청을 보낼 수 있습니다.
http://your-server/api/message
text
(선택 사항): LED 디스플레이에 표시될 텍스트 메시지입니다.graph
(선택 사항): 그래프를 나타내는 쉼표로 구분된 정수 목록입니다. 값은 0~15 범위에 있어야 하며 LED 디스플레이에 그래프로 시각화됩니다.miny
(선택 사항): 그래프의 하단에 대한 스케일링, 기본값은 0입니다.maxy
(선택 사항): 그래프 상단의 크기 조정, 기본값은 15repeat
(선택 사항): 메시지가 반복되어야 하는 횟수입니다. 제공되지 않은 경우 기본값은 1입니다. 무한 반복하려면 이 값을 -1로 설정합니다. 메시지가 표시 보류 중인 동안 왼쪽 상단에 있는 표시등이 깜박입니다.id
(선택 사항): 메시지의 고유 식별자입니다. 이는 나중에 메시지를 제거하거나 수정하는 데 사용될 수 있습니다.delay
(선택 사항): 모든 스크롤 이동 사이의 지연 시간(ms)입니다. 기본값은 50ms입니다. 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" 메시지를 표시하고 이를 세 번 반복한 다음 식별자 1을 할당하고 스크롤하는 동안 60ms를 기다립니다.
디스플레이에서 메시지를 제거하려면 사용자는 다음 엔드포인트에 HTTP GET 요청을 하면 됩니다.
http://your-server/api/removemessage
id
(필수): 제거할 메시지의 고유 식별자입니다. GET http://your-server/api/removemessage?id=1
이 예에서는 LED 디스플레이에서 식별자 1이 포함된 메시지를 제거합니다.
서버의 현재 상태를 검색합니다.
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
.404 Not Found
. 현재 표시된 데이터를 바이트 배열로 가져오려면 각 바이트가 밝기 값을 나타냅니다. 전체 밝기 값은 이 값 이후에 적용되므로 전체 밝기를 16으로 설정해도 이 방법으로 여전히 255의 값을 얻게 됩니다.
GET http://your-server/api/data