基于 ESP32-C3 的网页控制 RGB 彩灯实现教程

项目概述





1. 实现功能
- 搭建 ESP32-C3 WiFi 服务器,局域网内通过浏览器访问开发板 IP;
- 网页端提供可拖动的颜色选择面板,面板内的小圆圈支持点击 / 拖动选色;
- 选色后网页自动将 RGB 值通过 HTTP 请求发送给 ESP32-C3;
- ESP32-C3 通过 PWM 信号控制 RGB 彩灯,实时显示选中的颜色。
2. 核心技术
- 硬件层:ESP32-C3 的 PWM 输出(
analogWrite封装)、GPIO 口控制; - 网络层:ESP32-C3 的 WiFi STA 模式、简易 HTTP 服务器搭建;
- 网页层:HTML/CSS 实现界面、JavaScript 实现拖动选色与 AJAX 通信。
3. 物料清单
组件 | 数量 | 说明 |
ESP32-C3 开发板 | 1 | 核心控制单元 |
共阴 RGB 彩灯(4 引脚) | 1 | GND/R/G/B 引脚,共阴类型 |
杜邦线(公对公) | 4 | 连接开发板与彩灯 |
Micro-USB 数据线 | 1 | 供电与程序上传 |
硬件连接(关键:共阴彩灯的接线逻辑)

本次使用的是共阴 RGB 彩灯(4 引脚:GND、R、G、B),其核心逻辑是:引脚输入的 PWM 值越大,对应颜色越亮(若为共阳彩灯,逻辑相反,需反转 PWM 值)。
1. 接线表
将 RGB 彩灯的引脚与 ESP32-C3 的 GPIO 口一一对应,本文选用以下引脚(可根据开发板实际引脚调整):
RGB 彩灯引脚 | ESP32-C3 引脚 | 功能说明 |
GND | GND | 共地,必须连接 |
R | GPIO5 | 红色通道 PWM 输出 |
G | GPIO6 | 绿色通道 PWM 输出 |
B | GPIO7 | 蓝色通道 PWM 输出 |
2. 接线示意图
注意:接线时需断电操作,避免引脚短路损坏开发板;若彩灯亮度不足,可在 RGB 通道串接 220Ω 限流电阻(可选)。
软件环境搭建





1. Arduino IDE 安装
前往Arduino 官网下载对应系统的 Arduino IDE(推荐 2.0 以上版本),安装后打开。
2. ESP32 开发板包安装
ESP32-C3 并非 Arduino 原生支持的开发板,需手动添加开发板包:
- 打开 Arduino IDE,点击「文件」→「首选项」;
- 在「附加开发板管理器网址」中输入:https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json,点击「确定」;
- 点击「工具」→「开发板」→「开发板管理器」,在搜索框输入
ESP32,选择「Espressif Systems ESP32 Boards」,安装最新版本(推荐 2.0.14 及以上); - 安装完成后,重启 Arduino IDE,在「工具」→「开发板」中选择「ESP32 Arduino → ESP32-C3 Dev Module」。
3. 端口选择
将 ESP32-C3 通过 Micro-USB 连接电脑,在 Arduino IDE 的「工具」→「端口」中选择对应的串口(如 Windows 的 COM3、Mac 的 /dev/cu.usbserial-xxx)。
完整代码与模块解析

本文使用的代码已解决ledc函数编译报错、颜色通道反转等问题,采用analogWrite实现 PWM 输出,兼容性更强。以下是完整代码及逐模块解析。
1. 完整代码
2. 代码模块解析
(1)配置区:极简修改,新手友好
代码最上方的配置区仅包含 WiFi 名称、密码和 RGB 引脚,无需修改其他部分,降低新手操作难度。
(2)初始化函数setup()
- 串口初始化:
Serial.begin(115200)用于在串口监视器查看调试信息(如 WiFi 连接状态、开发板 IP); - 引脚初始化:
pinMode(...)将 RGB 引脚设为输出模式,ESP32 的analogWrite会自动为引脚配置 PWM,无需手动调用ledc函数(解决编译报错); - WiFi 连接:添加 20 次重试机制,避免因网络波动导致连接失败;连接失败时红灯闪烁,直观提示问题。
(3)核心功能函数
updateRGBLight():通过analogWrite输出 PWM 值控制彩灯,共阴彩灯的逻辑是值越大越亮;handleWebClient():检测网页客户端的连接,解析 RGB 控制请求并更新彩灯,无控制请求时返回颜色选择网页;extractParam():从 HTTP 请求中提取 R/G/B 参数值,是网页与硬件通信的 “桥梁”;sendColorWebPage():将网页的 HTML/CSS/JS 代码发送给浏览器,实现可视化选色界面。
(4)主循环loop()
仅调用handleWebClient(),循环检测网页请求,保证硬件实时响应网页操作。
网页设计与交互逻辑解析

网页是用户与硬件交互的 “入口”,本文的网页采用纯前端技术(无后端框架),轻量化且适配手机 / 电脑。
1. 网页结构(HTML)
- 标题:
RGB彩灯颜色选择器,清晰说明功能; - 颜色面板:
#colorPanel是核心选色区域,宽高 320px,适配移动端; - 选色器:
#colorPicker是面板内的白色小圆圈,用于直观显示选色位置; - 颜色信息:
#colorInfo实时显示当前选中的 RGB 值。
2. 样式设计(CSS)
- 采用
linear-gradient实现颜色面板的红→绿→蓝水平渐变和亮→暗垂直渐变; - 选色器设为圆形,添加黑色边框,保证在任何颜色背景下都清晰可见;
- 适配移动端:添加
<meta name="viewport" content="width=device-width, initial-scale=1.0">,手机访问时界面不缩放。
3. 交互逻辑(JavaScript)
- 拖动 / 点击选色:监听
mousedown/mousemove/mouseup事件,实现选色器的拖动; - RGB 值计算:修正后的颜色逻辑保证面板左→右为红→绿→蓝,垂直方向控制亮度,解决之前 “绿蓝反色” 的问题;
- AJAX 通信:通过
fetch()发送 HTTP 请求,将 RGB 值传递给 ESP32-C3,实现 “选色即变色” 的实时交互。
测试与调试
程序上传与启动
- 将代码复制到 Arduino IDE,修改
配置区的 WiFi 名称和密码; - 点击 IDE 右上角的「上传」按钮,等待程序编译并上传到 ESP32-C3;
- 上传完成后,打开「工具」→「串口监视器」(波特率选 115200),等待 WiFi 连接成功,记录开发板的 IP 地址(如
192.168.1.100)。
2. 网页控制彩灯
- 将手机 / 电脑连接到与 ESP32-C3 相同的 WiFi;
- 打开浏览器,输入串口监视器中显示的 IP 地址,进入颜色选择网页;
- 拖动 / 点击面板内的白色小圆圈,彩灯会实时显示选中的颜色,网页下方会显示当前 RGB 值。
3. 常见问题排查
问题现象 | 解决方法 |
串口监视器无 IP 地址 | 检查 WiFi 名称 / 密码是否正确;开发板是否连接到正确的 WiFi |
彩灯颜色反了 | 确认是共阴彩灯;若仍反色,交换代码中 RGB 引脚的定义 |
网页无法访问 | 电脑 / 手机与 ESP32-C3 是否在同一 WiFi;关闭电脑防火墙 |
彩灯不亮 | 检查接线是否正确(尤其是 GND);引脚是否与代码配置一致 |
0
0
0
qq空间
微博
复制链接
分享
0