Cashirka ESP32 50/55 - Xakamaynta LED RGB meel kasta oo adduunka ah | Qalabka ESP32 ee SunFounder
Cashigarkani, waxaan baran doonaa sida loo xakameeyo midabka LED-ga RGB iyadoo la isticmaalayo kontoroolka ESP32 ee Wi-Fi-ka, iyadoo la adeegsanayo borotokoolka MQTT iyo adeegga Adafruit IO. Qaabkan wuxuu kuu ogolaanayaa inaad ka beddesho midabka LED-ga RGB meel kasta oo adduunka ah, isagoo bixinaya codsi wax ku ool ah oo teknoolojiyadda IoT ah. Waxaan sidoo kale sahamin doonaa sida loo isticmaalo sliders-ka iyo midab-doorashada si loo doorto midabka la doonayo.

ESP32 waa kontorool yar oo xoog badan oo leh awoodo Wi-Fi iyo Bluetooth ku dhex jira, taasoo ka dhigaysa mid ku habboon mashruucyada IoT. Dhismahan, waxaan ku xidhi doonaa LED-ga RGB ee ESP32-ka oo waxaan ku xakameyn doonaa midabkiisa iyadoo loo marayo dhexdhexaadiyaha MQTT ee uu bixiyo Adafruit. Casharku wuxuu ku hagaynaa qalabaynta hardware-ka, tilmaamaha fiilooyinka, iyo koodhka lagama maarmaanka u ah si wax walba si habsami leh u shaqeeyaan (fiidiyowga 00:00).
Qalabka La Sharaxay
Mashruucan, qaybaha aasaasiga ah ee aan isticmaali doonaa waa kontoroolka ESP32 iyo LED-ga RGB. ESP32 wuxuu awood u leeyahay inuu ku xidhmao shabakadaha Wi-Fi, isagoo u oggolaanaya inuu la xidhiidho adeegga Adafruit IO. LED-ga RGB wuxuu ka kooban yahay saddex LED oo kala duwan (casaan, cagaar, iyo buluug) kuwaas oo la isku qasi karo si loo abuuro midabyo kala duwan oo badan.
LED-ga RGB wuxuu ku shaqeeyaa mabda'a anode guud ama cathode guud, taasoo la macno ah in anode (positive) ama cathode (negative) ee LED-yada shaqsiga ah ay tahay in si sax ah loo xidho si ay u shaqeeyaan. Midab kasta waxaa lagu xakameyn karaa isticmaalka Pulse Width Modulation (PWM), kaas oo hagaajiya iftiinka LED kasta adoo kala duwanaya wareegga shaqada.
Faahfaahinta Xogta
| Soo saaraha | SunFounder |
|---|---|
| Nambarka qaybta | RGB LED |
| Koronto hore (VF) | 2.0–3.4 V |
| Koronto hore (IF) | 20 mA |
| Dhererka mawjadda ugu sarreeya (nm) | Casaan: 620, Cagaar: 525, Buluug: 465 |
| Baakad | 4-birood oo caadi ah |
| Xusuus / noocyo | Ikhtiyaarada anode guud ama cathode guud ayaa diyaar ah |
- Isticmaal resistors 220 ohm oo midab kasta oo LED ah si aad u xaddiddo korontada.
- Hubi in fiilooyinka ay sax yihiin qaabka anode guud ama cathode guud.
- Hubi sahayda korontada ee ESP32-ka si aad uga fogaato brownouts.
- Ku hay soo noqnoqoshada PWM-ka gudaha xadka si loo helo isbeddel midab oo siman.
- Hubi in aqoonsiga Wi-Fi-ku sax yahay si aad ugu xidhanto adeegga Adafruit IO.
Tilmaamaha Fiilooyinka

