
| 模块 | 器件 / 功能 | 接口 | 地址 / 参数 | GPIO / 信号 |
|---|---|---|---|---|
| LCD | ST77916 | QSPI | 360×360,常用 RGB565,16-bit 色深 | CS=GPIO21,PCLK=GPIO40,DATA0=GPIO46,DATA1=GPIO45,DATA2=GPIO42,DATA3=GPIO41,RST=GPIO3,BL=GPIO5 |
| 触摸 | CST816S 电容触摸 | I2C | 7-bit 地址 0x15 | SCL=GPIO10,SDA=GPIO11,RST=GPIO1,INT=GPIO4 |
| IMU | QMI8658 6 轴传感器 | I2C | 7-bit 地址 0x6B | SCL=GPIO10,SDA=GPIO11 |
| 音频输出 | ES8311 音频编解码 | I2C + I2S | 7-bit 地址 0x30 | I2C SCL=GPIO10,SDA=GPIO11;MCLK=GPIO2,BCLK=GPIO48,LRCK=GPIO38,DOUT=GPIO47,DIN=GPIO39,PA=GPIO9 |
| 音频输入 | ES7210 回声消除算法芯片 / 双麦克风 | I2C + I2S | 7-bit 地址 0x80 | I2C SCL=GPIO10,SDA=GPIO11;MCLK=GPIO2,BCLK=GPIO48,LRCK=GPIO38,DIN=GPIO39 |
| 电量检测 | BQ27220 | I2C | 7-bit 地址 0x55 | SCL=GPIO10,SDA=GPIO11 |
| RTC | PCF85063 实时时钟 | I2C | 7-bit 地址 0x51 | SCL=GPIO10,SDA=GPIO11,INT=GPIO6 |
| Micro SD | SDMMC | SDMMC 4-bit | 支持 SD_MMC | CLK=GPIO15,CMD=GPIO14,D0=GPIO16,D1=GPIO17,D2=GPIO12,D3=GPIO13 |
| USB Type-C | ESP32-S3 原生 USB | USB | 下载、日志 | USB_N=GPIO19,USB_P=GPIO20 |
| UART0 | 串口通信接口 | UART | SH1.0 4PIN 连接器 | U0TXD=GPIO43,U0RXD=GPIO44 |
| BOOT 按键 | BOOT / 下载模式 | GPIO | 上拉,按下拉低 | GPIO0 |
在使用 ESP32-S3-Touch-LCD-1.85B 板上预留的接口时需注意接线颜色和对应功能,避免接线惯性导致烧坏开发板。
| 类型 | 信号 |
|---|---|
| 电源 | 5V / 3V3 / GND |
| I2C | SCL(GPIO10) / SDA(GPIO11) |
| UART | TXD(GPIO43) / RXD(GPIO44) |
| USB 焊盘 | DN(GPIO19) / DP(GPIO20) |
下表列出板上电路已占用的 GPIO 及已引出到扩展口的引脚。
| GPIO | 信号名 | 连接到 | 备注 |
|---|---|---|---|
| GPIO0 | BOOT | BOOT 按键 | Strapping pin;长按上电再松开,进入下载模式 |
| GPIO1 | TP_RST | CST816S 触摸复位 | - |
| GPIO2 | I2S_MCLK | ES8311 / ES7210 音频时钟 | - |
| GPIO3 | LCD_RST | ST77916 LCD 复位 | - |
| GPIO4 | TP_INT | CST816S 触摸中断 | - |
| GPIO5 | LCD_BL | LCD 背光控制 | PWM 调光 |
| GPIO6 | RTC_INT | PCF85063 实时时钟中断 | - |
| GPIO9 | PA_CTRL | 功放控制 | 音频输出功放使能 |
| GPIO10 | I2C_SCL | 触摸、IMU、音频芯片、电量检测共享 I2C SCL;也接出到 I2C 接口 | I2C 设备见外设速查表 |
| GPIO11 | I2C_SDA | 触摸、IMU、音频芯片、电量检测共享 I2C SDA;也接出到 I2C 接口 | I2C 设备见外设速查表 |
| GPIO12 | SD_D2 | Micro SD D2 | SDMMC 4-bit |
| GPIO13 | SD_D3 | Micro SD D3 | SDMMC 4-bit |
| GPIO14 | SD_CMD | Micro SD CMD | SDMMC |
| GPIO15 | SD_CLK | Micro SD CLK | SDMMC |
| GPIO16 | SD_D0 | Micro SD D0 | SDMMC |
| GPIO17 | SD_D1 | Micro SD D1 | SDMMC |
| GPIO19 | USB_N | USB Type-C D- | ESP32-S3 原生 USB |
| GPIO20 | USB_P | USB Type-C D+ | ESP32-S3 原生 USB |
| GPIO21 | LCD_CS | ST77916 QSPI 片选 | - |
| GPIO38 | I2S_LRCK | ES8311 / ES7210 左右声道时钟 | - |
| GPIO39 | I2S_DIN | ES8311 / ES7210 I2S 输入数据 | 录音数据输入 |
| GPIO40 | LCD_PCLK | ST77916 QSPI 时钟 | - |
| GPIO41 | LCD_DATA3 | ST77916 QSPI 数据线 3 | - |
| GPIO42 | LCD_DATA2 | ST77916 QSPI 数据线 2 | - |
| GPIO43 | U0TXD | 串口通信接口 TXD | 调试 / 扩展 |
| GPIO44 | U0RXD | 串口通信接口 RXD | 调试 / 扩展 |
| GPIO45 | LCD_DATA1 | ST77916 QSPI 数据线 1 | - |
| GPIO46 | LCD_DATA0 | ST77916 QSPI 数据线 0 | - |
| GPIO47 | I2S_DOUT | ES8311 I2S 输出数据 | 播放数据输出 |
| GPIO48 | I2S_BCLK | ES8311 / ES7210 I2S 位时钟 | - |
0x15、0x6B、0x30、0x80、0x51、0x55 等板载 I2C 地址冲突。GPIO19/GPIO20 已连接 USB Type-C,不建议当普通 GPIO 使用。GPIO0 是 BOOT 引脚,不建议作为普通用户输入。| 参数名称 | 参数 |
|---|---|
| 显示面板 | LCD |
| 显示尺寸 | 1.85 英寸 |
| 分辨率 | 360 × 360 |
| 显示色彩 | 262K 彩色 |
| 显示接口 | QSPI |
| 显示驱动 | ST77916 |
| 触控芯片 | CST816S |
| 触控接口 | I2C |
| 参数名称 | 参数 |
|---|---|
| 接口 | USB Type-C |
| 主控芯片 | ESP32-S3R8 |
| SRAM / ROM | 512KB SRAM / 384KB ROM |
| PSRAM / Flash | 8MB PSRAM / 16MB Flash |
| 屏幕类型 | TFT LCD |
| 屏幕控制芯片 | Display: ST77916 Touch: CST816S |
| 板载设备 | QMI8658 六轴传感器 ES8311 音频编解码芯片 ES7210 回声消除算法芯片 BQ27220 电量检测芯片 PCF85063 实时时钟 双麦克风阵列 板载扬声器焊盘 Micro SD 锂电池充放电接口 |
| 引出接口 | I2C、UART、USB 焊盘 |
| 供电接口 | USB Type-C / 3.7V 锂电池接口 |

