كود البحث

درس ESP32 54/55 - تعيين لون شريط LED WS2812 عبر Wifi | مجموعة تعلم إنترنت الأشياء ESP32 من SunFounder

درس ESP32 54/55 - تعيين لون شريط LED WS2812 عبر Wifi | مجموعة تعلم إنترنت الأشياء ESP32 من SunFounder

في هذا الدرس، سنتعلم كيفية التحكم في لون شريط LED RGB WS2812 باستخدام متحكم ميكرو ESP32 عبر Wi-Fi. من خلال استخدام أداة اختيار الألوان، يمكنك اختيار ألوان مختلفة من جهازك المحمول أو المكتب وإرسال تلك المعلومات إلى شريط LED. يعرض هذا المشروع إمكانيات ESP32، مما يسمح بالتفاعل السلس مع إضاءة LED من خلال واجهة ويب.

ESP32-54-شاشة-الموبايل-رئيسية

يتوفر متحكم ESP32 على كل من Wi-Fi وBluetooth، مما يجعله خيارًا متعدد الاستخدامات لتطبيقات إنترنت الأشياء. في هذا المشروع، سنركز على وظيفة Wi-Fi للتحكم في شريط LED. سيتمكن المستخدمون من اختيار الألوان ديناميكيًا، مما يخلق تجربة بصرية مثيرة للاهتمام. لمزيد من الوضوح حول هذا المشروع، تأكد من مشاهدة الفيديو في (في الفيديو عند 00:00).

تم شرح الأجهزة

تشمل المكونات الأساسية لهذا المشروع المتحكم الدقيق ESP32 وشريط LED WS2812. الـ ESP32 هو متحكم دقيق قوي مزود بقدرات الواي فاي المدمجة، مما يتيح الاتصال والتحكم اللاسلكي.

يتكون شريط LED WS2812 من LEDs RGB قابلة للعناوين بشكل فردي، مما يتيح لك ضبط لون كل LED بشكل مستقل. تحتوي كل LED على دائرة تحكم و LED RGB داخل حزمة واحدة، مما يسهل توصيل والتحكم في عدة LEDs.

تفاصيل ورقة البيانات

الصانع وارلدسيمي
رقم الجزء WS2812B
جهد المنطق/المدخلات والمخرجات ٣.٥-٥.٣ ف
جهد الإمداد 5 فولت
تيار الخرج (لكل قناة) 20 مللي أمبير
التيار الذروي (لكل قناة) 60 مللي أمبير
توجيه تردد PWM ٤٠٠ هرتز
عتبات منطق الإدخال 0.3 × VDD (منخفض)، 0.7 × VDD (مرتفع)
فرق الجهد / Rدي إس (أون)/ تشبع 0.5 فولت
الحدود الحرارية -40 إلى +80 درجة مئوية
حزمة 5050 SMD
ملاحظات / متغيرات متوفر بأطوال وتكوينات مختلفة.

  • تأكد من توفير مصدر طاقة مناسب لتجنب تلف LEDs.
  • استخدم أرضية مشتركة بين ESP32 وشريط LED.
  • احتفظ بخطوط البيانات قصيرة لتجنب تدهور الإشارة.
  • consider adding a capacitor (1000 ميكروفاراد) عبر مزود الطاقة لتحقيق الاستقرار.
  • استخدم مقاومة (470 Ω) على خط البيانات للحفاظ على نزاهة الإشارة.

تعليمات التوصيل

ESP32-12-WS2812-wiring

لتوصيل ESP32 بشريط LED WS2812، قم بتوصيل المكونات على النحو التالي: أولاً، قم بتوصيل دبوس 5V بشريط LED بمخرج 5V من ESP32. بعد ذلك، قم بتوصيل دبوس الأرضي (GND) بشريط LED بدبوس GND على ESP32. أخيرًا، قم بتوصيل دبوس البيانات لشريط LED (الذي يحمل عادةً علامة DI أو Data In) بدبوس GPIO 13 على ESP32. تأكد من أن جميع التوصيلات آمنة لضمان الوظائف الصحيحة.

في الفيديو، تم الإشارة بشكلbriefly إلى طرق التوصيل البديلة، لكن الإعداد الموصوف هنا هو التكوين الموصى به لأفضل أداء (في الفيديو عند :00).

