KiCad文件
全屏
内容介绍
内容介绍
一、项目主题与目标
所选主题:人工智能在嵌入式系统中的应用(图像识别、计算机视觉、自定义感知等)。
项目目标:
本项目致力于开发一个基于ESP32S3平台的AI智能台灯助手。该台灯的核心功能包括高质量照明、无线开关、亮度与色温调节、语音识别与自动化控制,能够根据用户需求动态调整灯光及环境。通过集成语音识别、人体存在检测和云端图像识别技术,智能台灯不仅能提供适宜的学习与办公照明,还能智能化地检查作业、回答问题,实现全闭环控制。
核心功能:
- 高质量、可调亮度与色温的台灯
- 无线开关、自动感应亮灯
- 语音控制:通过语音指令控制灯光和作业检查
- 人体存在检测:自动开关灯,节省电力
- 云端大模型支持:图像识别与问题解答
- 无缝集成:麦克风、摄像头、喇叭与ESP32S3进行智能交互
二、硬件组成与介绍

核心模块:
- SEEED XIAO ESP32S3
- 高性能低功耗模块,集成WiFi、蓝牙、摄像头接口和双路IIS音频支持。
- 提供稳定的计算能力与无线通信能力,支持多任务调度。
- OV2640摄像头
- 提供清晰的拍照功能,适用于桌面拍摄与图像识别。
- 兼具低光环境下的图像质量优化。
- 数字麦克风与MAX98357
- 高质量麦克风,用于语音输入和处理。
- 配备MAX98357音频解码芯片,确保高质量的语音输出。
- 人体存在传感器(HLK LD2402)
- 通过检测人体存在与否,自动开启或关闭台灯,提升用户体验并节能。
- 双路PWM灯光驱动
- 支持精确调节台灯亮度和色温,满足不同使用场景需求。
- 服务端中继
- 用于连接ESP32S3与腾讯云的TTS、ASR、大模型服务,处理语音识别、图像识别并返回结果。
- 使用局域网中的开发板(如树莓派)作为中继,减少ESP32S3的处理负担。
其他硬件配置:
- 无线控制端通过ESPNOW连接ESP32S3,可通过旋钮、按键进行控制(开关灯、调节色温、启用语音输入等)。
- 实体按键与触摸按键实现基础控制,增强用户交互体验。
三、方案框图与设计思路
设计思路:
本系统通过ESP32S3与局域网内的服务端中继实现信息交互,整个系统架构包括:
- ESP32S3模块: 配置麦克风、摄像头、灯条、人体传感器、WiFi模块,通过无线控制与服务端通信。
- 服务端中继: 通过WebSocket连接,接收来自ESP32S3的语音与图像数据,处理后通过云端大模型实现语音识别与图像分析,返回文字结果。
- 无线控制端: 使用ESPNOW协议,通过旋钮、按键等物理控制方式,直接调节台灯的功能。
- 云端大模型: 利用腾讯云的TTS、ASR和AI大模型进行图像识别与问题解答。
技术框架:
- 数据传输:WebSocket
- 图像识别与语音分析:腾讯云TTS、ASR、大模型API
- 系统控制:ESP32S3、服务端中继、ESP-NOW无线通信

四、原理图与PCB设计
- 原理图:只需要一个20-24V的输入,使用DC5525的接口接入。输入电源直接驱动灯带;用DC-DC稳压生成5V提供给ESP32、喇叭等。

- PCB设计:正面为ESP32的摄像头、稳压电路和LED驱动电路;背面为电源接口、LED灯带接线柱、人体传感器模块。注意:实际焊接中,需要在ESP32的5V和GND上,补充一个100uF以上的电解电容,防止喇叭高功率影响ESP32正常工作。



- PCB焊接:

五、软件设计与流程
开发环境:
- 平台: 使用PlatformIO与Arduino框架进行开发
- 编程语言: C/C++
软件流程图:

