一、项目介绍
本系统旨在打造一款兼具美观与实用性的智能桌面照明设备。用户不仅可以通过手动控制,还能通过语音指令与灯具进行自然交互。
1.1 硬件介绍
本项目核心主控采用 Seeed XIAO ESP32S3 Sense 开发板。这款硬件专为边缘端AI应用设计,集成了强大的计算能力与多种传感器:
- 主控芯片:ESP32-S3双核处理器,支持AI加速指令,便于在本地运行轻量级语音识别模型。
- 音频输入:板载MEMS数字麦克风,用于采集语音指令。
- 显示与存储:支持通过I2C接口连接0.96英寸OLED屏幕用于状态显示,并配有SD卡槽用于存储模型或数据。
- 外设连接:拥有丰富的GPIO引脚,用于驱动RGB灯带、无源蜂鸣器以及可能的触控或震动传感器。
- 其他核心外设包括:
- RGB灯带:选用WS2812B等可寻址灯带,实现丰富的色彩效果。
- OLED显示屏:0.96寸(128x64),用于显示当前灯光模式、亮度及速度。
- 无源蜂鸣器:用于操作反馈,发出短鸣提示音。
- 电源与驱动:采用5V/2A电源供电,对于灯带可能需要使用MOS管进行功率扩展。
1.2 功能概览
主要功能如下表所示:
功能模块 | 功能描述 |
|---|---|
氛围灯模式 | 至少3种动态显示模式:跑马灯、彩虹渐变、呼吸灯。 |
语音控制 | 通过麦克风实现设备唤醒,并识别“开灯”、“关灯”、“切换模式”、“加快/减慢速度”、“增加/调暗亮度”等指令。 |
状态显示 | OLED屏幕实时显示当前的模式名称、亮度等级(0-100%)和变化速度等级。 |
交互反馈 | 在执行任何开关灯、模式切换或调节操作时,蜂鸣器发出短鸣提示音。 |
远程控制 | 连接 Wi-Fi 后,通过局域网内的网页(Web Server)实时查看设备状态并进行远程控制。 |

1.3 设计思路
本项目的设计遵循模块化与高内聚低耦合的原则,主要包含以下几个层面:
- 感知层:通过麦克风捕捉语音,利用 ESP-SR 技术在本地进行关键词识别,确保响应速度和隐私安全。
- 执行层:主控解析指令后,通过 led_strip 专用库控制灯带显示不同的动画效果;同时通过I2C总线驱动OLED刷新数据。
- 反馈层:每次指令生效后,触发蜂鸣器PWM输出特定频率的方波,实现短鸣提示,形成“指令-执行-反馈”的闭环人机交互体验。
- 网络层:利用 ESP32 的 Wi-Fi 功能,创建简单的Web服务器,用户通过手机或电脑浏览器访问页面,通过可视化控件调节参数。
二、功能实现
2.1 软件流程图
系统主循环流程如下图所示:

2.2 实现过程
2.2.1 氛围灯模式实现
利用 led_strip 库控制 RGB 灯带。定义三种不同的显示算法,并在主循环中根据 mode 变量调用:
- 跑马灯模式:使用定时器中断或millis()非阻塞延时,依次点亮灯珠形成追逐效果。
- 彩虹模式:基于HSV色彩空间,循环改变色相值,让整条灯带呈现平滑的彩虹流动效果。
- 呼吸灯模式:通过PWM控制灯珠亮度,利用三角函数或分段线性函数生成由暗到亮再到暗的渐变效果。
2.2.2 语音识别与命令解析
采用 ESP-SR 离线识别语音命令词。步骤如下:
- 通过XIAO ESP32S3 Sense的麦克风采集“开灯”、“关灯”、“切换”等命令的音频样本。
- 利用 ESP-SR 自带的语音识别库识别为相应的指令。
- 根据 ESP-SR 识别的语音指令对外设进行控制。
if (strstr(mn_result->string, "kai deng") != NULL) {
// 开灯 语音命令
} else if (strstr(mn_result->string, "guan deng") != NULL) {
// 关灯 语音命令
} else if (strstr(mn_result->string, "qie huan mo shi") != NULL) {
// 切换模式 语音命令
} else if (strstr(mn_result->string, "jia kuai") != NULL) {
// 加快 语音命令
} else if (strstr(mn_result->string, "jian man") != NULL) {
// 减慢 语音命令
} else if (strstr(mn_result->string, "zeng jia liang du") != NULL) {
// 增加亮度 语音命令
} else if (strstr(mn_result->string, "tiao an") != NULL) {
// 调暗 语音命令
}
2.2.3 OLED状态显示
使用SSD1306库驱动OLED,根据当前显示模式、亮度和速度信息。
显示内容:第一行显示模式(Mode: static/mqrquee/Rainbow/Breath);第二行显示亮度(Brigh: XX%);第三行显示速度(Speed: X)。

