آموزش ESP32 38/55 - کنترل LED RGB از طریق گوشی موبایل شما | کیت یادگیری اینترنت اشیاء ESP32 سانفاندر
در این آموزش، ما به بررسی نحوه کنترل یک LED RGB با استفاده از ماجیول ESP32 از کیت آموزشی SunFounder ESP32 خواهیم پرداخت. با ارسال دستورات از دستگاه موبایل خود، میتوانید رنگ LED را تغییر دهید یا آن را کاملاً خاموش کنید. این پروژه از قابلیتهای ESP32 بهره میبرد و از ویژگیهای داخلی Wi-Fi و Bluetooth برای اتصال و کنترل بیوقفه استفاده میکند.

دیود نوری RGB شامل سه دیود مجزای نوری است: قرمز، سبز و آبی، که میتوان آنها را مخلوط کرد تا رنگهای مختلفی بهوجود آید. در این پروژه، شما یاد خواهید گرفت که چگونه دیود نوری RGB را بهطور صحیح سیمکشی کنید و ESP32 را برنامهریزی کنید تا به دستورات بلوتوث پاسخ دهد. این آموزش همچنین شما را در کدهای لازم برای دستیابی به این عملکرد راهنمایی خواهد کرد (در ویدیو در :15).
تجزیه و تحلیل سختافزار
اجزای اصلی این پروژه شامل میکروکنترلر ESP32 و LED RGB است. ESP32 یک ماجیول قدرتمند با Wi-Fi و بلوتوث داخلی است که آن را برای برنامههای IoT ایدهآل میسازد. در این پروژه، به عنوان یک سرور عمل میکند تا دستورات را از یک دستگاه موبایل دریافت کرده و LED RGB را به طور مناسب کنترل کند.
LED RGB دارای چهار پایه است: یک پایه مشترک (یا آند یا کاتد) و سه پایه برای رنگهای فردی. پایه مشترک به منبع تغذیه یا زمین متصل میشود، در حالی که سه پایه دیگر به پایههای GPIO ESP32 از طریق مقاومتها متصل میشوند تا جریان را محدود کرده و از LEDها محافظت کنند. این تنظیمات امکان کنترل دقیق روشنایی هر رنگ را فراهم میکند و دامنه وسیعی از رنگها را ایجاد میکند.
جزئیات ورقه داده
| تولیدکننده | سان فاندئر |
|---|---|
| شماره قطعه | دیود ساطعکننده نور RGB |
| نوع میخ معمولی | الکترود مشترک / کاتد مشترک |
| ولتاژ پیش رونده (V) | ۲.۰ - ۳.۲ ولت |
| جریان پیشرو حداکثر (آمپر) | ۲۰ میلی آمپر |
| جریان معمولی (آمپر) | ۱۵ میلی آمپر |
| رزولوشن رنگ | 8 بیت (0-255) |
| پکage | پراز سوراخ / SMD |
- مطمئن شوید که مقادیر مناسب مقاومت (معمولاً 220 اهم) برای محدود کردن جریان از طریق هر کانال LED استفاده میشود.
- پیکربندی پایههای مشترک (آند یا کاتد) را قبل از سیمکشی بررسی کنید.
- از PWM برای کم نور کردن و مخلوط کردن رنگ با تنظیم سیگنالی که به هر LED ارسال میشود، استفاده کنید.
- با احتیاط سیمکشی کنید تا از اتصال کوتاه جلوگیری شود؛ هر بار یک پایه را متصل کنید.
- هر رنگ را به صورت جداگانه پس از راهاندازی آزمایش کنید تا از صحت سیمکشی اطمینان حاصل شود.
دستورالعملهای سیمکشی

برای اتصال LED RGB به ESP32، ابتدا LED RGB را روی یک بستر نان قرار دهید. پایه بلندتر پایه مشترک است که شما آن را به ولتاژ مثبت (برای آند مشترک) یا زمین (برای کاتد مشترک) متصل خواهید کرد. اگر از آند مشترک استفاده میکنید، پایه بلند را به پایه 3.3V روی ESP32 متصل کنید. برای کاتد مشترک، آن را به پایه GND متصل کنید.
در مرحله بعد، سه مقاومت ۲۲۰ اهمی بردارید و یک سر هر مقاومت را به پایههای RGB مربوطه LED متصل کنید. سر دیگر مقاومتها را به پایههای GPIO ESP32 متصل کنید: پایه قرمز LED را به GPIO ۲۷، پایه سبز را به GPIO ۲۶ و پایه آبی را به GPIO ۲۵ متصل کنید. در نهایت، اطمینان حاصل کنید که پایه مشترک به طور مناسب براساس پیکربندی شما (آند یا کاتد) متصل شده باشد.
مثالهای شِفر (کود) و راهنمایی
شِفر (کود) این پروژه با تعریف پایههای متصل به LED RGB آغاز میشود. گزیده زیر نشان میدهد که چگونه پایهها اعلام میشوند:
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;اینجا،redPin,greenPin, andbluePinبرای هر کانال رنگی LED RGB، شمارههای GPIO خاصی در ESP32 اختصاص داده شدهاند.
در تابع راهاندازی، بلوتوث راهاندازی میشود و تنظیمات 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 خاموش خواهد شد. مطمئن شوید که نمایشگر مسلسل را برای هرگونه پیام اشکالزدایی بررسی کنید تا تأیید کنید که دستورات به درستی دریافت میشوند (در ویدیو در ۱۰:۴۵).
زمانبندی ویدیو
- ۰۰:۰۰ شروع
- RGB LED چیست؟
- توضیح رنگ RGB 6:01
- صفحه مستندات 10:01
- 11:19 توضیحاتی درباره سیمکشی
- انتخاب بورد ESP32 و پورت COM در آردوینو IDE
- ۱۵:۱۵ شِفر (کود) آردوینو
- ۱۸:۰۲ демонстрация کنترل LED RGB با استفاده از تلفن همراه شما
#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;
// شناسههای یکتا (UUID) سرویس و ویژگیها را تعریف کنید
#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(); // بلوتوث BLE را راهاندازی کنید
ledcAttach(redPin, freq, resolution);
ledcAttach(greenPin, freq, resolution);
ledcAttach(bluePin, freq, resolution);
}
void loop() {
// زمانی که متن دریافتی خالی نباشد و زمان از آخرین پیام بیش از 1 ثانیه گذشته باشد
// یک اطلاعیه ارسال کرده و متن دریافتی را چاپ کنید
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");
}
}
};
// بلوتوث 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()); // ک callbacks سرور 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()); // بازنشانی callbacks ویژگی BLE
pService->start(); // خدمت BLE را شروع کنید
pServer->getAdvertising()->start(); // تبلیغات را آغاز کنید
Serial.println("Waiting for a client connection..."); // صبر کنید تا یک اتصال مشتری برقرار شود
}
void setColor(int red, int green, int blue) {
// برای LEDهای RGB کاتد مشترک، از ۲۵۵ منهای مقدار رنگ استفاده کنید.
ledcWrite(redPin, red);
ledcWrite(greenPin, green);
ledcWrite(bluePin, blue);
}
Common Course Links
Common Course Files
منابع و مراجع
-
مستنداتآموزش ESP32 38/55 - صفحه مستندات SunFounder برای LED RGB بلوتوثdocs.sunfounder.com
فایلها📁
هیچ فایلی موجود نیست.