เปลี่ยนโคมไฟติดผนัง LED OBEGRANSAD/โอเบกรานสาด ของคุณให้เป็นผืนผ้าใบวาดภาพที่มีชีวิตชีวา
ซอฟต์แวร์นี้ยังอยู่ในช่วงเริ่มต้นและเป็นซอฟต์แวร์ประเภทแรกของฉัน หากคุณมีอะไรที่ต้องปรับปรุง ฉันยินดีเป็นอย่างยิ่งเกี่ยวกับการประชาสัมพันธ์หรือปัญหา :)
ใช้รหัสนี้และคำแนะนำด้วยความเสี่ยงของคุณเอง! อุปกรณ์อาจเสียหายได้!
คุณสามารถควบคุมหลอดไฟได้ด้วยเว็บ GUI ที่ให้มา คุณสามารถรับ IP ผ่านทางเอาต์พุตแบบอนุกรมหรือค้นหาได้ในการตั้งค่าเราเตอร์ของคุณ
ก่อนอื่นเลย. ซอฟต์แวร์นี้เขียนขึ้นสำหรับบอร์ด ESP32 Dev แต่ควรใช้งานร่วมกับบอร์ด Arduino อื่นๆ ได้เช่นกัน คุณเพียงแค่ต้องลบรหัสที่เกี่ยวข้องกับ WiFi, OTA และเว็บเซิร์ฟเวอร์
ESP32 ที่ฉันใช้:
ตรวจสอบแล้วว่าทำงานร่วมกับ TTGO LoRa32 V2.1 (T3_V1.6.1) หมายเหตุ: ความสว่างต่อพิกเซลของ esp8266 ใช้งานได้เฉพาะเมื่อปิดใช้งานที่เก็บข้อมูลและความสว่างโดยรวม (analogWrite)
ฉันขอโทษที่ต้องพูดแบบนี้ แต่คุณจะต้องงัดเปิดด้านหลังโคมไฟของคุณ เนื่องจาก IKEA ไม่ได้ติดตั้งสกรูธรรมดาที่นี่ ฉันยกด้านหลังขึ้นด้วยไขควงระหว่างสกรูแล้วใช้วัตถุชิ้นที่สองแงะออก แต่คุณสามารถเจาะหมุดย้ำออกได้เพื่อไม่ให้แผงด้านหลังแตก
หลังจากเปิดด้านหลังออกมาจะพบแผ่นที่เหมือนกัน 4 แผ่น แต่ละชุดมีไฟ LED 64 ดวงใน 4 ช่อง เราสนใจแต่ตัวต่ำสุดเท่านั้น ที่นี่คุณจะพบตัวเชื่อมต่อ 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 " "
ตั้งชื่อผู้ใช้และรหัสผ่านภายใน upload.py
หากคุณต้องการใช้การอัปเดต OTA
หมายเหตุ: ตัวจัดการ WiFi ใช้งานได้กับ ESP32 เท่านั้น สำหรับ ESP8266 จำเป็นต้องระบุ WIFI_SSID
และ WIFI_PASSWORD
ใน secrets.h
โปรเจ็กต์นี้ใช้ WiFiManager ของ tzapu หลังจากบูตเครื่อง อุปกรณ์จะพยายามเชื่อมต่อกับจุดเข้าใช้งานที่รู้จัก หากไม่มีจุดเชื่อมต่อที่รู้จัก อุปกรณ์จะสร้างเครือข่ายชื่อ Ikea Display Setup WiFi
เชื่อมต่อกับเครือข่ายนี้บนอุปกรณ์ใดก็ได้ พอร์ทัลแบบ Captive จะปรากฏขึ้นและจะนำคุณเข้าสู่กระบวนการกำหนดค่า หลังจากการเชื่อมต่อสำเร็จ อุปกรณ์จะรีบูตและพร้อมใช้งาน
ชื่อของเครือข่ายที่สร้างขึ้นสามารถเปลี่ยนแปลงได้โดยการแก้ไข WIFI_MANAGER_SSID
ใน include/constants.h
เชื่อมต่อพวกมันแบบนี้และอย่าลืมตั้งค่าเป็น include/constants.h
ตามบอร์ดของคุณ
จอแอลซีดี | อีเอสพี32 | TTGO LoRa32 | NodeMCUv2 | โลลิน D32 (โปร) |
---|---|---|---|---|
จีเอ็นดี | จีเอ็นดี | จีเอ็นดี | จีเอ็นดี | จีเอ็นดี |
วีซีซี | 5V | 5V | วิน | ยูเอสบี |
TH (PIN_ENABLE) | GPIO26 | ไอโอ22 | GPIO16 D0 | GPIO26 |
ใน (PIN_DATA) | GPIO27 | ไอโอ23 | GPIO13D7 | GPIO27 |
ซีแอลเค (PIN_CLOCK) | GPIO14 | ไอโอ02 | GPIO14 D5 | GPIO14 |
CLA (PIN_LATCH) | GPIO12 | ไอโอ15 | GPIO0 D3 | GPIO12 |
ปุ่มปลายด้านหนึ่ง | จีพีโอ16 | ไอโอ21 | GPIO2D4 | GPIO25 |
ปุ่มปลายอีกด้าน | จีเอ็นดี | จีเอ็นดี | จีเอ็นดี | จีเอ็นดี |
ขอขอบคุณ RBEGamer ที่แสดงวิธีใช้การเดินสายปุ่มแบบเดิมในฉบับนี้ ด้วยวิธีนี้ คุณจะไม่จำเป็นต้องบัดกรี "BUTTON ปลายด้านหนึ่ง" และ "BUTTON ปลายอีกด้าน" จากตารางด้านบน
src
มีโค้ด Arduino
platformio.ini
ได้หากต้องการ แทนที่ IP ด้วย IP อุปกรณ์ของคุณ frontend
มีรหัสเว็บ
npm i
.env
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 มีอินเทอร์เฟซภายนอกที่เรียบง่ายแต่ทรงพลัง ซึ่งช่วยให้ผู้ใช้สามารถแสดงข้อความและกราฟบนจอแสดงผล LED ขนาด 16x16 ฟังก์ชันนี้สามารถเข้าถึงได้ผ่านการเรียก HTTP ไปยังจุดสิ้นสุดของบริการ
หากต้องการแสดงข้อความบนจอแสดงผล LED ผู้ใช้สามารถสร้างคำขอ HTTP GET ไปยังจุดสิ้นสุดต่อไปนี้:
http://your-server/api/message
text
(ตัวเลือก): ข้อความตัวอักษรที่จะแสดงบนจอแสดงผล LEDgraph
(ไม่บังคับ): รายการจำนวนเต็มซึ่งคั่นด้วยเครื่องหมายจุลภาคซึ่งแสดงถึงกราฟ ค่าควรอยู่ในช่วง 0 ถึง 15 และจะแสดงเป็นกราฟบนจอแสดงผล LEDminy
(ไม่บังคับ): มาตราส่วนสำหรับส่วนล่างสุดของกราฟ มีค่าเริ่มต้นเป็น 0maxy
(ไม่บังคับ): มาตราส่วนสำหรับส่วนบนสุดของกราฟ มีค่าเริ่มต้นที่ 15repeat
(ไม่บังคับ): จำนวนครั้งที่ควรแสดงข้อความซ้ำ หากไม่ได้ระบุไว้ ค่าเริ่มต้นคือ 1 ตั้งค่านี้เป็น -1 เพื่อทำซ้ำไม่จำกัด ในขณะที่ข้อความกำลังรอการแสดง ไฟสัญญาณที่มุมซ้ายบนจะกะพริบid
(ไม่บังคับ): ตัวระบุเฉพาะสำหรับข้อความ สามารถใช้สำหรับการลบหรือแก้ไขข้อความในภายหลังdelay
(ไม่บังคับ): จำนวนมิลลิวินาทีของการหน่วงเวลาระหว่างการเลื่อนทุกครั้ง ค่าเริ่มต้นคือ 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
ตัวอย่างนี้จะแสดงข้อความ "สวัสดี" บนจอแสดงผล LED พร้อมกราฟที่เกี่ยวข้อง ทำซ้ำสามครั้ง และกำหนดตัวระบุ 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
พร้อมข้อความ "ตกลง"404 Not Found
พร้อมข้อความ "ค่าความสว่างไม่ถูกต้อง" หากต้องการรับข้อมูลที่แสดงปัจจุบันเป็นไบต์อาร์เรย์ แต่ละไบต์จะแสดงค่าความสว่าง โปรดทราบว่าค่าความสว่างโดยรวมจะถูกนำไปใช้หลังจากค่าเหล่านี้ ดังนั้นหากคุณตั้งค่าความสว่างโดยรวมเป็น 16 คุณจะยังคงได้รับค่า 255 ด้วยวิธีนี้
GET http://your-server/api/data