أمثلة الشيفرة وشرح الخطوات

يبدأ الكود بتضمين المكتبات اللازمة للتحكم بشريط LED WS2812 وإعداد خادم الويب. يتم تعريف دبابيس LED كـLED_PINويتم ضبط عدد المصابيح LED في الشريط بواسطةNUM_LEDS.

#define LED_PIN 13 // NeoPixel LED strip
#define NUM_LEDS 8 // Number of LEDs
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800); 

تقوم هذه الشفرة بتهيئة مكتبة NeoPixel وإعداد شريط LED على الدبوس المحدد.Adafruit_NeoPixelكائنstrip، هو ما ستستخدمه للتحكم في ألوان LED.

بعد ذلك، يقوم الكود بتهيئة واي فاي وإنشاء خادم ويب للتعامل مع الطلبات الواردة. يتم تعريف SSID وكلمة المرور للشبكة، مما يسمح لجهاز ESP32 بالاتصال بشبكة الواي فاي.

const char *ssid = "your_SSID";
const char *password = "your_PASSWORD";
WebServer server(80);

في هذا الاقتباس، استبدلyour_SSIDوyour_PASSWORDبمعلومات اعتماد Wi-Fi الخاصة بك. يتيح هذا الاتصال لجهاز ESP32 التواصل مع الأجهزة على نفس الشبكة، مما يسمح بالتحكم عن بُعد في شريط LED.

الوظيفة الرئيسية لتغيير لون LED هيsetColor()، الذي يقوم بالمرور عبر كل LED ويضبط لونه استنادًا إلى قيم RGB المحددة.

void setColor() {
  for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, valueR, valueG, valueB); // Set the color of the i-th LED
    strip.show(); // Update the LED strip with the new colors
    delay(10); // Wait for 10 milliseconds
  }
}

تضمن هذه الوظيفة تحديث كل LED في الشريط باللون المحدد. يتيح التأخير تغيير لون LEDs بسلاسة. عند تفاعلك مع واجهة الويب، سيتم استدعاء هذه الوظيفة لتعكس اختياراتك اللونية.

عرض / ماذا تتوقع

ESP32-54-شاشة-متحركة-1
ESP32-54-شاشة-متحركة-ت-2

عند اكتمال الإعداد، يجب أن تكون قادرًا على الوصول إلى واجهة الويب من خلال عنوان IP الخاص بـ ESP32. سترى مختار ألوان يتيح لك اختيار أي لون، والذي سيتم إرساله إلى شريط LED. إذا فقد الـ ESP32 اتصال Wi-Fi، ستومض الشريط بلون تحذيري، مما يشير إلى المشكلة (في الفيديو في الساعة 14:30).

تشمل الفخاخ الشائعة الأسلاك غير الصحيحة، والتي يمكن أن تؤدي إلى عدم إضاءة LED، أو استخدام تركيبات غير صحيحة لاسم الشبكة (SSID) وكلمة المرور التي تمنع ESP32 من الاتصال بالشبكة. تحقق دائمًا من اتصالاتك ورموزك السرية.

طوابع زمنية للفيديو

  • 00:00 بداية
  • :01 مقدمة للمشروع
  • 3:09 مستندات
  • 3:47 شرح لون RGB
  • ٧:٤٧ التوصيلات
  • 8:40 شرح كود Arduino لـ WS2812 مع WIFI
  • 19:35 اختيار لوحة ESP32 ومنفذ COM في Arduino IDE
  • :17 التحكم بشريط الإضاءة LED عبر الواي فاي عرض تجريبي

الصور