Si aad ugu xidho LED-ga RGB ee ESP32-ka, waxaad ku bilaabaysaa inaad aqoonsato biinanka LED-ga RGB. Biinka ugu dheer waa biinka guud. Qaabka anode guud, ku xidh biinkan korontada togan (3.3V). Saddexda biin ee kale waxay u dhigmaan LED-yada casaan, cagaar, iyo buluug. Ku xidh biinka casaan ee GPIO 27, biinka cagaar ee GPIO 26, iyo biinka buluug ee GPIO 25. Mid kasta oo ka mid ah xidhiidhadaan waa in lagu sameeyaa resistor 220 ohm si loo xaddiddo korontada ku socota LED-yada.
Marka xigta, ku xidh dhulka (GND) ee ESP32-ka khadka dhulka ee wareeggaaga. Hubi in fiilooyinka ay adag yihiin si looga hortago xidhiidhka kala go'a. Haddii aad isticmaalayso LED-ga RGB ee cathode guud, ku xidh biinka guud dhulka oo ku xidh biinanka midabka shaqsiga ah sahayda togan iyadoo loo marayo resistors-ka. Laba jeer hubi dhammaan xidhiidhada ka hor intaadan shidin wareegga.
Tusaalooyinka Koodhka & Sharaxaad
Koodhka Arduino, waxaan ku bilaabaynaa inaan qeexno biinanka LED-yada casaan, cagaar, iyo buluug iyadoo la isticmaalayo aqoonsiyada redPin, greenPin, iyo bluePin. Intaa waxaa dheer, waxaan qeexaynaa kanaalada PWM ee midab kasta iyadoo la isticmaalayo redChannel, greenChannel, iyo blueChannel. Soo noqnoqoshada PWM waxaa lagu dejiyaa 5000 Hz oo leh xallin 8-bit ah.
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
const int redChannel = 0;
const int greenChannel = 1;
const int blueChannel = 2;
Shaqada setup(), waxaan bilaabaynaa kanaalada PWM oo waxaan ku xidhaynaa biinanka u dhigma. Waxaan sidoo kale ku xidhnaa shabakadda Wi-Fi iyadoo la isticmaalayo aqoonsiyada la qeexay oo waxaan dejineynaa macmiilka MQTT si uu ula xidhiidho Adafruit IO.
void setup() {
ledcSetup(redChannel, freq, resolution);
ledcAttachPin(redPin, redChannel);
// Ku xidh WiFi
WiFi.begin(WLAN_SSID, WLAN_PASS);
}
Loop-ka ugu weyn wuxuu hubinayaa xidhiidhka MQTT oo wuxuu habaynayaa fariimaha soo socda. Waxa kale oo uu daabacaa qiimaha RGB ee hadda jira kormeerka serial-ka. Midabka LED-ga waxaa lagu cusboonaysiiyaa iyadoo lagu salaynayo qiimaha lagu helo macmiilka MQTT.
void loop() {
MQTT_connect();
mqtt.processPackets(500);
setColor();
}
Faahfaahin dheeri ah oo ku saabsan koodhka buuxa, fadlan tixraac koodhka dhammaystiran ee hoos ku xusan maqaalka.
Muuqaal / Waxa Lagu Filan Karaa
Mark haddii wax walba si habboon loo habeeyo oo koodhka la soo geliyo, waa inaad aragtaa RGB LED oo ka jawaabaya isbeddelka midabka ee lagu sameeyay dashboard-ka Adafruit IO. Markaad hagaajiso slider-yada casaanka, cagaarka, iyo buluugga, LED-ku waa inuu midabkiisa u beddelaa si waafaqsan. Haddii aad la kulanto dhibaatooyin, hubi in isku xirka Wi-Fi uu xasiloon yahay iyo in magacyada mawduuca MQTT ay la mid yihiin kuwa lagu qeexay koodhka (fiidiyowga 17:30).
Khaladaadka caadiga ah waxaa ka mid ah fiilooyinka qaldan, magacyada mawduucyada oo aan is waafaqin, iyo hilmaamista dejinta astaamaha saxda ah ee Wi-Fi. Haddii LED-ku uusan ifin, laba jeer hubi isku xirka resistor-ka oo hubi in ESP32 si sax ah loo shideeyo.
Waqtiyada Fiidiyowga
- 00:00 Bilow
- 2:23 Hordhaca mashruuca
- 4:43 Waa maxay MQTT
- 7:55 Dejinta Adafruit IO
- 14:09 Sharaxaadda fiilooyinka
- 16:07 Sharaxaadda koodhka
- 27:03 Doorashada guddiga ESP32 iyo COM port-ka Arduino IDE
- 29:12 Bandejiga mashruuca
- 31:25 Waa maxay RGB LED?
- 35:26 Midabka 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
Waad u baahan tahay
-
AliExpressESP32-S3 N16R8 on AliExpresss.click.aliexpress.com
Kheyraadka & Tixraacyada
Wali wax kaydsan ah oo weli ma jiro.
Faylasha📁
Waraaqa xogta (pdf)
-
ESP32 C3 Datasheet English
esp32-c3_datasheet_en[1].pdf0.86 MB