Èkọ́ ESP32 50/55 - Ṣàkóso RGB LED láti ibikíbi ní àgbáyé | Àkójọpọ̀ SunFounder's ESP32
Nínú ẹ̀kọ́ yìí, a óò kọ́ bí a ṣe lè ṣàkóso àwọ̀ LED RGB kan ní lílo microcontroller ESP32 lórí Wi-Fi, ní lílo ìlànà MQTT àti iṣẹ́ Adafruit IO. Ìtòlẹ́ yìí jẹ́ kí o lè yí àwọ̀ LED RGB padà láti ibikíbi ní àgbáyé, tí ó ń pèsè ìlò tí ó wúlò nínú ìmọ̀ ẹ̀rọ IoT. A óò tún ṣàwárí bí a ṣe lè lo àwọn slider àti olùyàn àwọ̀ láti yan àwọ̀ tí o fẹ́.

ESP32 jẹ́ microcontroller alágbára tí ó ní agbára Wi-Fi àti Bluetooth nínú ara rẹ̀, tí ó mú kí ó dára fún àwọn iṣẹ́ IoT. Nínú ìkọ́lé yìí, a óò so LED RGB kan pọ̀ mọ́ ESP32 àti ṣàkóso àwọ̀ rẹ̀ nípasẹ̀ olùpèsè MQTT kan tí Adafruit pèsè. Ẹ̀kọ́ yìí yóò darí ọ nípa ìtòlẹ́ ohun èlò, àwọn ìtọ́nisọ́nà fún fífi waya, àti kóòdù tí a nílò láti mú kí ohun gbogbo ṣiṣẹ́ láìsí ìṣòro (nínú fídíò ní 00:00).
Àlàyé Ohun Èlò
Fún iṣẹ́ yìí, àwọn ohun èlò pàtàkì tí a óò lò ni microcontroller ESP32 àti LED RGB. ESP32 ní agbára láti so pọ̀ mọ́ àwọn nẹ́tíwọọkì Wi-Fi, tí ó jẹ́ kí ó lè bá iṣẹ́ Adafruit IO sọ̀rọ̀. LED RGB ní àwọn LED mẹ́ta ọ̀tọ̀ọ̀tọ̀ (pupa, aláwọ̀ ewé, àti búlúù) tí a lè dàpọ̀ láti ṣẹ̀dá ọ̀pọ̀lọpọ̀ àwọ̀.
LED RGB ń ṣiṣẹ́ lórí ìlànà anode tí ó wọ́pọ̀ tàbí cathode tí ó wọ́pọ̀, èyí tí ó túmọ̀ sí pé anode (rere) tàbí cathode (odi) ti àwọn LED kọ̀ọ̀kan gbọ́dọ̀ so pọ̀ dáradára kí wọ́n lè ṣiṣẹ́. A lè ṣàkóso àwọ̀ kọ̀ọ̀kan ní lílo Pulse Width Modulation (PWM), èyí tí ń ṣàtúnṣe ìmọ́lẹ̀ LED kọ̀ọ̀kan nípa yíyí àkókò iṣẹ́ padà.
Àwọn Àlàyé Datasheet
| Olùṣe | SunFounder |
|---|---|
| Nọ́mbà apá | LED RGB |
| Folteji ìwájú (VF) | 2.0–3.4 V |
| Ìṣàn ìwájú (IF) | 20 mA |
| Ìgùn ìgbì (nm) | Pupa: 620, Aláwọ̀ ewé: 525, Búlúù: 465 |
| Àkójọpọ̀ | Bọ́ọ̀lù 4-pin bọ̀wọ̀n |
| Àwọn àkíyèsí / oríṣiríṣi | Àwọn àṣàyàn anode tí ó wọ́pọ̀ tàbí cathode tí ó wọ́pọ̀ wà |
- Lo àwọn resistor 220 ohm fún àwọ̀ LED kọ̀ọ̀kan láti dín ìṣàn kù.
- Rí i dájú pé ìtòlẹ́ waya tọ́ fún ìtòlẹ́ anode tàbí cathode tí ó wọ́pọ̀.
- Ṣàyẹ̀wò ìpèsè agbára ESP32 láti yẹra fún àwọn ìdálẹ̀kun agbára.
- Pa ìgbohùnsáfẹ́fẹ́ PWM mọ́ nínú àwọn ààlà láti ní àwọn ìyípadà àwọ̀ tí ó dán.
- Rí i dájú pé àwọn ìsọfúnni Wi-Fi tọ́ láti so pọ̀ mọ́ iṣẹ́ Adafruit IO.
Àwọn Ìtọ́nisọ́nà Fífi Waya