为了让用户能够快速了解产品的各个功能,我们提供了出厂测试程序,方便客户了解板载屏幕、触摸、音频、IMU、RTC、电量检测、SD 卡等功能的使用。除了 ESP32-S3-Touch-LCD-1.85B 主机和配套线材之外,为了能够运行全部例程,需要准备的器件如下:
music 目录video 目录photo 目录Firmware 目录中。ESP32-S3-Touch-LCD-1.85B-Factory.bin,可用于恢复出厂演示程序。若出现 无法识别端口 或 无法自动进入下载模式 的情况,请手动进入 Boot 模式:
下载完成后,重新上电或复位运行程序。
使用 Brookesia 组件,展示 APP 风格的综合应用界面,可用于快速验证板载 LCD、触摸、音频、语音和外设功能。











本章节包含以下部分,请按需阅读:
初次接触 Arduino ESP32 开发,想要快速上手?我们为您准备了一套通用的 入门教程。
请注意:该教程使用 ESP32-S3-Zero 作为教学示例,所有硬件代码均基于其引脚布局。在动手实践前,建议您对照手中的开发板引脚图,确认引脚配置无误。
请参考 安装和配置 Arduino IDE 教程 下载安装 Arduino IDE 并添加 ESP32 支持。
Arduino 目录中,下载 ESP32-S3-Touch-AMOLED-1.75C 开发板的示例程序包。包内的 Arduino\libraries 目录已包含本教程所需的全部库文件。| 库或文件名称 | 说明 | 版本 | 安装方式 |
|---|---|---|---|
| ESP32-audioI2S-master | 音频播放库 | v3.4.5 | 通过库管理器或手动安装 |
| SensorLib | PCF85063、QMI8658 传感器驱动库 | v0.3.1 | 通过库管理器或手动安装 |
| es7210 | ES7210 驱动 | - | 手动安装 |
| es8311 | ES8311 驱动 | - | 手动安装 |
| kode_bq27220 | bq27220 电池检测驱动 | —— | 手动安装 |
| lvgl | LVGL UI | v8.4.0 | 手动安装 |
LVGL 及其驱动库的版本之间存在较强的依赖关系。例如,为 LVGL v8 编写的驱动可能不兼容 LVGL v9。为确保示例能够稳定复现,推荐使用上表列出的特定版本。混合使用不同版本的库可能导致编译失败或运行时异常。
安装步骤:
进入已下载的 示例程序包。
将其 Arduino\libraries 目录下的所有文件夹(Arduino_DriveBus、GFX_Library_for_Arduino 等)复制到 Arduino 的库文件夹中。
Arduino 库文件夹的路径通常是:c:\Users\<用户名>\Documents\Arduino\libraries。
也可以在 Arduino IDE 中通过 文件 > 首选项,查看“项目文件夹位置”来定位。库文件夹就是此路径下的 libraries 文件夹。
其他安装方式请参考:Arduino 库管理教程。
ESP32-S3-Touch-LCD-1.85B 所需开发板安装说明
| 板名称 | 板安装要求 | 版本号要求 |
|---|---|---|
| ESP32 by Espressif Systems | “离线”安装/“在线”安装 | ≥3.2.0 |
Arduino 示例程序位于 示例程序包 的 Arduino/examples 目录中。
| 示例程序 | 基础例程说明 | 依赖库 |
|---|---|---|
| 01_lvgl_demo | 展示了基本的 LVGL 图形库功能,测试显示屏的基础性能 | lvgl |
| 02_lvgl_BQ27220 | 测试 BQ27220 电量监测传感器 | kode_bq27220 |
| 03_audio_out_no_tf | 音频播放测试 | es8311 |
| 04_SDMMC_Test | TF 卡挂载以及读写文件测试 | —— |
| 05_audio_out_tf | LVGL 演示 | LVGL,Arduino_DriveBus |
| 06_esp_sr | ES7210 驱动示例,拾取人声检测 | —— |
| 07_I2C_qmi8658 | 陀螺仪驱动测试 | SensorLib |
| 08_I2C_pcf85063 | RTC 实时时钟驱动测试 | SensorLib |
Arduino 驱动显示屏,并播放多个 LVGL 示例程序。初始化屏幕、触摸以及 LVGL:
I2C_Init();
Backlight_Init();
LCD_Init();
Lvgl_Init();
选择对应的 LVGL DEMO 运行:
lv_demo_widgets();
// lv_demo_benchmark();
// lv_demo_keypad_encoder();
// lv_demo_music();
// lv_demo_stress();