系统的主要流程从初始化开始,经过多个阶段,最终实现智能台灯的语音交互与环境感知功能。
- 系统初始化:
在系统启动时,首先初始化各个硬件组件,包括台灯的灯光、按键、WiFi连接、WPM风扇、人体存在传感器、麦克风、MAX98357音频解码器、ESPNOW通信模块。
在此阶段,系统将进行WiFi连接及服务器连接,用户可以选择跳过这些过程,直接进入普通的台灯功能。如果WiFi连接失败或成功,系统会通过屏幕或语音提供相应的提示。 - 多任务创建:
初始化完成后,系统创建多个任务进行并行处理: - 温度控制: 通过读取ESP32的温度,控制WPM风扇的PWM信号进行降温。
- 灯光控制: 根据需求,通过两路PWM信号调节台灯的亮度与色温,确保用户获得舒适的照明体验。
- 传感器数据读取: 系统定期读取人体传感器、按键数据以及通过ESPNOW接收到的无线遥控器信号,并根据这些数据生成指令,触发相应的任务。
- 语音识别触发:
- 语音激活: 用户可以通过按键、触摸或无线遥控器来启动语音输入功能。
- 语音输入与处理: 麦克风监听用户的语音指令,声响增大时,系统启动语音识别功能,调用ASR模块将语音转换为文字。
- 指令判断与处理: 系统根据识别出的文字判断是否为简单指令(如开关灯、调节亮度等)。对于更复杂的指令(如作业检查、图像识别等),系统将启动图像采集模块,拍摄用户指定的图像并上传至云端。
- 云端大模型处理:
- 图像处理与问题解答: 云端大模型接收到图像数据后,进行图像识别,并处理可能存在的问题。云端返回文字描述,并通过TTS模块生成语音反馈给用户。
- TTS播放: 语音反馈通过喇叭播放,完成一次完整的语音交互。
- 中继服务处理:
部分语音识别与图像处理任务会在中继服务器中进行,用户可以修改中继服务器的参数,如选择不同的服务商、调整音色、语速和大模型的提示词,以实现不同的效果。
通过这些流程,系统能够完成从初始化到语音反馈的完整闭环,确保台灯不仅提供高质量的照明,还能够根据用户需求进行智能控制。
代码工程:

关键代码:
- main.cpp:系统初始化与任务调度入口,包括外设初始化、Wi‑Fi/ WebSocket/ ESP‑NOW 启动、音频播放队列与主 AI 任务。
// 初始化espnow的命令队列
espnowCommandQueue = xQueueCreate(8, sizeof(uint8_t));
// 获取当前WiFi通道并初始化ESPNOW
uint8_t wifi_channel = skip_full_init ? 1 : WiFi.channel();
Serial.printf("[System] Using channel: %d\n", wifi_channel);
Serial.println("[System] Init ESPNOW");
// espnow_remote_init(wifi_channel);
espnow_remote_init(0); // ESP-NOW使用固定信道0,实际发送时会切换到当前WiFi信道进行发送
- camera_ov2640:相机初始化、帧获取与图像缩放逻辑(RGB565 -> RGB 转换示例)。
void camera_init()
{
camera_config_init();
if (esp_camera_init(&config) != ESP_OK) { /* retry loop omitted */ }
frameQueue = xQueueCreate(1, sizeof(camera_fb_t *));
camera_sensor_config_init();
}
void resize_image(camera_fb_t *fb, rgb_t *output_image)
{
uint16_t *input_buffer = (uint16_t *)fb->buf; // RGB565
float x_ratio = (float)(CAMERA_WIDTH) / RESIZED_WIDTH;
float y_ratio = (float)(CAMERA_WIDTH) / RESIZED_HEIGHT;
// ... 转换并填充 output_image ...
}
- microphone_IIS_PDM:使用 PDM/I2S 与定时器 ISR 实现 16kHz 音频采集、声音触发检测与缓冲管理。
void ARDUINO_ISR_ATTR microphone_isr_on_timer()
{
portENTER_CRITICAL_ISR(µphone_timer_mux);
if (microphone_is_capturing)
{
microphone_pcm_buffer[microphone_pcm_index++] = i2s_read_pdm();
if (microphone_pcm_index >= microphone_pcm_max_samples) {
microphone_is_capturing = false;
complete_recording = true;
}
}
portEXIT_CRITICAL_ISR(µphone_timer_mux);
}
int8_t microphoneCaptureTask()
{
// 检测环境噪声并启动采集
while (capture_timeout--) {
sample = i2s_read_pdm()-SOUND_CENTER;
if (abs(sample) > SOUND_THRESHOLD) { microphone_start_capture(); break; }
vTaskDelay(pdMS_TO_TICKS(10));
}
}
- audio_max98357:使用 I2S 与定时器驱动 PCM 播放,维护播放状态机与缓冲索引。
void ARDUINO_ISR_ATTR on_audio_timer()
{
portENTER_CRITICAL_ISR(&audio_timer_mux);
if (audio_ctx.state == AUDIO_PLAYING && audio_ctx.data != NULL)
{
if (audio_ctx.current_pos >= audio_ctx.length) { audio_ctx.state = AUDIO_IDLE; timerStop(audio_timer); }
else { int16_t sample = audio_ctx.data[audio_ctx.current_pos]; I2S_Audio.write((uint16_t)sample%256); I2S_Audio.write((uint16_t)sample/256); audio_ctx.current_pos++; }
}
portEXIT_CRITICAL_ISR(&audio_timer_mux);
}
uint8_t audio_max98357_play(const int16_t *audio_data, uint32_t length)
{
// 设置 audio_ctx 并启动定时器
}
- hlk_ld2402_driver:启动后台轮询任务,读取 HLK-LD2402 传感器数据并通过信号量通知使用者。
static void hlk2402_driver_poll_task(void *pvParameters)
{
while (1)
{
hlk_ld2402_report_t report = {0};
esp_err_t err = hlk_ld2402_read_report(&report, 1500);
if (err != ESP_OK) { vTaskDelay(pdMS_TO_TICKS(500)); continue; }
driver_last_state = report.target_state;
if (driver_semaphore != NULL) xSemaphoreGive(driver_semaphore);
vTaskDelay(pdMS_TO_TICKS(100));
}
}
bool hlk_ld2402_driver_start(TaskHandle_t *task_handle)
{
// 初始化并创建轮询任务
}
- websocket:管理 WebSocket 连接,并提供发送图片与音频的封装函数;与 `websocketTask` 协同由任务通知触发发送。
void websocket_connect()
{
webSocket.begin(websocket_host, websocket_port, websocket_path);
webSocket.onEvent([](WStype_t type, uint8_t *payload, size_t length) { if (type == WStype_TEXT) Serial.printf("📩 Message from server: %s\n", payload); });
webSocket.setReconnectInterval(5000);
}
uint8_t send_camera_image_with_name(String fileName)
{
camera_fb_t *fb;
esp_camera_fb_return(esp_camera_fb_get());
fb = esp_camera_fb_get();
if (!fb) return pdFALSE;
webSocket.sendTXT(WEBSOCKET_PIC_INDEX + fileName);
webSocket.sendBIN(fb->buf, fb->len);
esp_camera_fb_return(fb);
return pdTRUE;
}
六、功能展示
- 硬件组装展示:依次将XIAO ESP32S3、喇叭、MAX98257喇叭驱动、人体存在感应模块等连接到对应接口