ESP32-12-WS2812-wiring
ESP32-12-WS2812-wiring
ESP32-54-movile-screen-1
ESP32-54-movile-screen-1
ESP32-54-movile-screen-t-2
ESP32-54-movile-screen-t-2
ESP32-54-movile-screen-main
ESP32-54-movile-screen-main
855-ESP32 Tutorial 54/55- Arduino code Set WS2812 LED Strip Color over Wifi
اللغة: C++
/*
 * تحكم في مصباح LED RGB عبر الواي فاي باستخدام ESP32
 * 
 * تعليمات الفيديو الكامل https://youtu.be/J_UFHk_T9aE
 * 📚⬇️ صفحة تحميل الموارد https://robojax.com/RJT687
 * كتبها أحمد شمشيري في 18 ديسمبر 2023
 * 
 * شاهد تعليمات الفيديو لهذا الفيديو:
 * 
 * لقد قمت بدمج مكتبة DHT من Adafruit مع ESP8266 WebServer كلا الرابطين 
 * مكتبة DHT من Adafruit على GitHub: https://github.com/adafruit/DHT-sensor-library 
 * و 
 * ESP8266 على GitHub : https://github.com/esp8266/Arduino
 * 
 * حقوق النشر (c) 2015، تقنيات ماجينكو
 * كل الحقوق محفوظة.
 * 
 * يسمح بإعادة التوزيع والاستخدام في الأشكال المصدرية والثنائية، مع أو بدون تعديل،
 * بشرط أن يتم استيفاء الشروط التالية:
 * 
 * يجب أن تحتفظ إعادة توزيع شفرة المصدر بإشعار حقوق النشر المذكور أعلاه، وهذه
 * القائمة من الشروط والتنبيه التالي.
 * 
 * يجب أن تعيد التوزيعات في الشكل الثنائي إنتاج إشعار حقوق النشر المذكور أعلاه، وهذه
 * القائمة من الشروط والتنبيه التالي في الوثائق و/أو
 * المواد الأخرى المقدمة مع التوزيع.
 * 
 * لا ينبغي استخدام اسم تقنيات ماجينكو ولا أسماء مساهميها
 * للترويج أو دعم المنتجات المشتقة من
 * هذا البرنامج دون إذن كتابي محدد مسبقًا.
 * 
 * يوفر هذا البرنامج من قبل حاملي حقوق النشر والمساهمين "كما هو" و
 * أي ضمانات صريحة أو ضمنية، بما في ذلك، على سبيل المثال لا الحصر، الضمانات الضمنية
 * للقابلية للسوق ومدى ملاءمتها لغرض معين تُنكر. في أي حال من الأحوال يجب أن يكون حامل حقوق النشر أو المساهمون مسؤولين عن
 * أي أضرار مباشرة أو غير مباشرة أو عرضية أو خاصة أو نموذجية أو تالية
 * (بما في ذلك، على سبيل المثال لا الحصر، الحصول على سلع أو خدمات بديلة؛
 * فقدان الاستخدام أو البيانات أو الأرباح؛ أو انقطاع الأعمال) كيفما كانت السبب وعلى
 * أي نظرية من المسؤولية، سواء في العقد أو المسؤولية الصارمة أو الفعل
 * (بما في ذلك الإهمال أو غير ذلك) الناشئة بأي شكل من الأشكال عن استخدام هذا
 * البرنامج، حتى لو تم الإخطار بإمكانية حدوث تلك الأضرار.
 */
#include <Adafruit_NeoPixel.h> // قم بتضمين مكتبة Adafruit NeoPixel

#define LED_PIN 13 // شريط LED نيون بكسل
#define NUM_LEDS 8 // عدد مصابيح LED
 // إنشاء نسخة من فئة Adafruit_NeoPixel
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);


 // اللون الأولي لشريط LED
int valueR = 178; // من 0 إلى 255 للون الأحمر
int valueG = 27; // من 0 إلى 255 للأخضر
int valueB = 84; // من 0 إلى 255 للون الأزرق

bool showSerialData = false;
String theColorR, theColorG, theColorB;
String theColor ="ff0000";

#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>

const char *ssid = "dars";
const char *password = "hhhhhhhhhhh";

WebServer server(80);

void showColorPicker() {
  String page = "<!DOCTYPE html>\n";
  page +="<html>\n";
  page +="<body>\n";
  page +="<div style=\"zoom: 300%;\">\n";
  page +="<h2>Robojax RGB Color picker</h2>\n";
  page +="<p id=\"result\"></p>\n";
  page +="<form action=\"/color\">\n";
  page +="  <label for=\"favcolor\">Select your favorite color:</label>\n";
  page +="  <input type=\"color\" id=\"favcolor\" name=\"favcolor\" value=\"#";
  page += theColor;
  page +="\"><br><br>\n";
  page +="   <input type=\"submit\" value=\"Set Color\" />\n";
  page +="</form> \n</div>\n";
  page +="</body>\n";
  page +="</html>\n";

  server.send(200,  "text/html", page);


}

 // from https://stackoverflow.com/questions/44683071/convert-string-as-hex-to-hexadecimal