创建 I2C 互斥锁,避免触摸和 BQ27220 在不同任务读取时发生冲突
wire_mutex = xSemaphoreCreateMutex();
初始化 BQ27220
if (!gauge.begin(Wire, 0x55, I2C_SDA_PIN, I2C_SCL_PIN, 400000)) {
Serial.println("BQ27220 not found");
while (1) delay(1000);
}

初始化 I2C 控制器和外部拓展 IO
DEV_I2C_Init();
IO_EXTENSION_Init();
IO_EXTENSION_Output(IO_EXTENSION_IO_6, 1);
初始化 ES8311
es8311_codec_init();
初始化 I2S 并使能功放 PA 引脚
setupI2S();
IO_EXTENSION_Output(IO_EXTENSION_IO_4, 1);
在 loop 循环中不断写通过 I2S 向 ES8311 写数据
void loop() {
i2s.write((uint8_t *)audio_data, AUDIO_SAMPLES * 2);
}
设置 SDIO 接口引脚,并挂载文件系统
if(! SD_MMC.setPins(clk, cmd, d0)){
Serial.println("Pin change failed!");
return;
}
if (!SD_MMC.begin("/sdcard", true)) {
Serial.println("Card Mount Failed");
return;
}
读写文件测试
listDir(SD_MMC, "/", 0);
createDir(SD_MMC, "/mydir");
listDir(SD_MMC, "/", 0);
removeDir(SD_MMC, "/mydir");
listDir(SD_MMC, "/", 2);
writeFile(SD_MMC, "/hello.txt", "Hello ");
appendFile(SD_MMC, "/hello.txt", "World!\n");
readFile(SD_MMC, "/hello.txt");
deleteFile(SD_MMC, "/foo.txt");
renameFile(SD_MMC, "/hello.txt", "/foo.txt");
readFile(SD_MMC, "/foo.txt");
testFileIO(SD_MMC, "/test.txt");
Serial.printf("Total space: %lluMB\n", SD_MMC.totalBytes() / (1024 * 1024));
Serial.printf("Used space: %lluMB\n", SD_MMC.usedBytes() / (1024 * 1024));