- 灯条组装:铝型材长度为50cm,将1m长的高显色灯条剪成2条粘贴上去,使用3条导线将两个灯条连接。

- ESP-NOW 无线控制端:控制端使用SEEED XIAO ESP32C3模块,主要使用EC11编码传感器完成控制。


- 照明展示:通电之后,会依次进行初始化,并有语音提示。同时开启照明。人走开后,过20s会自动关灯,人来自动开灯。

- 切换色温展示:通过触摸ESP32引出的触摸检测引脚、或无限控制端按下后旋转旋钮、或者语音中包含“切换色温”,即可进行色温切换。


- AI功能展示:以低年级小朋友做算术题为示例场景,在高显色台灯下完成作业之后,唤醒AI台灯并说“帮我检查一下作业是否正确?”。AI台灯则依次进行拍照、上传、等待AI回复、语音播报,提示错误地方。提示词可以在云端代码中修改,配置成:家教助手、手工助手、拼豆助手、办公助手、老年人助手等多种模式。【具体效果可以查看视频】
七、设计挑战与解决方案
在项目设计过程中,我们遇到了以下几个挑战:
- 播放语音崩溃:
在初始化和后续回答过程中,播放语音会崩溃重启。测试发现,一方面是喇叭功率高,导致ESP32电压下降,该问题通过在ESP32的5V增加一个100uF的电容可以解决。另外是播放声音依赖16kHz的定时中断,与其他任务一起的时候(尤其在初始化过程中的WiFi等),会导致喂狗失败,该问题可以在初始化播放提示音的时候,使用delay延时一段时间,让提示音播放完毕,再进行后续其他任务初始化。 - ESP-NOW频段设置:
由于使用了WiFi和ESP-NOW,ESP-NOW的工作频段,需要与WiFi一致。初始化的时候,使用参数0,让初始化自动与WiFi频段一样。
八、心得体会与建议
心得体会:
本项目结合了人工智能与嵌入式系统的应用,推动了智能家居产品的创新。在开发过程中,我深刻感受到硬件与软件的紧密配合对于系统稳定性和性能的影响。
未来改进建议:
- 在语音识别部分,可以优化本地处理能力,减少对云端服务的依赖,进一步提升响应速度。
- 可以集成更多传感器,例如环境光传感器,根据环境光自动调节台灯亮度。
软硬件
附件下载
AI-LIGHT-ESP32S3-master.zip
源代码(包含Sever端代码)
AI_LAMP_ESP32S3.zip
KICAD工程
团队介绍
无
评论
0 / 100
查看更多
猜你喜欢
FastBond3基础部分-基于STM32的智能台灯智能台灯已经成为现代生活中不可或缺的一部分,它不仅仅是照明设备,更是通过智能化技术为用户提供了更加便捷和舒适的使用体验。
看风景的人
504
FastBond3基础部分-基于ATOM ECHO与ATOM MATRIX的智能语音系统设计该项目使用了ATOM ECHO与ATOM MATRIX,实现了智能语音系统的设计,它的主要功能为:本项目结合AI与边缘计算及影音娱乐技术,旨在开发一个智能语音系统。
安先生
224
FastBond4挑战部分-AI智能机器人小派该项目使用了树莓派结合PiSloth机器人套件,实现了一个AI智能机器人的设计,它的主要功能为:为传统机器人从“机械执行”向“智能交互”升级,提供一个低成本、可落地的解决方案。
launcher
33