ESP32教程50/55 - 从世界任何地方控制RGB LED | SunFounder的ESP32套件
在本教程中,我们将学习如何使用ESP32微控制器通过Wi-Fi、MQTT协议和Adafruit IO服务来控制RGB LED的颜色。此设置允许您在世界任何地方更改RGB LED的颜色,提供物联网技术的实际应用。我们还将探讨如何使用滑块和颜色选择器来选择所需的颜色。

ESP32是一款功能强大的微控制器,具有内置的Wi-Fi和蓝牙功能,非常适合物联网项目。在此构建中,我们将RGB LED连接到ESP32,并通过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频率在限制范围内,以实现平滑的颜色过渡。
- 确保Wi-Fi凭据正确,以连接到Adafruit IO服务。
接线说明

要将RGB LED连接到ESP32,首先识别RGB LED上的引脚。最长的引脚是公共引脚。对于共阳极配置,将此引脚连接到正电压电源(3.3V)。其他三个引脚分别对应红色、绿色和蓝色LED。将红色引脚连接到GPIO 27,绿色引脚连接到GPIO 26,蓝色引脚连接到GPIO 25。每个连接都应通过220欧姆电阻来限制流过LED的电流。
接下来,将ESP32的地线(GND)连接到电路的地线。确保接线牢固,以防止间歇性连接。如果使用共阴极RGB LED,则将公共引脚连接到地线,并将各个颜色引脚通过电阻连接到正电源。在给电路通电之前,请仔细检查所有连接。
代码示例与讲解
在Arduino代码中,我们首先使用标识符redPin、greenPin和bluePin定义红色、绿色和蓝色LED的引脚。此外,我们使用redChannel、greenChannel和blueChannel为每种颜色定义PWM通道。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网络,并设置MQTT客户端以与Adafruit IO通信。
void setup() {
ledcSetup(redChannel, freq, resolution);
ledcAttachPin(redPin, redChannel);
// 连接到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颜色
/*
* 这是用于ESP32控制RGB LED的Arduino草图,使用Adafruit的MQTT服务
* 视频说明 https://youtu.be/-9q1GfGsnr0
* 📚⬇️ 下载和资源页面 https://robojax.com/RJT672
* 作者 Ahamd Shamshiri
* 于2024年2月18日
*
* Adafruit MQTT库 ESP32 Adafruit IO SSL/TLS示例
*
* /// 参考: https://www.electronicwings.com/esp32/esp32-mqtt-client
* // 定义RGB LED引脚
*/
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
// 定义PWM通道
const int redChannel = 0;
const int greenChannel = 1;
const int blueChannel = 2;
// 定义PWM频率和分辨率
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接入点 *********************************/
*
* #define WLAN_SSID "Book"
* #define WLAN_PASS "888-888"
*
* ************************* Adafruit.io 设置
*/
#define AIO_SERVER "io.adafruit.com"
// 使用端口8883进行MQTTS
#define AIO_SERVERPORT 8883
// Adafruit IO 账户配置
// (要获取这些值,请访问 https://io.adafruit.com 并点击“激活密钥”)
// #define AIO_USERNAME "您的_ADAFRUIT_IO_用户名"
// #define AIO_KEY "YOUR_ADAFRUIT_IO_KEY"
#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_NBQQ75Rn7liRNcRn5uGUBMsBYmjD"
/*
* 全球状态(您无需更改此内容!)******************/
*
* // WiFiFlientSecure 用于 SSL/TLS 支持
* WiFiClientSecure client;
*
* // 通过传入 WiFi 客户端和 MQTT 服务器及登录详细信息设置 MQTT 客户端类。
* Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
*
* // io.adafruit.com 根 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";
*
* /****************************** 订阅
*/
// 设置一个名为“test”的发布馈送和一个名为“test2”的订阅馈送。
// 注意,AIO 的 MQTT 路径采用以下格式:<用户名>/feeds/<数据源名称>
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");
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