初始化 I2S 以及音频解码库,并设置播放路径
audio.setPinout(I2S_BCK_PIN, I2S_LRCK_PIN, I2S_DOUT_PIN,I2S_MCLK_PIN);
audio.connecttoFS(SD_MMC, "ff-16b-1c-44100hz.mp3");
初始化 I2S 以及 ES7210 音频编码器
Wire.begin(I2C_PIN_SDA, I2C_PIN_SCL);
es7210_init();
i2s.setPins(I2S_PIN_BCK, I2S_PIN_WS, I2S_PIN_DOUT, I2S_PIN_DIN, I2S_PIN_MCK);
i2s.setTimeout(1000);
i2s.begin(I2S_MODE_STD, 16000, I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_STEREO);
注册语音唤醒以及语音识别回调事件,并开启 ESP-SR
ESP_SR.onEvent(onSrEvent);
ESP_SR.begin(i2s, sr_commands, sizeof(sr_commands) / sizeof(sr_cmd_t), SR_CHANNELS_STEREO, SR_MODE_WAKEWORD);

【程序说明】
【硬件连接】
【代码分析】
void i2c_qmi_loop_task(void *arg):创建一个 QMI 任务来实现获取姿态信息,在任务中读取并打印加速度计、陀螺仪数据,并将获取的结果输出到串口控制台,间隔 200ms 。【运行效果】

【程序说明】
【硬件连接】
【代码分析】
void i2c_rtc_loop_task(void *arg):创建一个 RTC 任务来实现 RTC 功能,每隔 1 秒读取一次 RTC 芯片的时钟,然后输出到终端。【运行效果】

本章节包含以下部分,请按需阅读:
初次接触 ESP32 ESP-IDF 开发,想要快速上手?我们为您准备了一套通用的 入门教程。
请注意:该教程使用 ESP32-S3-Zero 作为教学示例,所有硬件代码均基于其引脚布局。在动手实践前,建议您对照手中的开发板引脚图,确认引脚配置无误。
对于 EESP32-S3-Touch-LCD-1.85B 开发板,需要使用 ESP-IDF V5.5.3 以上版本。
以下内容以 Windows 系统为例,使用 VS Code + ESP-IDF 扩展 的方式进行开发。Mac/Linux 用户请参考 官方说明。
此部分图示以安装 ESP-IDF V5.2.2 为例示范,安装时请选用与您开发板示例匹配的 ESP-IDF 版本。
前往 ESP-IDF Installation Manager 下载 ESP-IDF 安装管理器。这是乐鑫最新推出的跨平台安装工具,下文将演示如何使用其离线安装功能。
在页面中点击 Offline Installer 标签,然后在筛选栏中选择 Windows 操作系统和你需要的 ESP-IDF 版本(图示仅为参考,请以实际为准)。

确认选择无误后,点击下载按钮。浏览器将自动同时下载两个文件:一个是 ESP-IDF 离线整合包(.zst),另一个是 ESP-IDF 安装器(.exe)。

请耐心等待两个文件下载完成。
下载完成后,双击运行 ESP-IDF 安装器(eim-gui-windows-x64.exe)。
启动后,可在右上角将界面语言切换为中文。

安装工具会自动检测同一目录下是否存在离线整合包。点击 从存档安装。

接下来,选择安装路径。建议使用默认路径;若需自定义,请确保路径中不包含中文或空格。确认无误后,点击 开始安装。

当看到如下界面时,表示 ESP-IDF 已安装成功。