2.2.4 蜂鸣器反馈机制
将无源蜂鸣器连接到 D10 引脚(GPIO9)。通过 ledc_set_freq() 输出特定频率。
// 蜂鸣器短鸣示例 (频率2000Hz, 持续时间200ms)
if (xQueueReceive(xQueue, &msg, portMAX_DELAY)) {
if (msg.type == MSG_TYPE_BUZZER) {
uint32_t frequency = msg.data.buzzer.frequency;
uint32_t duration = msg.data.buzzer.duration;
// 设置频率
ledc_set_freq(LEDC_LOW_SPEED_MODE, LEDC_TIMER_0, frequency);
// 打开蜂鸣器(50%占空比)
ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, 4096); // 13位分辨率,4096是50%
ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0);
// 等待指定时间
vTaskDelay(duration / portTICK_PERIOD_MS);
// 关闭蜂鸣器
ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, 0);
ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0);
}
}
无论是语音控制还是网页点击,只要是有效指令,均调用此函数。
2.2.5 网页远程控制
在ESP32上配置 HttpServer:
- 连接Wi-Fi后,通过串口打印IP地址。
- 创建包含滑块(亮度)和按钮(模式、开关)的HTML页面。
- 在服务器回调函数中,解析HTTP请求(如: /set?value=50),更新对应的全局变量,并触发蜂鸣器反馈及OLED刷新。
// 启动HTTP服务器
if (httpd_start(&server, &config) == ESP_OK) {
// 注册URI处理函数
httpd_uri_t index_uri = {
.uri = "/",
.method = HTTP_GET,
.handler = [](httpd_req_t *req) { },
.user_ctx = NULL
};
httpd_uri_t set_uri = {
.uri = "/set",
.method = HTTP_GET,
.handler = [](httpd_req_t *req) { },
.user_ctx = NULL
};
// 注册获取当前状态的URI处理函数
httpd_uri_t status_uri = {
.uri = "/status",
.method = HTTP_GET,
.handler = [](httpd_req_t *req) { },
.user_ctx = NULL
};
httpd_register_uri_handler(server, &index_uri);
httpd_register_uri_handler(server, &set_uri);
httpd_register_uri_handler(server, &status_uri);
三、功能展示
以下是该智能语音氛围灯带在不同场景下的表现:
场景 | 交互方式 | 系统响应 |
|---|---|---|
唤醒与开灯 | 用户说出唤醒词(如:“小冰小冰”)后,紧接着说“开灯”。 | 蜂鸣器“嘀”一声,灯带亮起进入默认模式,OLED显示“Mode: mqrquee, Bright: 50%”。 |
模式切换 | 用户说“切换模式”或在网页端点击“彩虹模式”。 | 蜂鸣器短鸣,灯带由跑马灯平滑过渡为彩虹渐变,OLED更新为“Mode: Rainbow”。 |
亮度调节 | 用户说“增加亮度”或在网页端拖动滑块。 | 蜂鸣器短鸣,灯带整体亮度提升,OLED上“Bright”数值从50%升至80%。 |
速度变化 | 用户说“加快速度”。 | 蜂鸣器短鸣,彩虹灯流动速度变快,OLED上“Speed”等级从3变为5。 |
关闭灯光 | 用户说“关灯”或点击网页关闭按钮。 | 蜂鸣器短鸣,灯带熄灭,OLED背光保持点亮显示待机信息。 |



四、总结
遇到的问题
- ESP-IDF 环境的问题,原本我电脑上安装有 v5.4.2 版本的环境,但编译 ESP-SR 工程时出现莫名其妙的报错。尝试很多方式后无果,最终重新安装了一个 v5.5.3 版本的环境解决。
心得体会
本项目基于Seeed XIAO ESP32S3 Sense平台,成功构建了一款集成了离线语音识别、动态灯光效果、实时状态显示、触觉(蜂鸣)反馈与网络控制的智能氛围灯带系统。
项目亮点总结:
1 多模态交互:结合语音、物理反馈(蜂鸣器)和图形界面(OLED/Web),提供了丰富的用户体验。
2 边缘计算:利用ESP32-S3的AI能力在本地处理语音,无需依赖云端,响应迅速且保护隐私。
3 高扩展性:代码采用模块化设计,未来可以轻松增加新的灯光算法(如音乐律动模式)或接入更多传感器(如温湿度)。
改进与展望:
在后续版本中,可以考虑引入低功耗模式,在长时间无操作时使设备进入深度睡眠;或者通过连接物联网平台,实现远程定时控制和场景联动。
最后感谢电子森林推出的 《寒假练》 系列活动,对于我来说是个很好的学习机会,理论结合实践。我们下期活动再见!
五、参考资料
- https://docs.espressif.com/projects/esp-sr/zh_CN/latest/esp32s3/index.html
- https://wiki.seeedstudio.com/cn/xiao_esp32s3_getting_started/
- https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s3/index.html
- https://blog.csdn.net/weixin_44135213/article/details/137217731
- https://github.com/espressif/esp-skainet