د ESP32 ټیوټوریل 50/55 - د نړۍ له هر ځای څخه د RGB LED کنټرول | د SunFounder د ESP32 کټ
په دې ټیوټوریل کې به موږ زده کړو چې څنګه د ESP32 مایکروکنټرولر په کارولو سره د RGB LED رنګ د Wi-Fi له لارې کنټرول کړو، د MQTT پروتوکول او Adafruit IO خدمت په کارولو سره. دا ترتیب تاسو ته اجازه درکوي چې د RGB LED رنګ د نړۍ له هر ځای څخه بدل کړئ، چې د IoT ټیکنالوژۍ عملي کارونې وړاندې کوي. موږ به دا هم وپلټو چې څنګه د سلایډرونو او رنګ غوره کونکي څخه کار واخلو ترڅو مطلوب رنګ غوره کړو.

ESP32 یو پیاوړی مایکروکنټرولر دی چې په جوړ شوي Wi-Fi او بلوتوت وړتیاوې لري، چې دا د IoT پروژو لپاره مثالی کوي. په دې جوړښت کې به موږ یو RGB LED له ESP32 سره وصل کړو او د هغې رنګ به د Adafruit لخوا چمتو شوي MQTT بروکر له لارې کنټرول کړو. ټیوټوریل به تاسو ته د هارډویر تنظیم، د تارونو لارښوونې، او هغه کوډ ته لارښوونه وکړي چې د هرڅه بې ساري کار کولو لپاره اړین دی (په ویډیو کې په 00:00 کې).
هارډویر تشریح شوی
د دې پروژې لپاره، لومړني اجزا چې موږ به یې وکاروو د ESP32 مایکروکنټرولر او RGB LED دي. ESP32 د Wi-Fi شبکو سره د نښلولو وړ دی، چې دا ته اجازه ورکوي چې د Adafruit IO خدمت سره اړیکه ونیسي. RGB LED درې انفرادي LEDs (سور، شین، او نیلي) لري چې د رنګونو پراخه لړۍ رامینځته کولو لپاره مخلوط کیدی شي.
RGB LED په عام انود یا عام کاتود اصولو کار کوي، چې معنی یې دا ده چې د انفرادي LEDs انود (مثبت) یا کاتود (منفي) باید په سمه توګه وصل شي ترڅو کار وکړي. هر رنګ د Pulse Width Modulation (PWM) په کارولو سره کنټرول کیدی شي، کوم چې د هر LED روښانتیا د دندې دورې په بدلولو سره تنظیموي.
د ډیټاشیټ تفصیلات
| جوړونکی | SunFounder |
|---|---|
| د برخې شمېره | RGB LED |
| فارورډ ولټاژ (VF) | 2.0–3.4 V |
| فارورډ جریان (IF) | 20 mA |
| د څوکې طول موج (nm) | سور: 620، شین: 525، نیلي: 465 |
| بسته بندي | معیاري 4-پن |
| یادښتونه / ډولونه | عام انود یا عام کاتود اختیارونه شتون لري |
- د هر LED رنګ لپاره د 220 اوم ریزسټرونه وکاروئ ترڅو جریان محدود کړئ.
- د عام انود یا کاتود تنظیم لپاره سم تارونه ډاډمن کړئ.
- د براون آوټ مخنیوي لپاره د ESP32 بریښنا رسول وګورئ.
- د نرم رنګ لیږدونو لپاره د PWM فریکونسي په حدودو کې وساتئ.
- د Adafruit IO خدمت سره د نښلولو لپاره د Wi-Fi اسناد سم دي ډاډمن کړئ.
د تارونو لارښوونې