建议同时安装驱动程序。点击 完成安装,然后点击 安装驱动程序。

下载并安装 Visual Studio Code。
安装时建议勾选 通过 Code 打开操作添加到 Windows 资源管理器文件上下文菜单,以便快速打开项目文件夹。
在 VS Code 中,点击侧边活动栏中的 扩展图标(或使用快捷键 Ctrl + Shift + X)打开 扩展 视图。
在搜索框中输入 ESP-IDF,找到 ESP-IDF 扩展并点击安装。

当 ESP-IDF 扩展版本 ≥ 2.0 时,扩展会自动检测并识别上述步骤中安装的 ESP-IDF 环境,无需手动配置。
ESP-IDF 示例程序位于 示例程序包 的 ESP-IDF 目录中。
| 示例程序 | 基础例程说明 |
|---|---|
| 01_comprehensive_example | 综合示例程序,驱动 lcd, 音频以及板载传感器 |
| 02_lvgl_demo | 展示 LVGL demo |
| 03_mp3_player | 此示例扫描 TF 卡,并播放 MP3 |
| 04_esp_wakeword_det | 使用 esp-sr 组件实现语音唤醒以及命令词识别功能 |
| 05_esp-brookesia | 通过 brookesia 组件展示 LVGL APP 风格 UI |
| 06_qmi8658_test | 测试陀螺仪 |
| 07_pcf85063_test | 测试 RTC 实时时钟 |
| 08_bq27220_test | 测试板载电池监测 IC |
music 文件夹用来存放 MP3 文件)初始化屏幕、触摸、背光、 LVGL 以及 TF 卡:
lv_display_t *disp = bsp_display_start();
lv_indev_t *tp = bsp_display_get_input_dev();
bsp_display_backlight_on();
bsp_sdcard_mount();
初始化音频播放器、板载传感器以及唤醒词监测任务:
Audio_Play_Init();
msg_driver_init();
wake_word_drv_init();
扫描 music 文件夹下的 MP3 文件:
esp_err_t err = get_file_list_by_ext("/sdcard/music",".mp3",&mp3_files);
if (err == ESP_OK) {
for (int i = 0; i < mp3_files.count; i++) {
printf("MP3[%d]: %s\n", i, mp3_files.list[i]);
}
}
创建 UI:
bsp_display_lock(-1);
main_screen = lv_obj_create(NULL);
lv_obj_t * tv = lv_tileview_create(main_screen);
lv_obj_t * tile1 = lv_tileview_add_tile(tv, 0, 0, LV_DIR_RIGHT);
msg_ui_screen_init(main_screen,tile1);
lv_obj_t * tile2 = lv_tileview_add_tile(tv, 1, 0, LV_DIR_LEFT | LV_DIR_RIGHT);
init_music_ui_screen(tile2,&mp3_files);
lv_obj_t * tile3 = lv_tileview_add_tile(tv, 2, 0, LV_DIR_LEFT);
eaf_ui_screen_init(tile3);
lv_screen_load(main_screen);
bsp_display_unlock();
测试语音唤醒及命令词指令
//唤醒词
Hi,ESP
// 指令
Turn on the backlight
Turn off the backlight
Backlight is brightest
Backlight is darkest






加载 LVGL demo 示例:
bsp_display_lock(-1);
lv_demo_widgets();
bsp_display_unlock();

music 文件夹用来存放 MP3 文件)扫描 MP3 文件并保存文件名:
void Search_Music(void)
{
esp_err_t err = get_file_list_by_ext("/sdcard/music",".mp3",&MP3_files);
if (err == ESP_OK) {
for (int i = 0; i < MP3_files.count; i++) {
printf("MP3:[%d]: %s\n", i, MP3_files.list[i]);
}
}
file_count = MP3_files.count;
}

初始化麦克风并获取句柄:
record_dev = bsp_audio_codec_microphone_init();
esp_codec_dev_sample_info_t fs = {
.bits_per_sample = 32,
.channel = 2,
.sample_rate = 16000,
};
esp_codec_dev_set_in_gain(record_dev, 30.0);
esp_codec_dev_open(record_dev, &fs);
初始化语音模型:
models = esp_srmodel_init("model"); // partition label defined in partitions.csv
afe_config_t *afe_config = afe_config_init(bsp_get_input_format(), models, AFE_TYPE_SR, AFE_MODE_LOW_COST);
afe_handle = esp_afe_handle_from_config(afe_config);
esp_afe_sr_data_t *afe_data = afe_handle->create_from_config(afe_config);
afe_config_free(afe_config);
xTaskCreatePinnedToCore(&detect_Task, "detect", 8 * 1024, (void*)afe_data, 5, NULL, 0);
xTaskCreatePinnedToCore(&feed_Task, "feed", 8 * 1024, (void*)afe_data, 5, NULL, 1);

