دليل ESP32 38/55 - التحكم في LED RGB من هاتفك المحمول | مجموعة تعليمية إنترنت الأشياء ESP32 من SunFounder
في هذا الدرس، سوف نستكشف كيفية التحكم في مصباح LED RGB باستخدام وحدة ESP32 من مجموعة تعلم ESP32 من SunFounder. من خلال إرسال أوامر من جهازك المحمول، يمكنك تغيير لون LED أو إيقاف تشغيله تمامًا. يستفيد هذا المشروع من إمكانيات ESP32، مستغلًا الميزات المدمجة للواي فاي وبلوتوث للتوصيل والتحكم السلس.

يتكون LED RGB من ثلاثة مصابيح LED فردية: أحمر وأخضر وأزرق، والتي يمكن مزجها لإنشاء ألوان متنوعة. في هذا المشروع، ستتعلم كيفية توصيل LED RGB بشكل صحيح وبرمجة ESP32 للرد على أوامر Bluetooth. ستوجهك الدروس أيضًا عبر مكونات الكود اللازمة لتحقيق هذه الوظيفة (في الفيديو في 02:15).
شرح الأجهزة
تشمل المكونات الأساسية لهذا المشروع وحدة تحكم ESP32 الدقيقة وLED RGB. تعتبر ESP32 وحدة قوية مزودة بتقنية الواي فاي والبلوتوث، مما يجعلها مثالية لتطبيقات إنترنت الأشياء. في هذا المشروع، ستعمل كخادم لاستقبال الأوامر من جهاز محمول والتحكم في LED RGB وفقًا لذلك.
يحتوي LED RGB على أربعة دبابيس: دبوس مشترك واحد (إما موجب أو سالب) وثلاثة دبابيس للألوان الفردية. يتصل الدبوس المشترك إما بمصدر الطاقة أو بالأرض، بينما تتصل الدبابيس الثلاثة الأخرى بدبابيس GPIO لوحدة ESP32 من خلال مقاومات لتقليل التيار وحماية مصابيح LED. يتيح هذا التكوين التحكم الدقيق في سطوع كل لون، مما يخلق مجموعة واسعة من الألوان.
تفاصيل ورقة البيانات
| المُصنِّع | صن فاوندر |
|---|---|
| رقم الجزء | LED RGB |
| نوع دبوس شائع | الأنود المشترك / الكاثود المشترك |
| جهد الأمام (فولت) | 2.0 - 3.2 ف |
| أقصى تيار أمامي (أمبير) | ٢٠ مللي أمبير |
| التيار النموذجي (أ) | 15 مللي أمبير |
| دقة اللون | 8 بت (0-255) |
| عبوة | ثقب كامل / SMT |
- تأكد من استخدام قيم مقاومات صحيحة (عادة 220 أوم) للحد من التيار عبر كل قناة LED.
- تحقق من تكوين الدبوس المشترك (الموجب أو السالب) قبل التوصيل.
- استخدم وحدة عرض النبض (PWM) للتعتيم ومزج الألوان عن طريق تعديل الإشارة المرسلة إلى كل مصباح LED.
- كن حذرًا في التوصيلات لتجنب الدوائر القصيرة؛ قم بتوصيل دبوس واحد في كل مرة.
- اختبر كل لون على حدة بعد الإعداد لتأكيد الأسلاك الصحيحة.
تعليمات التوصيل

