起因
看到小智AI的开源项目,根据项目介绍中的离线语音识别的需求,入手了ESP32-S3-N16R8开发板以及0.96寸OLED和ES8311+NS4150B音频板子。
TypeC
这个板子有2个TypeC接口,左边是原生USB,右边是纯粹的USB转串口,我看一般用右边的多,因为左边的USB可以用作USB-OTG等其他用途。 更具体的差别后面熟悉了再来补上。
OLED屏
OLED屏是0.96寸的,分辨率是128*64,使用Adafruit SSD1306很容易驱动,引脚为GND,VCC,SCL,SDA。一次成功点亮。显示中文用U8g2库。
音频板
音频板用的是ES8311音频编解码芯片+NS4150B 音频功率放大器的模块,相对复杂一些。有GND,5V,DIN,LRCK,DOUT,SCLK,MCLK,SCL,SDA这9个引脚。
产品介绍说兼容ESP32-S3等主流型号,直接插拔连接。没敢直接焊接上去,先用手按住测试了喇叭和录音,因接触不良测试了好久。
先是测试46脚GPIO没反应,但是原理图上是直连芯片的,也没有悬空,后来测试又可以了,应该还是接触不良导致。还有5Vin没有电压,因为是5V输入,如果要作为输出,需要短接IN-OUT焊点,但是会影响隔离,不准备短接。
后为了接线稳定,采用杜邦线,结果又踩了一个坑。因为杜邦线太长,影响信号,喇叭一直是杂音。按照音频板手册上说 “建议I2C 信号线SDA、SCL/SCK配套接线应尽量短,不超过 5CM。”,把针脚掰弯了后插面包版,声音终于正常了。既然测试兼容没问题,就直接给焊上吧。
IDE
推荐使用VSCode加PlatformIO或ESP-IDF插件,arduino-ide缺少代码提示。
PlatformIO
创建项目时没有找到ESP32-S3-N16R8的板子,选择Espressif ESP32-S3-DevKitC-1作为board,然后手动修改 platformio.ini。另一个方式是使用别人创建好的board文件,参考 https://github.com/platformio/platform-espressif32/pull/921
A fatal error occurred: Failed to connect to ESP32-S3: Wrong boot mode detected (0x4)! The chip needs to be in download mode.
For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html
*** [upload] Error 2
换到左边的typec,可以upload了,没太搞懂这里怎么回事。
小智AI
因为我用的不是标准的某个小智板子,而是两个板子的杂交,所以没有找到直接选择的board。但是xmini/c3和movecall/moji-esp32s3和我的配置很接近。
其中xmini/c3基本上除了主控板是c3外其他和我都是一样的,而moveall/moji-esp32s3是除了显示屏外基本都是一样的。
那就抄一下吧,根据 自定义开发板指南 建一个新的board,配置好 config.h 和 config.json 后,再从上述2个板子提取硬件的初始化代码到 xxx_board_name.cc 文件中。
这里config.h配置的时候有个注意的地方,音频AUDIO_I2S_GPIO_DOUT和AUDIO_I2S_GPIO_DIN对应音频板子上的DIN和DOUT,也就是要交叉接线,不然麦克风和喇叭都不正常。
之后 idf.py build,idf.py flash 都很顺利。屏幕启动后会提示连接ESP32开出来的WiFi,并在网页端把WiFi信息配置给ESP32,ESP32联网后会提示到xiaozhi.me激活绑定设备。
之后就可以正常使用了,默认你好,小智激活语言对话,可以连续对话。
最后修改于 2026-08-13