د ESP32 ټیوټوریل 38/55 - د خپل ګرځنده تلیفون څخه د RGB LED کنټرول | د سن فاونډر ESP32 IoT زده کړې کټ
په دې ټیوټوریل کې، موږ به وپلټو چې څنګه د SunFounder ESP32 زده کړې کټ څخه د ESP32 ماډل په کارولو سره د RGB LED کنټرول کړو. ستاسو د ګرځنده وسیلې څخه د کمانډونو په لیږلو سره، تاسو کولی شئ د LED رنګ بدل کړئ یا په بشپړه توګه یې بند کړئ. دا پروژه د ESP32 وړتیاوې کاروي، د بې سیمه اړیکې او کنټرول لپاره د جوړ شوي وای-فای او بلوتوث ځانګړتیاوو څخه ګټه پورته کوي.

د RGB LED درې جلا LEDs لري: سور، شین، او نیلي، کوم چې د مختلفو رنګونو د جوړولو لپاره مخلوط کیدی شي. په دې پروژه کې، تاسو به زده کړئ چې څنګه د RGB LED په سمه توګه تارونه وتړئ او ESP32 پروګرام کړئ چې د بلوتوث کمانډونو ته ځواب ووایی. ټیوټوریل به تاسو ته د دې فعالیت د ترلاسه کولو لپاره اړین کوډ برخو ته هم لارښوونه وکړي (په ویډیو کې په 02:15).
هارډویر تشریح شوی
د دې پروژې لومړني اجزا د ESP32 مایکروکنټرولر او RGB LED شامل دي. ESP32 یو پیاوړی ماډل دی چې جوړ شوی وای-فای او بلوتوث لري، چې دا د IoT غوښتنلیکونو لپاره مثالی کوي. په دې پروژه کې، دا به د سرور په توګه عمل وکړي ترڅو د ګرځنده وسیلې څخه کمانډونه ترلاسه کړي او د RGB LED کنټرول کړي.
د RGB LED څلور پنونه لري: یو عام پن (یا انوډ یا کاتوډ) او درې پنونه د انفرادي رنګونو لپاره. عام پن یا د بریښنا سرچینې یا ځمکې سره وصل کیږي، پداسې حال کې چې نور درې پنونه د ریزسټرونو له لارې د ESP32 GPIO پنونو سره وصل کیږي ترڅو جریان محدود کړي او LEDs خوندي کړي. دا ترتیب د هر رنګ د روښانتیا دقیق کنټرول ته اجازه ورکوي، چې د رنګونو پراخه لړۍ رامینځته کوي.
ډیټاشیټ تفصیلات
| جوړونکی | SunFounder |
|---|---|
| د پرزې شمېره | RGB LED |
| د عام پن ډول | عام انوډ / عام کاتوډ |
| فارورډ ولټاژ (V) | 2.0 - 3.2 V |
| اعظمي فارورډ جریان (A) | 20 mA |
| عادي جریان (A) | 15 mA |
| د رنګ ریزولوشن | 8 بټ (0-255) |
| بسته بندي | Through-hole / SMD |
- د هر LED چینل له لارې د جریان محدودولو لپاره مناسب ریزسټر ارزښتونه (معمولا 220 اوم) ډاډمن کړئ.
- د تارونو له تړلو دمخه د عام پن ترتیب (انوډ یا کاتوډ) وګورئ.
- د هر LED ته د لیږل شوي سیګنال په تنظیمولو سره د ډیمینګ او رنګ مخلوط لپاره PWM وکاروئ.
- د شارټ سرکټونو څخه مخنیوي لپاره د تارونو په اړه محتاط اوسئ؛ یو په یو پن وصل کړئ.
- د سم تارونو تایید لپاره د تنظیم وروسته هر رنګ په جلا توګه وازموئ.
د تارونو تړلو لارښوونې

