حوّل مصباح الحائط LED OBEGRÄNSAD إلى لوحة رسم حية
هذا البرنامج في مرحلة مبكرة وهو الأول من نوعه. إذا كان لديك أي شيء لتحسينه، سأكون سعيدًا جدًا بشأن العلاقات العامة أو مشكلة ما :)
استخدم هذا الرمز والتعليمات على مسؤوليتك الخاصة! قد يتعرض الجهاز للتلف!
يمكنك التحكم في المصباح باستخدام واجهة المستخدم الرسومية على الويب المرفقة. يمكنك الحصول على IP عبر الإخراج التسلسلي أو يمكنك البحث عنه في إعدادات جهاز التوجيه الخاص بك.
أولاً. تمت كتابة هذا البرنامج للوحة ESP32 Dev، ولكن يجب أن يعمل مع أي لوحة Arduino أخرى أيضًا. كل ما عليك فعله هو إزالة الرمز المرتبط بشبكة WiFi وOTA وخادم الويب.
ESP32 الذي استخدمته:
تم التحقق من أنه يعمل مع TTGO LoRa32 V2.1 (T3_V1.6.1). ملحوظة: يعمل سطوع esp8266 لكل بكسل فقط عند تعطيل التخزين والسطوع العام (الكتابة التناظرية).
يؤسفني أن أقول هذا، ولكن سيتعين عليك فتح الجزء الخلفي من المصباح الخاص بك، لأن ايكيا لم تقم بتركيب براغي عادية هنا. لقد رفعت الجزء الخلفي باستخدام مفك البراغي بين البراغي وفتحته بجسم ثانٍ، ولكن يمكنك أيضًا حفر المسامير لتجنب كسر اللوحة الخلفية.
بعد أن تفتح الجزء الخلفي، سترى 4 لوحات متطابقة. تم تجهيز كل منها بـ 64 مصباح LED في 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
. اتصل بهذه الشبكة على أي جهاز. ستظهر لك بوابة مقيدة وستأخذك خلال عملية التكوين. بعد نجاح الاتصال، سيتم إعادة تشغيل الجهاز وسيكون جاهزًا للعمل.
يمكن تغيير اسم الشبكة التي تم إنشاؤها عن طريق تعديل WIFI_MANAGER_SSID
في include/constants.h
.
قم بتوصيلها بهذه الطريقة وتذكر تعيينها في include/constants.h
وفقًا للوحة الخاصة بك.
شاشات الكريستال السائل | ESP32 | تي تي جو لورا32 | NodeMCUv2 | لولين D32 (برو) |
---|---|---|---|---|
أرض | أرض | أرض | أرض | أرض |
VCC | 5 فولت | 5 فولت | رقم VIN | USB |
EN (PIN_ENABLE) | GPIO26 | IO22 | GPIO16 D0 | GPIO26 |
في (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 |
زر الطرف الآخر | أرض | أرض | أرض | أرض |
شكرًا لـ RBEGamer الذي يوضح في هذه المشكلة كيفية استخدام أسلاك الزر الأصلية. مع هذا الحل لن تحتاج إلى لحام "BUTTON one end" و"BUTTON Other end" من الجدول أعلاه.
يحتوي src
على كود الاردوينو.
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
};
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
. # include " plugins/MyPlugin.h "
pluginManager.addPlugin( new MyPlugin());
يمكنك ضبط اللوحة على DDP باستخدام الزر أو عبر واجهة الويب. يستخدم هذا البروتوكول UDP ويستمع على المنفذ 4048 .
توفر خدمة شاشة LED واجهة خارجية بسيطة لكنها قوية تتيح للمستخدمين عرض الرسائل والرسوم البيانية على شاشة LED مقاس 16 × 16. يمكن الوصول إلى هذه الوظيفة من خلال مكالمات HTTP إلى نقطة نهاية الخدمة.
لعرض رسالة على شاشة LED، يمكن للمستخدمين تقديم طلب HTTP GET إلى نقطة النهاية التالية:
http://your-server/api/message
text
(اختياري): الرسالة النصية التي سيتم عرضها على شاشة LED.graph
(اختياري): قائمة مفصولة بفواصل من الأعداد الصحيحة التي تمثل رسمًا بيانيًا. يجب أن تتراوح القيم بين 0 و15 وسيتم عرضها كرسم بياني على شاشة LED.miny
(اختياري): تغيير الحجم للنهاية السفلية للرسم البياني، والقيمة الافتراضية هي 0maxy
(اختياري): تغيير حجم الطرف العلوي من الرسم البياني، القيمة الافتراضية هي 15repeat
(اختياري): عدد المرات التي يجب أن تتكرر فيها الرسالة. إذا لم يتم توفيرها، فالقيمة الافتراضية هي 1. قم بتعيين هذه القيمة إلى -1 للتكرار بلا حدود. أثناء انتظار الرسائل للعرض، سيومض مؤشر LED في الزاوية اليسرى العليا.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
سيعرض هذا المثال الرسالة "Hello" على شاشة 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
لتعيين مكون إضافي نشط بواسطة المعرف، قم بتقديم طلب HTTP PATCH إلى نقطة النهاية التالية:
PATCH http://your-server/api/plugin
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