项目介绍
本文完全基于ESP-AI开源库进行实现,旨在为开发者和企业提供快速接入ESP-AI服务的参考单吗。开发者仅需通过调用ESP-AI OPEN API或快速开通一套开放平台分站就能快速的开发自己的应用,进行可商业使用的AI产品落地,减少开发周期及开发成本。
总的来说:基于本仓库代码,可以实现各种业务需求。开发者可以删除不需要的功能,或者在固件中写好您的秘钥信息等各种灵活操作…
功能实现:
- ✅硬件适配:
·1 支持多种开发板型号(通过宏定义选择):
· ESP-AI S3 系列(不同屏幕版本)
· 小智AI S3 二代/三代开发板
·2 ✅适配不同屏幕类型(OLED/TFT)和引脚配置
· 支持 OLED 屏幕(0.96寸/0.91寸。 动态小表情)
· 支持 TFT 屏幕(1.3寸,240 *240,7789驱动。 可根据情绪渲染不同图片)
· 支持
· 支持情绪指示灯及灯带(ws2812)
快乐->蓝色 / 伤心->绿色 / 愤怒->红色 / 恐惧->黄色 - ✅核心功能
· 语音交互系统(ASR+LLM+TTS)
· 情绪检测与表情显示(通过OLED屏幕)
· RGB情绪灯光控制(WS2812灯带)
· 电池电量监测
· 网络连接管理(Wi-Fi配网+WebSocket通信) - ✅服务对接
· OTA无线升级功能
· 与云端服务的HTTP/WebSocket通信
· 设备状态上报(电量、位置等) - ✅外设控制
物理按键控制(音量调节)
屏幕显示管理
麦克风/扬声器驱
即将推出:
- 微信小程序客户端
- 蓝牙配网
进展请入群关注,最新进展会第一时间发布在群中。
项目结构
esp-ai-business-arduion/
├── main/
│ ├── main.ino # 主程序
│ └── voice.hd # 天问代码(天问语音唤醒)
├── main-img/
│ ├── main-img.ino # 主程序
│ └── voice.hd # 天问代码(天问语音唤醒)
├── web/
│ ├── index.html # 配网页面
│ └── index_xiao_zhi_2.html # 配网页面(兼容小智硬件)
└── README.md
环境配置:
- 先看一遍文档:Arduino IDE 文档
- 下载依赖库
libraries2.zip,
然后解压到 C:\Users[用户名]\Documents\Arduino\libraries (注意 用户名自己改成你电脑用户名,并且删除中括号。)
固件打包
参见文章:Arduino 导出bin文件并且使用ESP32烧录工具进行烧录(esp32生产环境批量烧录)
将固件发布到 ESP-AI 开放平台或者发布到您的分站
该功能正在积极开发中,预计在 2025/6 月份或更早上线,敬请期待~
关键代码解析
- 硬件选择配置
// 开发板选择(取消注释对应型号)
#define IS_ESP_AI_S3 // OLED屏版本
//#define IS_XIAO_ZHI_S3_2 // 小智二代
- 电量检测实现
BatteryMonitor batteryMonitor(8, 1181); // ADC引脚和满电校准值
int batteryLevel = batteryMonitor.getBatteryPercentage();
- OTA升级流程
void update_ota(String url) {
httpUpdate.onProgress(update_progress); // 进度回调
t_httpUpdate_return ret = httpUpdate.update(upDateClient, url);
}
- WebSocket通信
webSocket_yw.begin(host, port, path);
webSocket_yw.onEvent(webSocketEvent_ye); // 事件回调
- 情绪显示系统
face->Behavior.SetEmotion(eEmotions::Happy, 1.0); // 设置表情
pixelsEmotion.setPixelColor(i, color); // RGB灯光控制
典型问题解决方案
Q1: 如何选择正确的开发板型号?
A: 在代码开头取消注释对应开发板的宏定义:
// 正确示例(ESP-AI OLED版):
#define IS_ESP_AI_S3
// 错误示例(同时启用多个定义):
//#define IS_ESP_AI_S3
//#define IS_XIAO_ZHI_S3_2
Q2: OTA升级失败的可能原因?
检查以下方面:
服务器URL有效性(https校验)
网络连接稳定性
分区表配置(至少1.5MB SPIFFS)
固件签名验证
Q3: 屏幕显示异常处理步骤
- 确认屏幕类型宏定义正确
- 检查引脚配置
Face(128, 64, 40, 38, 39, "096", 0); // width, height, eyesize, SCK, SDA, type, rotation
- 测量屏幕供电(3.3V)
- 更新U8g2图形库版本
Q4: 如何调整语音识别灵敏度?
修改VAD静音检测参数:
// 文件全局变量区
String vad_first = "5000"; // 首次静默时间(ms)
String vad_course = "500"; // 说话间隔静默时间
// 配置读取处
wake_up_config.vad_first = vad_first.toInt();
开发建议
- 调试技巧
启用串口调试输出:
#define DEBUG_SERIAL Serial
使用内存监控:
Serial.printf("Free Heap: %d KB\n", ESP.getFreeHeap()/1024);
- 性能优化
调整任务堆栈大小:
xTaskCreate(faceTask, "faceTask", 8192, NULL, 1, NULL); // 原为4096
启用PSRAM优化:
configTASK_STACK_DEPTH_TYPE = 16*1024; // 在sdkconfig中配置
- 安全注意事项
增加OTA签名验证:
httpUpdate.setLedPin(LED_BUILTIN, LOW);
httpUpdate.authorize("Bearer YourAPIToken");
加密敏感配置:
preferences.begin("cfg", false); // 使用NVS加密存储