د RGB LED له ESP32 سره د تار کولو لپاره، د RGB LED په پنونو پیژندلو سره پیل وکړئ. تر ټولو اوږد پن عام پن دی. د عام انود تنظیم لپاره، دا پن د مثبت ولټاژ رسولو (3.3V) سره وصل کړئ. نور درې پنونه د سور، شین، او نیلي LEDs سره مطابقت لري. سور پن له GPIO 27 سره، شین پن له GPIO 26 سره، او نیلي پن له GPIO 25 سره وصل کړئ. د دې هرې اړیکې باید د 220 اوم ریزسټر له لارې ترسره شي ترڅو د LEDs له لارې بهیدونکی جریان محدود کړي.
بیا، د ESP32 ځمکه (GND) د خپل سرکټ د ځمکې کرښې سره وصل کړئ. ډاډ ترلاسه کړئ چې تارونه خوندي دي ترڅو د وقفې اړیکو مخه ونیسي. که تاسو د عام کاتود RGB LED کاروئ، عام پن د ځمکې سره وصل کړئ او د انفرادي رنګ پنونه د ریزسټرونو له لارې مثبت رسولو سره وصل کړئ. د سرکټ بریښنا کولو دمخه ټولې اړیکې دوه ځله وګورئ.
د کوډ مثالونه او لارښوونه
د Arduino کوډ کې، موږ د سور، شین، او نیلي LEDs لپاره پنونه د redPin، greenPin، او bluePin پیژندونکو په کارولو سره تعریف کوو. سربیره پردې، موږ د هر رنګ لپاره د PWM چینلونه د redChannel، greenChannel، او blueChannel په کارولو سره تعریف کوو. د PWM فریکونسي د 8-bit ریزولوشن سره 5000 Hz ټاکل شوې ده.
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
const int redChannel = 0;
const int greenChannel = 1;
const int blueChannel = 2;
د setup() فنکشن کې، موږ د PWM چینلونه پیل کوو او اړونده پنونه ضمیمه کوو. موږ همدارنګه د تعریف شوي اسنادو په کارولو سره د Wi-Fi شبکې سره نښلوو او د Adafruit IO سره د اړیکو لپاره د MQTT کلاینټ تنظیم کوو.
void setup() {
ledcSetup(redChannel, freq, resolution);
ledcAttachPin(redPin, redChannel);
// Connect to WiFi
WiFi.begin(WLAN_SSID, WLAN_PASS);
}
اصلي لوپ د MQTT اړیکه ګوري او راتلونکي پیغامونه پروسس کوي. دا همدارنګه اوسني RGB ارزښتونه سیریل مانیټور ته چاپوي. د LED رنګ د MQTT ګډونونو له لارې ترلاسه شوي ارزښتونو پراساس تازه کیږي.
void loop() {
MQTT_connect();
mqtt.processPackets(500);
setColor();
}
د بشپړ کوډ په اړه د نورو تفصیلاتو لپاره، مهرباني وکړئ د مقالې لاندې بار شوي بشپړ کوډ ته مراجعه وکړئ.
مظاهره / څه تمه وکړو
کله چې هر څه تنظیم شي او کوډ اپلوډ شي، تاسو باید وګورئ چې RGB LED د Adafruit IO ډشبورډ له لارې شوي رنګ بدلونونو ته ځواب ورکوي. لکه څنګه چې تاسو د سور، شین او نیلي لپاره سلایډرونه تنظیموئ، LED باید د هغې مطابق خپل رنګ بدل کړي. که تاسو کومه ستونزه تجربه کړئ، ډاډ ترلاسه کړئ چې د Wi-Fi اړیکه باثباته ده او د MQTT موضوع نومونه د کوډ کې تعریف شوي سره سمون لري (په ویډیو کې په 17:30 کې).
عامې ستونزې عبارت دي له ناسم تارونه، ناسم موضوع نومونه، او د سم Wi-Fi اسنادو ټاکل هېرول. که LED روښانه نه شي، د ریزسټر اړیکې دوه ځله وګورئ او ډاډ ترلاسه کړئ چې ESP32 په سمه توګه بریښنا ترلاسه کوي.
د ویډیو وخت نښې
- 00:00 پیل
- 2:23 د پروژې پیژندنه
- 4:43 MQTT څه شی دی
- 7:55 د Adafruit IO تنظیم
- 14:09 د تارونو تشریح
- 16:07 د کوډ تشریح
- 27:03 د Arduino IDE کې د ESP32 بورډ او COM پورټ غوره کول
- 29:12 د پروژې ننداره
- 31:25 RGB LED څه شی دی؟
- 35:26 RGB رنګ
/***********************************************************************
This is Arduino sketch for ESP32 to control RGB LED using MQTT service of Adafruit
video instruction https://youtu.be/-9q1GfGsnr0
📚⬇️ Download and resource page https://robojax.com/RJT672
Written By Ahamd Shamshiri
on Feb 18, 2024
Adafruit MQTT Library ESP32 Adafruit IO SSL/TLS example
/// ref: https://www.electronicwings.com/esp32/esp32-mqtt-client
*/
// Define RGB LED pins
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
// Define PWM channels
const int redChannel = 0;
const int greenChannel = 1;
const int blueChannel = 2;
// Define PWM frequency and resolution
const int freq = 5000;
const int resolution = 8;
int colorR, colorG, colorB;
#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
/************************* WiFi Access Point *********************************/
#define WLAN_SSID "Book"
#define WLAN_PASS "888-888"
/************************* Adafruit.io Setup *********************************/
#define AIO_SERVER "io.adafruit.com"
// Using port 8883 for MQTTS
#define AIO_SERVERPORT 8883
// Adafruit IO Account Configuration
// (to obtain these values, visit https://io.adafruit.com and click on Active Key)
// #define AIO_USERNAME "YOUR_ADAFRUIT_IO_USERNAME"
// #define AIO_KEY "YOUR_ADAFRUIT_IO_KEY"
#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_NBQQ75Rn7liRNcRn5uGUBMsBYmjD"
/************ Global State (you don't need to change this!) ******************/
// WiFiFlientSecure for SSL/TLS support
WiFiClientSecure client;
// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
// io.adafruit.com root CA
const char* adafruitio_root_ca = \
"-----BEGIN CERTIFICATE-----\n"
"MIIEjTCCA3WgAwIBAgIQDQd4KhM/xvmlcpbhMf/ReTANBgkqhkiG9w0BAQsFADBh\n"
"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
"d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\n"
"MjAeFw0xNzExMDIxMjIzMzdaFw0yNzExMDIxMjIzMzdaMGAxCzAJBgNVBAYTAlVT\n"
"MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
"b20xHzAdBgNVBAMTFkdlb1RydXN0IFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3\n"
"DQEBAQUAA4IBDwAwggEKAoIBAQC+F+jsvikKy/65LWEx/TMkCDIuWegh1Ngwvm4Q\n"
"yISgP7oU5d79eoySG3vOhC3w/3jEMuipoH1fBtp7m0tTpsYbAhch4XA7rfuD6whU\n"
"gajeErLVxoiWMPkC/DnUvbgi74BJmdBiuGHQSd7LwsuXpTEGG9fYXcbTVN5SATYq\n"
"DfbexbYxTMwVJWoVb6lrBEgM3gBBqiiAiy800xu1Nq07JdCIQkBsNpFtZbIZhsDS\n"
"fzlGWP4wEmBQ3O67c+ZXkFr2DcrXBEtHam80Gp2SNhou2U5U7UesDL/xgLK6/0d7\n"
"6TnEVMSUVJkZ8VeZr+IUIlvoLrtjLbqugb0T3OYXW+CQU0kBAgMBAAGjggFAMIIB\n"
"PDAdBgNVHQ4EFgQUlE/UXYvkpOKmgP792PkA76O+AlcwHwYDVR0jBBgwFoAUTiJU\n"
"IBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG\n"
"AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB\n"
"BCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud\n"
"HwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds\n"
"b2JhbFJvb3RHMi5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEW\n"
"HGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwDQYJKoZIhvcNAQELBQADggEB\n"
"AIIcBDqC6cWpyGUSXAjjAcYwsK4iiGF7KweG97i1RJz1kwZhRoo6orU1JtBYnjzB\n"
"c4+/sXmnHJk3mlPyL1xuIAt9sMeC7+vreRIF5wFBC0MCN5sbHwhNN1JzKbifNeP5\n"
"ozpZdQFmkCo+neBiKR6HqIA+LMTMCMMuv2khGGuPHmtDze4GmEGZtYLyF8EQpa5Y\n"
"jPuV6k2Cr/N3XxFpT3hRpt/3usU/Zb9wfKPtWpoznZ4/44c1p9rzFcZYrWkj3A+7\n"
"TNBJE0GmP2fhXhP1D/XVfIW/h0yCJGEiV9Glm/uGOa3DXHlmbAcxSyCRraG+ZBkA\n"
"7h4SeM6Y8l/7MBRpPCz6l8Y=\n"
"-----END CERTIFICATE-----\n";
/****************************** Feeds ***************************************/
// Setup a feed called 'test' for publishing and 'test2' for subscription.
// Notice MQTT paths for AIO follow the form: <username>/feeds/<feedname>
Adafruit_MQTT_Subscribe COLOR_R = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/rgb-led-color.red");
Adafruit_MQTT_Subscribe COLOR_G = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/rgb-led-color.green");
Adafruit_MQTT_Subscribe COLOR_B = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/rgb-led-color.blue");
Adafruit_MQTT_Subscribe COLOR_RGB = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/color-picker");
/*************************** Sketch Code ************************************/
void setup() {
// Set up PWM channels
ledcSetup(redChannel, freq, resolution);
ledcSetup(greenChannel, freq, resolution);
ledcSetup(blueChannel, freq, resolution);
// Attach pins to corresponding PWM channels
ledcAttachPin(redPin, redChannel);
ledcAttachPin(greenPin, greenChannel);
ledcAttachPin(bluePin, blueChannel);
Serial.begin(115200);
delay(10);
Serial.println(F("Adafruit IO MQTTS (SSL/TLS) Example"));
// Connect to WiFi access point.
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(WLAN_SSID);
delay(1000);
WiFi.begin(WLAN_SSID, WLAN_PASS);
delay(2000);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Set Adafruit IO's root CA
client.setCACert(adafruitio_root_ca);
// register callback for feed
COLOR_R.setCallback(color_R_Callback);
// Setup MQTT subscription for time feed.
mqtt.subscribe(&COLOR_R);
// register callback for feed
COLOR_G.setCallback(color_G_Callback);
// Setup MQTT subscription for time feed.
mqtt.subscribe(&COLOR_G);
// register callback for feed
COLOR_B.setCallback(color_B_Callback);
// Setup MQTT subscription for time feed.
mqtt.subscribe(&COLOR_B);
// register callback for feed
COLOR_RGB.setCallback(color_RGB_Callback);
// Setup MQTT subscription for time feed.
mqtt.subscribe(&COLOR_RGB);
}
// uint32_t x=0;
void loop() {
// Ensure the connection to the MQTT server is alive (this will make the first
// connection and automatically reconnect when disconnected). See the MQTT_connect
// function definition further below.
MQTT_connect();
Serial.print("R: ");
Serial.print (colorR);
Serial.print(" G: ");
Serial.print (colorG);
Serial.print(" B: ");
Serial.println(colorB);
// wait 0.5 seconds for subscription messages
mqtt.processPackets(500);
setColor();
// wait a couple seconds to avoid rate limit
//delay(2000);
}
void color_R_Callback(char* message, uint16_t len) {
char messageBuffer[40];
//snprintf(messageBuffer, sizeof(messageBuffer), "Color status is :: %s, len :: %u", message, len);
//Serial.println(messageBuffer);
Serial.println(message);
String inString = message;//sotre the message to String
colorR = inString.toInt();//convert the message to Integer
if(colorR >255 || colorR < 0)
{
colorR = 0;
}
}
void color_G_Callback(char* message, uint16_t len) {
char messageBuffer[40];
//snprintf(messageBuffer, sizeof(messageBuffer), "Color status is :: %s, len :: %u", message, len);
//Serial.println(messageBuffer);
Serial.println(message);
String inString = message;//sotre the message to String
colorG = inString.toInt();//convert the message to Integer
if(colorG >255 || colorG < 0)
{
colorG = 0;
}
}
void color_B_Callback(char* message, uint16_t len) {
char messageBuffer[40];
//snprintf(messageBuffer, sizeof(messageBuffer), "Color status is :: %s, len :: %u", message, len);
//Serial.println(messageBuffer);
Serial.println(message);
String inString = message;//sotre the message to String
colorB = inString.toInt();//convert the message to Integer
if(colorB >255 || colorB < 0)
{
colorB = 0;
}
}
void color_RGB_Callback(char* message, uint16_t len) {
char messageBuffer[40];
//snprintf(messageBuffer, sizeof(messageBuffer), "Color status is :: %s, len :: %u", message, len);
//Serial.println(messageBuffer);
Serial.println(message);
String newColor = String( message);//
if(newColor.length() == 7)
{
String theColorR = newColor.substring(1, 3);//extract B2 from #B2a48d for example
String theColorG = newColor.substring(3, 5);//extract a4 from #B2a48d for example
String theColorB = newColor.substring(5, 7);//extract 8d from #B2a48d for example
colorR = StrToHex(theColorR.c_str());//convert String to HEX for R
colorG = StrToHex(theColorG.c_str());//convert String to HEX for G
colorB = StrToHex(theColorB.c_str());//convert String to HEX for B
}
}
//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 setColor() {
// For common-anode RGB LEDs, use 255 minus the color value
ledcWrite(redChannel, colorR);
ledcWrite(greenChannel, colorG);
ledcWrite(blueChannel, colorB);
}
// Function to connect and reconnect as necessary to the MQTT server.
// Should be called in the loop function and it will take care if connecting.
void MQTT_connect() {
int8_t ret;
// Stop if already connected.
if (mqtt.connected()) {
return;
}
Serial.print("Connecting to MQTT... ");
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000); // wait 5 seconds
retries--;
if (retries == 0) {
// basically die and wait for WDT to reset me
while (1)
;
}
}
Serial.println("MQTT Connected!");
}
Common Course Links
Common Course Files
هغه شیان چې تاسو ورته اړتیا لرئ
-
علی ایکسپریسESP32-S3 N16R8 on AliExpresss.click.aliexpress.com
سرچینې او حوالې
تر اوسه هیڅ سرچینې نشته.
فایلونه📁
ډیټاشیټ (pdf)
-
ESP32 C3 Datasheet English
esp32-c3_datasheet_en[1].pdf0.86 MB