初始化 phone UI:
ESP_LOGI(TAG, "Create phone object");
systems::phone::Phone *phone = new systems::phone::Phone(disp);
phone->setTouchDevice(tp);
Stylesheet *stylesheet = new systems::phone::Stylesheet(STYLESHEET_360_360_DARK);
ESP_UTILS_CHECK_NULL_EXIT(stylesheet, "Create stylesheet failed");
ESP_UTILS_LOGI("Using stylesheet (%s)", stylesheet->core.name);
ESP_UTILS_CHECK_FALSE_EXIT(phone->addStylesheet(stylesheet), "Add stylesheet failed");
ESP_UTILS_CHECK_FALSE_EXIT(phone->activateStylesheet(stylesheet), "Activate stylesheet failed");
delete stylesheet;
安装 SquarelineDemo APP:
auto app3 = esp_brookesia::apps::SquarelineDemo::requestInstance();
ESP_UTILS_CHECK_FALSE_EXIT(phone->installApp(app3),"start Drawpanel failed");




初始化 QMI8658, 并循环读取数据:
void app_main(void)
{
qmi8658_dev = bsp_qmi8658_drv_init();
while (1)
{
qmi8658_data_t data;
bool ready;
esp_err_t ret = qmi8658_is_data_ready(qmi8658_dev, &ready);
if (ret == ESP_OK && ready)
{
ret = qmi8658_read_sensor_data(qmi8658_dev, &data);
if (ret == ESP_OK)
{
ESP_LOGI("TAG", "Accel: X=%.4f m/s², Y=%.4f m/s², Z=%.4f m/s²",data.accelX, data.accelY, data.accelZ);
ESP_LOGI("TAG", "Gyro: X=%.4f rad/s, Y=%.4f rad/s, Z=%.4f rad/s",data.gyroX, data.gyroY, data.gyroZ);
ESP_LOGI("TAG", "Temp: %.2f °C, Timestamp: %lu",data.temperature, data.timestamp);
}
}
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
打开串口监视器

初始化 pcf85063a, 并设置时间:
esp_err_t ret = pcf85063a_init(&dev, bus_handle, PCF85063A_ADDRESS);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to initialize PCF85063A (error: %d)", ret);
vTaskDelete(NULL);
}
ESP_LOGI(TAG, "Set current time.");
pcf85063a_set_time_date(&dev, Set_Time);
打开串口监视器

初始化 bq27220
bq27220_handle_t bq27220_drv_init(void)
{
i2c_bus = bsp_i2c_bus_get_handle();
bq27220_config_t bq27220_cfg = {
.i2c_bus = i2c_bus,
.cfg = &default_config,
.cedv = &default_cedv,
};
bq27220 = bq27220_create(&bq27220_cfg);
if (!bq27220) {
ESP_LOGE(TAG, "bq27220 create failed");
}
return bq27220;
}
打印电池相关信息
static void test_bq27220_print_info(bq27220_handle_t bq27220Handle)
{
battery_status_t status = {};
bq27220_get_battery_status(bq27220Handle, &status);
ESP_LOGI(TAG, "Battery Status1 - DSG:%d SYSDWN:%d TDA:%d BATTPRES:%d AUTH_GD:%d OCVGD:%d TCA:%d RSVD:%d",
status.DSG, status.SYSDWN, status.TDA, status.BATTPRES,
status.AUTH_GD, status.OCVGD, status.TCA, status.RSVD);
ESP_LOGI(TAG, "Battery Status2 - CHGINH:%d FC:%d OTD:%d OTC:%d SLEEP:%d OCVFAIL:%d OCVCOMP:%d FD:%d",
status.CHGINH, status.FC, status.OTD, status.OTC,
status.SLEEP, status.OCVFAIL, status.OCVCOMP, status.FD);
uint16_t vol = bq27220_get_voltage(bq27220Handle);
int16_t current = bq27220_get_current(bq27220Handle);
uint16_t rc = bq27220_get_remaining_capacity(bq27220Handle);
uint16_t full_cap = bq27220_get_full_charge_capacity(bq27220Handle);
uint16_t temp = bq27220_get_temperature(bq27220Handle) / 10 - 273;
uint16_t cycle_cnt = bq27220_get_cycle_count(bq27220Handle);
uint16_t soc = bq27220_get_state_of_charge(bq27220Handle);
int16_t avg_power = bq27220_get_average_power(bq27220Handle);
int16_t max_load = bq27220_get_maxload_current(bq27220Handle);
uint16_t time_to_empty = bq27220_get_time_to_empty(bq27220Handle);
uint16_t time_to_full = bq27220_get_time_to_full(bq27220Handle);
ESP_LOGI(TAG,
"Battery Info - Vol:%dmV Cur:%dmA Pwr:%dmW RC:%dmAh FCC:%dmAh "
"Temp:%dC Cycle:%d SOC:%d%% MaxLoad:%dmA TTE:%dmin TTF:%dmin",
vol, current, avg_power, rc, full_cap, temp,
cycle_cnt, soc, max_load, time_to_empty, time_to_full);
}
打开串口监视器

XiaozhiAI(小智 AI)是一个基于 ESP32 开发板的开源 AI 语音聊天机器人项目,旨在将大语言模型(LLM)的通用智能赋予边缘设备。它提供了一套软硬件结合的解决方案,支持全双工语音对话及 IoT 设备控制,致力于协助开发者低成本、快速地构建高定制度的实体 AI 智能体。
本文演示如何为微雪电子支持小智 AI 的 ESP32 开发板烧录固件,包括无开发环境烧录(直接烧录预编译固件)和有开发环境烧录(从源码编译并烧录)两种方式。
本文以 ESP32-S3-Touch-AMOLED-1.8 开发板为例进行演示,若使用其他开发板,操作步骤类似。
请先确认你的硬件在 小智 AI 适配产品列表 中。

访问 小智 GitHub 下载对应设备的固件文件,点击 Assets 展开全部文件列表:

参考 Flash 固件的烧录与擦除教程 完成固件烧录。
此仓库 汇总了微雪电子支持小智 AI 的 ESP32 开发板固件,所有固件均已在对应开发板上测试验证,方便用户集中查找和下载。固件版本更新可能略晚于小智官方仓库。
访问 微雪 GitHub 仓库,根据需求选择合适版本的固件进行下载:

参考 Flash 固件的烧录与擦除教程 完成固件烧录。
访问 XiaoZhi AI Chatbot 仓库下载完整工程代码:

参考 ESP-IDF 环境搭建教程 完成开发环境的配置。
点击 选择目标设备,根据您的开发板选择对应的芯片型号(如
esp32s3):

设置目标设备时,ESP-IDF 会自动配置相应的工具链和库,此过程可能需要一些时间,请耐心等待。更多详情请参阅 官方文档。
点击 打开 ESP-IDF 终端,执行
idf.py menuconfig 命令进入配置界面,选择 Xiaozhi Assistant:

选择 Board Type 进入开发板类型选择:

选择与您的开发板对应的产品型号:

按 S 键保存配置并退出,然后点击 一键构建、烧录和监视图标,自动完成编译、烧录和串口监视。
使用手机或电脑连接设备的 WiFi 热点:Xiaozhi-xxxxxx。连接成功后通常会自动跳转到配置页面,若未自动跳转,请手动在浏览器中访问 http://192.168.4.1。
在网络配置页面选择要连接的 WiFi 名称(仅支持 2.4G 频段;若要连接 iPhone 热点,需在手机系统设置中开启最大兼容性),SSID 将自动填入,输入密码后点击 Connect 开始连接:

确保设备已成功连接到互联网,此时设备会播报 6 位设备验证码(可重复唤醒设备再次播报)。
访问 小智 AI 控制面板,如未注册请先完成账号注册并登录:



输入 6 位验证码后,设备将自动激活并显示在设备管理页面,即可正常使用。
说出唤醒词 "你好,小智" 即可唤醒设备,开始语音对话。
ESP32-S3-Touch-AMOLED-1.8 按键说明:

开发板设计文件
ESP32-S3 芯片官方手册
数据手册
周一-周五(9:30-6:30)周六(9:30-5:30)
手机:13434470212
邮箱:services04@spotpear.cn
QQ:202004841