uint64_t StrToHex(const char* str)
{
  return (uint64_t) strtoull(str, 0, 16);
}

void getColor(){

 // server.send(200, "text/plain", message);

  if(server.argName(0) == "favcolor")
  {
    String newColor = String(server.arg(0)); // احصل على وسيط GET 0 وقم بتحويله إلى سلسلة.
    theColor = newColor.substring(1); // قم بإزالة رمز # من بداية اللون مثل #B2a48d
    theColorR = newColor.substring(1, 3); // استخلص B2 من #B2a48d على سبيل المثال
    theColorG = newColor.substring(3, 5); // استخرج A4 من #B2a48d على سبيل المثال
    theColorB = newColor.substring(5, 7); // استخرج 8d من #B2a48d كمثال

    valueR = StrToHex(theColorR.c_str()); // تحويل السلسلة إلى هيكس لـ R
    valueG = StrToHex(theColorG.c_str()); // تحويل السلسلة إلى HEX لـ G
    valueB = StrToHex(theColorB.c_str()); // تحويل السلسلة إلى HEX لـ B
    if(showSerialData)
    {
      Serial.print("valueR: ");
      Serial.println(valueR);
      Serial.print("valueG: ");
      Serial.println(valueG);
      Serial.print("valueB: ");
      Serial.println(valueB );
    }

  }

  showColorPicker(); // تأكد من عرض أداة اختيار اللون
 // server.send(200, "text/plain", message);

}


void setColor()
{
  for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, valueR, valueG, valueB); // اضبط لون LED الرقم i إلى الأحمر
    strip.show(); // قم بتحديث شريط LED بالألوان الجديدة
    delay(10); // انتظر لمدة 100 ميلي ثانية
  }
}

void noConnection()
{
   for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, 255, 45, 0); // اضبط لون LED الرقم i إلى الأحمر
    strip.show(); // قم بتحديث شريط LED بالألوان الجديدة
    delay(50); // انتظر لمدة 100 ميلي ثانية
  }

  delay(200);
   for (int i = NUM_LEDS-1; i >=0; i--) {
    strip.setPixelColor(i, 0, 255, 180); // اضبط لون LED الرقم i إلى الأحمر
    strip.show(); // قم بتحديث شريط LED بالألوان الجديدة
    delay(50); // انتظر لمدة 100 ميلي ثانية
  }
}

void handleNotFound() {
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";

  for (uint8_t i = 0; i < server.args(); i++) {
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }

  server.send(404, "text/plain", message);

}

void setup_wifi() {
  delay(10);
 // نبدأ بالاتصال بشبكة واي فاي
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

 // انتظر الاتصال
  while (WiFi.status() != WL_CONNECTED) {
    noConnection();
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("Open: http: // ");
  Serial.print(WiFi.localIP());
  Serial.println(" to read temperature");

  if (MDNS.begin("robojaxRGB")) {
    Serial.println("MDNS responder started");
  }

}

void setup(void) {

  Serial.begin(115200);

  strip.begin(); // تهيئة شريط NeoPixel
  strip.show(); // تعيين اللون الأولي إلى الأسود

  setup_wifi();

  server.on("/", showColorPicker); // عرض الصفحة الرئيسية مع أداة اختيار الألوان
 // الخادم.on("/color", setColor);//يغيّر اللون على WS2812 RGB LED


  server.on("/color", HTTP_GET, getColor);



  server.on("/inline", []() {
    server.send(200, "text/plain", "this works as well");
  });
  server.onNotFound(handleNotFound);
  server.begin();
  Serial.println("HTTP server started");
}

void loop(void) {
 // روبوجَکس.كوم
    while (WiFi.status() != WL_CONNECTED) {
      setup_wifi();
    }

  server.handleClient();
 // showColorPicker();
  setColor();
  delay(300); // غير هذا إلى قيمة أكبر (1000 أو أكثر) إذا كنت لا تحتاج إلى القراءة بشكل متكرر.
 // كود Robojax.com لـ ESP32 و DHT11 و DHT22
}


الموارد والمراجع

لا توجد موارد حتى الآن.

ملفات📁

لا توجد ملفات متاحة.