د RGB LED د ESP32 سره د تارونو د تړلو لپاره، لومړی RGB LED په بریډبورډ کې ځای په ځای کړئ. اوږد پن عام پن دی، کوم چې تاسو به یا مثبت ولټاژ (د عام انوډ لپاره) یا ځمکې (د عام کاتوډ لپاره) سره وصل کړئ. که تاسو عام انوډ کاروئ، اوږد پن د ESP32 په 3.3V پن سره وصل کړئ. د عام کاتوډ لپاره، دا د GND پن سره وصل کړئ.
بیا، درې 220 اوم ریزسټرونه واخلئ او د هر ریزسټر یو پای د LED اړوند RGB پنونو سره وصل کړئ. د ریزسټرونو نور پایونه د ESP32 GPIO پنونو سره وصل کړئ: د LED سور پن د GPIO 27 سره، شین پن د GPIO 26 سره، او نیلي پن د GPIO 25 سره وصل کړئ. په پای کې، ډاډ ترلاسه کړئ چې عام پن ستاسو د ترتیب (انوډ یا کاتوډ) پر بنسټ په سمه توګه وصل شوی دی.
د کوډ مثالونه او واک ترو
د دې پروژې کوډ د RGB LED سره وصل شوي پنونو په تعریف سره پیل کیږي. لاندې اقتباس ښیې چې پنونه څنګه اعلان شوي دي:
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
دلته، redPin، greenPin، او bluePin د RGB LED د هر رنګ چینل لپاره په ESP32 کې ځانګړي GPIO شمېرې ټاکل شوي دي.
په setup فنکشن کې، بلوتوث پیل شوی، او د 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);
}
دا کوډ سریال اړیکه پیل کوي او د بلوتوث فعالیت تنظیموي پداسې حال کې چې د RGB LED پنونه د کنټرول لپاره د PWM چینلونو سره نښلوي.
په پای کې، د لوپ فنکشن ترلاسه شوي بلوتوث پیغامونه ګوري او د LED رنګ په مطابق تنظیموي:
if (value == "red") {
setColor(255, 0, 0); // Red
Serial.println("red");
}
په دې برخه کې، که ترلاسه شوی ارزښت "red" وي، LED به د setColor فنکشن په کارولو سره په بشپړ سور روښانتیا وټاکل شي.
د کوډ د بشپړ پوهیدو لپاره، سپارښتنه کیږي چې د ویډیو ټیوټوریل وګورئ چیرې چې بشپړ کوډ د مقالې لاندې بار شوی دی.
ډیمونسټریشن / څه تمه وکړئ
یوځل چې هرڅه تارونه وتړل شي او کوډ اپلوډ شي، تاسو باید وکولی شئ د بلوتوث له لارې د خپل ګرځنده وسیلې څخه RGB LED کنټرول کړئ. د "red"، "green"، "blue" په څیر کمانډونو په لیږلو سره، تاسو به وګورئ چې LED په مطابق رنګونه بدلوي. که تاسو "LED_off" واستوئ، RGB LED به بند شي. ډاډ ترلاسه کړئ چې د هر ډول ډیبګینګ پیغامونو لپاره سریال مانیټر وګورئ ترڅو تایید کړئ چې کمانډونه په سمه توګه ترلاسه کیږي (په ویډیو کې په 10:45).
د ویډیو وخت نښې
- 00:00 پیل
- 1:59 RGB LED څه شی دی؟
- 6:01 د RGB رنګ تشریح شوی
- 10:01 د اسنادو پاڼه
- 11:19 د تارونو اړیکه تشریح شوې
- 13:34 د Arduino IDE کې د ESP32 بورډ او COM پورټ غوره کول
- 15:15 د Arduino کوډ
- 18:02 د خپل تلیفون په کارولو سره د RGB LED کنټرول څرګندونه
#include "BLEDevice.h"
#include "BLEServer.h"
#include "BLEUtils.h"
#include "BLE2902.h"
// Define RGB LED pins
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
// Define PWM frequency and resolution
const int freq = 5000;
const int resolution = 8;
// Define the Bluetooth device name
const char *bleName = "ESP32_Bluetooth";
// Define the received text and the time of the last message
String receivedText = "";
unsigned long lastMessageTime = 0;
// Define the UUIDs of the service and characteristics
#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"
// Define the Bluetooth characteristic
BLECharacteristic *pCharacteristic;
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);
}
void loop() {
// When the received text is not empty and the time since the last message is over 1 second
// Send a notification and print the received text
if (receivedText.length() > 0 && millis() - lastMessageTime > 1000) {
Serial.print("Received message: ");
Serial.println(receivedText);
pCharacteristic->setValue(receivedText.c_str());
pCharacteristic->notify();
receivedText = "";
}
// Read data from the serial port and send it to BLE characteristic
if (Serial.available() > 0) {
String str = Serial.readStringUntil('\n');
const char *newValue = str.c_str();
pCharacteristic->setValue(newValue);
pCharacteristic->notify();
}
}
// Define the BLE server callbacks
class MyServerCallbacks : public BLEServerCallbacks {
// Print the connection message when a client is connected
void onConnect(BLEServer *pServer) {
Serial.println("Connected");
}
// Print the disconnection message when a client is disconnected
void onDisconnect(BLEServer *pServer) {
Serial.println("Disconnected");
}
};
// Define the BLE characteristic callbacks
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); // turn the RGB LED off
Serial.println("RGB LED turned off");
} else if (value == "red") {
setColor(255, 0, 0); // Red
Serial.println("red");
}
else if (value == "green") {
setColor(0, 255, 0); // green
Serial.println("green");
}
else if (value == "blue") {
setColor(0, 0, 255); // blue
Serial.println("blue");
}
else if (value == "yellow") {
setColor(255, 150, 0); // yellow
Serial.println("yellow");
}
else if (value == "purple") {
setColor(80, 0, 80); // purple
Serial.println("purple");
}
}
};
// Initialize the Bluetooth BLE
void setupBLE() {
BLEDevice::init(bleName); // Initialize the BLE device
BLEServer *pServer = BLEDevice::createServer(); // Create the BLE server
// Print the error message if the BLE server creation fails
if (pServer == nullptr) {
Serial.println("Error creating BLE server");
return;
}
pServer->setCallbacks(new MyServerCallbacks()); // Set the BLE server callbacks
// Create the BLE service
BLEService *pService = pServer->createService(SERVICE_UUID);
// Print the error message if the BLE service creation fails
if (pService == nullptr) {
Serial.println("Error creating BLE service");
return;
}
// Create the BLE characteristic for sending notifications
pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY);
pCharacteristic->addDescriptor(new BLE2902()); // Add the descriptor
// Create the BLE characteristic for receiving data
BLECharacteristic *pCharacteristicRX = pService->createCharacteristic(CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE);
pCharacteristicRX->setCallbacks(new MyCharacteristicCallbacks()); // Set the BLE characteristic callbacks
pService->start(); // Start the BLE service
pServer->getAdvertising()->start(); // Start advertising
Serial.println("Waiting for a client connection..."); // Wait for a client connection
}
void setColor(int red, int green, int blue) {
// For common-anode RGB LEDs, use 255 minus the color value
ledcWrite(redPin, red);
ledcWrite(greenPin, green);
ledcWrite(bluePin, blue);
}
Common Course Links
Common Course Files
Resources & references
-
DocumentationESP32 Tutorial 38/55- SunFounder doc page for Bluetooth RGB LEDdocs.sunfounder.com
Files📁
No files available.