لربط مصباح LED RGB بـ ESP32، ابدأ بوضع مصباح LED RGB على لوحة التجميع. الدبوس الأطول هو الدبوس المشترك، الذي ستقوم بتوصيله إما بالجهد الموجب (للمصباح المشترك الأنود) أو الأرض (للمصباح المشترك الكاثود). إذا كنت تستخدم الأنود المشترك، قم بتوصيل الدبوس الطويل بدبوس 3.3 فولت على ESP32. بالنسبة للكاثود المشترك، قم بتوصيله بدبوس GND.
بعد ذلك، خذ ثلاثة مقاومات بقيمة 220 أوم ووصّل طرفًا واحدًا من كل مقاومة إلى الدبابيس المعنية RGB من LED. وصّل الأطراف الأخرى من المقاومات إلى دبابيس GPIO في ESP32: اربط الطرف الأحمر من LED بالدبوس GPIO 27، والطرف الأخضر بالدبوس GPIO 26، والطرف الأزرق بالدبوس GPIO 25. أخيرًا، تأكد من توصيل الطرف المشترك بشكل مناسب بناءً على تكوينك (أنود أو كاثود).
أمثلة الكود والدليل التفاعلي
يبدأ الكود لهذا المشروع بتعريف الدبابيس المتصلة بشريحة LED RGB. يوضح الاقتباس التالي كيفية إعلان الدبابيس:
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;هنا،redPin,greenPin, وbluePinيتم تخصيص أرقام GPIO محددة على ESP32 لكل قناة لون من مصباح LED RGB.
في دالة الإعداد، يتم تهيئة البلوتوث وتطبيق إعدادات PWM. يوضح هذا المقتطف هذه التهيئة:
void setup() {
Serial.begin(115200); // Initialize the serial port
setupBLE(); // Initialize the Bluetooth BLE
ledcAttach(redPin, freq, resolution);
ledcAttach(greenPin, freq, resolution);
ledcAttach(bluePin, freq, resolution);
}يقوم هذا الكود بتهيئة الاتصال التسلسلي وإعداد وظيفة البلوتوث أثناء توصيل دبابيس LED RGB بقنوات PWM للتحكم.
أخيرًا، تتحقق دالة الحلقة من رسائل البلوتوث المستلمة وتعدل لون LED وفقًا لذلك:
if (value == "red") {
setColor(255, 0, 0); // Red
Serial.println("red");
}في هذا القسم، إذا كانت القيمة المستلمة هي "أحمر"، فسيتم ضبط المصباح LED على سطوع أحمر كامل باستخدام الـsetColorدالة.
لفهم كامل للشيفرة، يُوصى بمشاهدة الدرس الفيديو حيث يتم تحميل الشيفرة الكاملة أسفل المقال.
عرض / ما يمكن توقعه
بمجرد توصيل كل شيء وتحميل الشيفرة، يجب أن تكون قادرًا على التحكم في LED RGB من جهازك المحمول عبر البلوتوث. من خلال إرسال أوامر مثل "أحمر"، "أخضر"، "أزرق"، إلخ، سترى LED يغير ألوانه وفقًا لذلك. إذا أرسلت "LED_off"، سيتم إيقاف LED RGB. تأكد من التحقق من شاشة المراقبة التسلسلية لأي رسائل تصحيح أخطاء للتأكيد على أن الأوامر تُستقبل بشكل صحيح (في الفيديو عند 10:45).
طوابع زمنية للفيديو
- 00:00 بداية
- ما هو LED RGB؟
- تفسير لون RGB 6:01
- 10:01 صفحة الوثائق
- 11:19 شرح التوصيلات
- اختيار لوحة ESP32 ومنفذ COM في Arduino IDE الساعة 13:34
- 15:15 كود أردوينو
- عرض التحكم في LED RGB باستخدام هاتفك الساعة 18:02
#include "BLEDevice.h"
#include "BLEServer.h"
#include "BLEUtils.h"
#include "BLE2902.h"
// حدد دبابيس LED RGB
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
// حدد تردد PWM والدقة
const int freq = 5000;
const int resolution = 8;
// حدد اسم جهاز البلوتوث
const char *bleName = "ESP32_Bluetooth";
// حدد النص المستلم ووقت آخر رسالة
String receivedText = "";
unsigned long lastMessageTime = 0;
// حدد UUIDs للخدمة والخصائص
#define SERVICE_UUID "8785d8b3-9d23-473b-aee5-3fabe2ba9583"
#define CHARACTERISTIC_UUID_RX "b2bcd13b-aab6-4660-92ae-40abf6941fce"
#define CHARACTERISTIC_UUID_TX "4219d86a-d701-4fd2-bd84-04db50f70fe2"
// حدد خاصية البلوتوث
BLECharacteristic *pCharacteristic;
void setup() {
Serial.begin(115200); // تهيئة منفذ السيريال
setupBLE(); // تهيئة Bluetooth BLE
ledcAttach(redPin, freq, resolution);
ledcAttach(greenPin, freq, resolution);
ledcAttach(bluePin, freq, resolution);
}
void loop() {
// عندما يكون النص المستلم غير فارغ ومرت أكثر من ثانية منذ آخر رسالة
// أرسل إشعارًا واطبع النص المستلم
if (receivedText.length() > 0 && millis() - lastMessageTime > 1000) {
Serial.print("Received message: ");
Serial.println(receivedText);
pCharacteristic->setValue(receivedText.c_str());
pCharacteristic->notify();
receivedText = "";
}
// قراءة البيانات من المنفذ التسلسلي وإرسالها إلى خاصية BLE
if (Serial.available() > 0) {
String str = Serial.readStringUntil('\n');
const char *newValue = str.c_str();
pCharacteristic->setValue(newValue);
pCharacteristic->notify();
}
}
// حدد استدعاءات خادم BLE
class MyServerCallbacks : public BLEServerCallbacks {
// اطبع رسالة الاتصال عندما يتصل عميل
void onConnect(BLEServer *pServer) {
Serial.println("Connected");
}
// اطبع رسالة الفصل عندما ينفصل العميل
void onDisconnect(BLEServer *pServer) {
Serial.println("Disconnected");
}
};
// حدد ردود الاتصال لخصائص BLE
class MyCharacteristicCallbacks : public BLECharacteristicCallbacks {
void onWrite(BLECharacteristic *pCharacteristic) {
std::string value = std::string(pCharacteristic->getValue().c_str());
if (value == "led_off") {
setColor(0, 0, 0); // قم بإيقاف تشغيل مصباح LED RGB
Serial.println("RGB LED turned off");
} else if (value == "red") {
setColor(255, 0, 0); // أحمر
Serial.println("red");
}
else if (value == "green") {
setColor(0, 255, 0); // أخضر
Serial.println("green");
}
else if (value == "blue") {
setColor(0, 0, 255); // أزرق
Serial.println("blue");
}
else if (value == "yellow") {
setColor(255, 150, 0); // أصفر
Serial.println("yellow");
}
else if (value == "purple") {
setColor(80, 0, 80); // أرجواني
Serial.println("purple");
}
}
};
// تهيئة Bluetooth BLE
void setupBLE() {
BLEDevice::init(bleName); // قم بتهيئة جهاز الـ BLE
BLEServer *pServer = BLEDevice::createServer(); // إنشاء خادم BLE
// اطبع رسالة الخطأ إذا فشل إنشاء خادم BLE
if (pServer == nullptr) {
Serial.println("Error creating BLE server");
return;
}
pServer->setCallbacks(new MyServerCallbacks()); // قم بضبط استدعاءات خادم BLE
// إنشاء خدمة BLE
BLEService *pService = pServer->createService(SERVICE_UUID);
// اطبع رسالة الخطأ إذا فشل إنشاء خدمة BLE
if (pService == nullptr) {
Serial.println("Error creating BLE service");
return;
}
// إنشاء خاصية BLE لإرسال الإشعارات
pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY);
pCharacteristic->addDescriptor(new BLE2902()); // أضف الوصف
// إنشاء خاصية BLE لاستقبال البيانات
BLECharacteristic *pCharacteristicRX = pService->createCharacteristic(CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE);
pCharacteristicRX->setCallbacks(new MyCharacteristicCallbacks()); // قم بتعيين ردود الاتصال لخصائص BLE
pService->start(); // ابدأ خدمة BLE
pServer->getAdvertising()->start(); // ابدأ الإعلان
Serial.println("Waiting for a client connection..."); // انتظر اتصال العميل
}
void setColor(int red, int green, int blue) {
// بالنسبة لمصابيح LED RGB ذات الأنود المشترك، استخدم 255 ناقص قيمة اللون
ledcWrite(redPin, red);
ledcWrite(greenPin, green);
ledcWrite(bluePin, blue);
}
Common Course Links
Common Course Files
الموارد والمراجع
-
توثيقدليل ESP32 38/55 - صفحة مستندات SunFounder لبلوتوث LED RGBdocs.sunfounder.com
ملفات📁
لا توجد ملفات متاحة.