ESP32 ટ્યુટોરિયલ 50/55 - વિશ્વમાં ગમે ત્યાંથી RGB LED ને નિયંત્રિત કરો | SunFounder ની ESP32 કિટ
આ ટ્યુટોરિયલમાં, આપણે ESP32 માઇક્રોકંટ્રોલરનો ઉપયોગ કરીને Wi-Fi પર RGB LED નો રંગ કેવી રીતે નિયંત્રિત કરવો તે શીખીશું, જેમાં MQTT પ્રોટોકોલ અને Adafruit IO સેવાનો ઉપયોગ થાય છે. આ સેટઅપ તમને વિશ્વમાં ગમે ત્યાંથી RGB LED નો રંગ બદલવાની મંજૂરી આપે છે, જે IoT ટેકનોલોજીનો વ્યવહારુ ઉપયોગ પ્રદાન કરે છે. આપણે ઇચ્છિત રંગ પસંદ કરવા માટે સ્લાઇડર્સ અને કલર પિકરનો ઉપયોગ કેવી રીતે કરવો તે પણ શોધીશું.

ESP32 એક શક્તિશાળી માઇક્રોકંટ્રોલર છે જેમાં બિલ્ટ-ઇન Wi-Fi અને બ્લૂટૂથ ક્ષમતાઓ છે, જે તેને IoT પ્રોજેક્ટ્સ માટે આદર્શ બનાવે છે. આ બિલ્ડમાં, આપણે ESP32 સાથે RGB LED જોડીશું અને Adafruit દ્વારા પ્રદાન કરાયેલ MQTT બ્રોકર દ્વારા તેનો રંગ નિયંત્રિત કરીશું. ટ્યુટોરિયલ તમને હાર્ડવેર સેટઅપ, વાયરિંગ સૂચનાઓ અને બધું સરળતાથી કાર્ય કરવા માટે જરૂરી કોડ દ્વારા માર્ગદર્શન આપશે (વિડિઓમાં 00:00 પર).
હાર્ડવેર સમજાવ્યું
આ પ્રોજેક્ટ માટે, આપણે ઉપયોગ કરીશું તેવા મુખ્ય ઘટકો ESP32 માઇક્રોકંટ્રોલર અને RGB LED છે. ESP32 Wi-Fi નેટવર્ક્સ સાથે જોડાવા સક્ષમ છે, જે તેને Adafruit IO સેવા સાથે વાતચીત કરવાની મંજૂરી આપે છે. RGB LED માં ત્રણ અલગ અલગ LED (લાલ, લીલો અને વાદળી) હોય છે જેને મિશ્રિત કરીને વિવિધ પ્રકારના રંગો બનાવી શકાય છે.
RGB LED સામાન્ય એનોડ અથવા સામાન્ય કેથોડ સિદ્ધાંત પર કાર્ય કરે છે, જેનો અર્થ છે કે વ્યક્તિગત LED ના એનોડ (પોઝિટિવ) અથવા કેથોડ (નેગેટિવ) તેમને કાર્ય કરવા માટે યોગ્ય રીતે જોડાયેલા હોવા જોઈએ. દરેક રંગને પલ્સ વિડ્થ મોડ્યુલેશન (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) સાથે જોડો. અન્ય ત્રણ પિન લાલ, લીલા અને વાદળી LED ને અનુરૂપ છે. લાલ પિનને GPIO 27, લીલા પિનને GPIO 26 અને વાદળી પિનને GPIO 25 સાથે જોડો. આ દરેક જોડાણ LED માંથી વહેતા કરંટને મર્યાદિત કરવા માટે 220 ઓહ્મ રેઝિસ્ટર દ્વારા થવું જોઈએ.
આગળ, ESP32 ના ગ્રાઉન્ડ (GND) ને તમારા સર્કિટની ગ્રાઉન્ડ લાઇન સાથે જોડો. ખાતરી કરો કે વાયરિંગ સુરક્ષિત છે જેથી કોઈ તૂટક તૂટક જોડાણ ન થાય. જો સામાન્ય કેથોડ RGB LED નો ઉપયોગ કરી રહ્યા હોવ, તો સામાન્ય પિનને ગ્રાઉન્ડ સાથે જોડો અને વ્યક્તિગત રંગ પિનને રેઝિસ્ટર દ્વારા પોઝિટિવ સપ્લાય સાથે જોડો. સર્કિટને પાવર આપતા પહેલા બધા જોડાણો બે વાર તપાસો.
કોડ ઉદાહરણો અને વોકથ્રુ
Arduino કોડમાં, આપણે લાલ, લીલા અને વાદળી LED માટે પિન વ્યાખ્યાયિત કરીને શરૂ કરીએ છીએ જેમાં ઓળખકર્તાઓ redPin, greenPin અને bluePin નો ઉપયોગ થાય છે. વધુમાં, આપણે દરેક રંગ માટે PWM ચેનલો વ્યાખ્યાયિત કરીએ છીએ જેમાં redChannel, greenChannel અને blueChannel નો ઉપયોગ થાય છે. PWM આવર્તન 5000 Hz પર 8-બિટ રિઝોલ્યુશન સાથે સેટ છે.
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);
// WiFi સાથે જોડાઓ
WiFi.begin(WLAN_SSID, WLAN_PASS);
}
મુખ્ય લૂપ MQTT જોડાણ તપાસે છે અને આવતા સંદેશાઓ પર પ્રક્રિયા કરે છે. તે વર્તમાન RGB મૂલ્યોને સીરિયલ મોનિટર પર પણ છાપે છે. MQTT સબ્સ્ક્રિપ્શન્સ દ્વારા પ્રાપ્ત મૂલ્યોના આધારે LED નો રંગ અપડેટ થાય છે.
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
તમને જોઈતી વસ્તુઓ
-
AliExpressESP32-S3 N16R8 on AliExpresss.click.aliexpress.com
સંસાધનો અને સંદર્ભો
હજી સુધી કોઈ સંસાધનો નથી.
ફાઇલો📁
ડેટાશીટ (pdf)
-
ESP32 C3 Datasheet English
esp32-c3_datasheet_en[1].pdf0.86 MB