Láti fi waya so LED RGB pọ̀ mọ́ ESP32, bẹ̀rẹ̀ nípa dídámọ̀ àwọn pin lórí LED RGB. Pin tí ó gùn jùlọ ni pin tí ó wọ́pọ̀. Fún ìtòlẹ́ anode tí ó wọ́pọ̀, so pin yìí pọ̀ mọ́ ìpèsè folteji rere (3.3V). Àwọn pin mẹ́ta yòókù bá àwọ̀ pupa, aláwọ̀ ewé, àti búlúù mu. So pin pupa pọ̀ mọ́ GPIO 27, pin aláwọ̀ ewé pọ̀ mọ́ GPIO 26, àti pin búlúù pọ̀ mọ́ GPIO 25. Ọ̀kọ̀ọ̀kan àwọn ìsopọ̀ wọ̀nyí gbọ́dọ̀ ṣe nípasẹ̀ resistor 220 ohm láti dín ìṣàn tí ń ṣàn nípasẹ̀ àwọn LED kù.
Lẹ́yìn náà, so ilẹ̀ (GND) ti ESP32 pọ̀ mọ́ laini ilẹ̀ ti àyíká ọ̀nà rẹ. Rí i dájú pé ìsopọ̀ waya ṣinṣin láti ṣèdíwọ́ fún àwọn ìsopọ̀ tí ń yí padà. Bí o bá ń lo LED RGB cathode tí ó wọ́pọ̀, so pin tí ó wọ́pọ̀ pọ̀ mọ́ ilẹ̀ dípò, kí o sì so àwọn pin àwọ̀ kọ̀ọ̀kan pọ̀ mọ́ ìpèsè rere nípasẹ̀ àwọn resistor. Ṣàyẹ̀wò gbogbo àwọn ìsopọ̀ lẹ́ẹ̀mejì kí o tó fi agbára sí àyíká ọ̀nà.
Àwọn Àpẹẹrẹ Kóòdù & Ìtọ́sọ́nà
Nínú kóòdù Arduino, a bẹ̀rẹ̀ nípa dídámọ̀ àwọn pin fún àwọn LED pupa, aláwọ̀ ewé, àti búlúù ní lílo àwọn ìdámọ̀ redPin, greenPin, àti bluePin. Ní àfikún, a dámọ̀ àwọn ikanni PWM fún àwọ̀ kọ̀ọ̀kan ní lílo redChannel, greenChannel, àti blueChannel. A ṣeto ìgbohùnsáfẹ́fẹ́ PWM sí 5000 Hz pẹ̀lú ìpinnu 8-bit.
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
const int redChannel = 0;
const int greenChannel = 1;
const int blueChannel = 2;
Nínú iṣẹ́ setup(), a bẹ̀rẹ̀ àwọn ikanni PWM àti so àwọn pin tí ó bá mu pọ̀. A tún so pọ̀ mọ́ nẹ́tíwọọkì Wi-Fi ní lílo àwọn ìsọfúnni tí a dámọ̀ àti ṣeto olùbára MQTT fún ìbánisọ̀rọ̀ pẹ̀lú Adafruit IO.
void setup() {
ledcSetup(redChannel, freq, resolution);
ledcAttachPin(redPin, redChannel);
// So pọ̀ mọ́ WiFi
WiFi.begin(WLAN_SSID, WLAN_PASS);
}
Lúùpù àkọ́kọ́ ṣàyẹ̀wò ìsopọ̀ MQTT àti ṣiṣẹ́ àwọn ifiranṣẹ́ tí ń wọlé. Ó tún tẹ àwọn iye RGB lọ́wọ́lọ́wọ́ sí àbójútó serial. A ṣe ìmúdójúìwọ̀n àwọ̀ LED dá lórí àwọn iye tí a gbà nípasẹ̀ àwọn ìṣàpẹẹrẹ MQTT.
void loop() {
MQTT_connect();
mqtt.processPackets(500);
setColor();
}
Fún àwọn àlàyé pípé fún kóòdù náà, jọ̀wọ́ tọ́ka sí kóòdù pípé tí a gbé sí abẹ́ àpilẹ̀kọ yìí.
Ìfihàn / Ohun Tí O Lè Retí
Ni gbogbo ohun ti a ti ṣeto ati pe koodu ti gbe soke, o yẹ ki o rii RGB LED ti n dahun si awọn iyipada awọ ti a ṣe nipasẹ dasibodu Adafruit IO. Bi o ṣe n ṣatunṣe awọn slider fun pupa, alawọ ewe, ati buluu, LED yẹ ki o yi awọ rẹ pada ni ibamu. Ti o ba ni awọn iṣoro eyikeyi, rii daju pe asopọ Wi-Fi jẹ iduroṣinṣin ati pe awọn orukọ koko-ọrọ MQTT baamu awọn ti a ṣalaye ninu koodu (ninu fidio ni 17:30).
Awọn ipanilara ti o wọpọ pẹlu asopọ okun ti ko tọ, awọn orukọ koko-ọrọ ti ko baamu, ati gbagbe lati ṣeto awọn iwe-ẹri Wi-Fi ti o tọ. Ti LED ko ba tan, ṣayẹwo awọn asopọ resistor lẹẹmeji ki o rii daju pe ESP32 ti ni agbara ni ọna ti o tọ.
Awọn Akoko Fidio
- 00:00 Bẹrẹ
- 2:23 Ifihan si iṣẹ akanṣe naa
- 4:43 Kini MQTT
- 7:55 Ṣeto Adafruit IO
- 14:09 Alaye asopọ okun
- 16:07 Alaye koodu
- 27:03 Yiyan bọọdi ESP32 ati ebute COM lori Arduino IDE
- 29:12 Ifihan iṣẹ akanṣe
- 31:25 Kini RGB LED?
- 35:26 Awọ 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
Ohun ti o le nilo
-
AliExpressESP32-S3 N16R8 on AliExpresss.click.aliexpress.com
Orisun & itọkasi
Ko si awọn orisun sibẹsibẹ.
Fáìlìs📁
Fọọmu data (pdf)
-
ESP32 C3 Datasheet English
esp32-c3_datasheet_en[1].pdf0.86 MB