打造专属AI助手:Lilygo-T-Circle-S3圆形板开发指南
你是否想拥有一个随身携带的AI语音助手?Lilygo-T-Circle-S3圆形开发板(简称T-Circle-S3)为你提供了实现这一目标的完美平台。这款基于ESP32-S3芯片的圆形开发板集成了触摸屏、麦克风和扬声器,非常适合构建小型化的AI语音交互设备。本文将带你从零开始,完成从环境搭建到功能实现的全过程,让你在一天内就能拥有自己的AI助手。
开发板概览
Lilygo-T-Circle-S3是一款设计精美的圆形开发板,采用ESP32-S3芯片,配备1.28英寸圆形TFT触摸屏、内置麦克风和扬声器,非常适合构建便携式AI语音设备。
开发板主要特点:
- ESP32-S3芯片,支持Wi-Fi和蓝牙
- 1.28英寸240x240分辨率圆形触摸屏
- 内置MSM261麦克风和MAX98357A音频放大器
- APA102 RGB LED环形灯
- 旋转编码器,方便音量调节
硬件准备
在开始软件开发前,需要准备以下硬件:
- Lilygo-T-Circle-S3开发板
- USB Type-C数据线
- 电脑(Windows、macOS或Linux)
- (可选)3.7V锂电池
开发板引脚布局定义在pin_config.h文件中,主要包括:
// 音频相关引脚
#define MAX98357A_BCLK 5 // 音频输出时钟
#define MAX98357A_LRCLK 4 // 音频输出左右声道时钟
#define MAX98357A_DATA 6 // 音频输出数据
#define MSM261_BCLK 7 // 麦克风时钟
#define MSM261_WS 9 // 麦克风左右声道选择
#define MSM261_DATA 8 // 麦克风数据
// 显示屏相关引脚
#define LCD_WIDTH 160 // 显示屏宽度
#define LCD_HEIGHT 160 // 显示屏高度
#define LCD_MOSI 17 // 显示屏SPI数据
#define LCD_SCLK 15 // 显示屏SPI时钟
#define LCD_DC 16 // 显示屏数据/命令控制
#define LCD_CS 13 // 显示屏片选
#define LCD_BL 18 // 显示屏背光控制
开发环境搭建
安装ESP-IDF
T-Circle-S3开发基于ESP-IDF框架,需要先安装该开发环境:
# 克隆ESP-IDF仓库
git clone --recursive https://gitcode.com/espressif/esp-idf.git -b v5.1
cd esp-idf
# 安装依赖
./install.sh
# 设置环境变量
. ./export.sh
获取项目代码
git clone https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32.git
cd xiaozhi-esp32
配置开发板
项目已内置T-Circle-S3的配置文件,位于main/boards/lilygo-t-circle-s3/目录下,包含以下关键文件:
- config.json:编译配置
- config.h:硬件配置
- lilygo-t-circle-s3.cc:板级初始化代码
编译与烧录
基本编译命令
# 设置目标芯片为ESP32-S3
idf.py set-target esp32s3
# 配置项目
idf.py menuconfig
在配置菜单中,进入Xiaozhi Assistant -> Board Type,选择LILYGO T-Circle-S3:
配置开发板类型
编译与烧录
# 编译项目
idf.py build
# 烧录固件(连接开发板后)
idf.py -p /dev/ttyUSB0 flash monitor
注意:Windows系统端口通常为
COMx,如-p COM3
核心功能实现
音频配置
T-Circle-S3的音频配置在config.h中定义,包括采样率和I2S引脚映射:
#define AUDIO_INPUT_REFERENCE true
#define AUDIO_INPUT_SAMPLE_RATE 24000 // 麦克风采样率
#define AUDIO_OUTPUT_SAMPLE_RATE 24000 // 扬声器采样率
// 麦克风I2S配置
#define AUDIO_MIC_I2S_GPIO_BCLK static_cast<gpio_num_t>(MSM261_BCLK)
#define AUDIO_MIC_I2S_GPIO_WS static_cast<gpio_num_t>(MSM261_WS)
#define AUDIO_MIC_I2S_GPIO_DATA static_cast<gpio_num_t>(MSM261_DATA)
// 扬声器I2S配置
#define AUDIO_SPKR_I2S_GPIO_BCLK static_cast<gpio_num_t>(MAX98357A_BCLK)
#define AUDIO_SPKR_I2S_GPIO_LRCLK static_cast<gpio_num_t>(MAX98357A_LRCLK)
#define AUDIO_SPKR_I2S_GPIO_DATA static_cast<gpio_num_t>(MAX98357A_DATA)
显示屏驱动
T-Circle-S3使用GC9D01N显示屏驱动,相关代码在esp_lcd_gc9d01n.c中实现。显示屏初始化流程如下:
// 初始化SPI总线
spi_bus_config_t buscfg = {};
buscfg.mosi_io_num = DISPLAY_MOSI;
buscfg.sclk_io_num = DISPLAY_SCLK;
buscfg.max_transfer_sz = DISPLAY_WIDTH * DISPLAY_HEIGHT * sizeof(uint16_t);
ESP_ERROR_CHECK(spi_bus_initialize(SPI2_HOST, &buscfg, SPI_DMA_CH_AUTO));
// 初始化显示屏控制器
esp_lcd_panel_io_handle_t panel_io;
esp_lcd_panel_io_spi_config_t io_config = {};
io_config.cs_gpio_num = DISPLAY_CS;
io_config.dc_gpio_num = DISPLAY_DC;
io_config.spi_mode = 2;
io_config.pclk_hz = 80 * 1000 * 1000;
ESP_ERROR_CHECK(esp_lcd_new_panel_io_spi(SPI2_HOST, &io_config, &panel_io));
触摸功能
T-Circle-S3使用CST816D触摸控制器,通过I2C接口通信,相关配置:
#define TP_SDA 11 // I2C数据引脚
#define TP_SCL 14 // I2C时钟引脚
#define TP_INT 12 // 触摸中断引脚
触摸事件处理在main/boards/common/目录下的触摸驱动中实现。
自定义开发
修改唤醒词
默认唤醒词可以在编译配置中修改,通过idf.py menuconfig进入配置菜单,修改Audio Configuration -> Wake Word选项。
添加自定义UI
项目支持LVGL图形库,可以在main/display/lvgl_display/目录下添加自定义界面元素。例如,修改主界面:
void ui_main_screen() {
// 创建主屏幕
lv_obj_t *scr = lv_obj_create(NULL);
lv_scr_load(scr);
// 添加标题
lv_obj_t *title = lv_label_create(scr);
lv_label_set_text(title, "我的AI助手");
lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 10);
// 添加状态图标
lv_obj_t *icon = lv_img_create(scr);
lv_img_set_src(icon, &img_assistant);
lv_obj_align(icon, LV_ALIGN_CENTER, 0, -20);
}
扩展功能
根据自定义开发板指南,可以为T-Circle-S3添加更多功能,如:
- 温湿度传感器
- 运动传感器
- 扩展存储
故障排除
常见问题解决
-
显示屏无显示:检查LCD背光控制引脚是否正确配置,可尝试直接设置背光引脚为高电平。
-
音频无输出:确认MAX98357A的SD_MODE引脚是否正确配置,该引脚需要设置为高电平使能输出。
-
无法连接网络:长按BOOT按钮5秒重置Wi-Fi配置,重新进行网络配网。
-
触摸无响应:检查I2C引脚配置,确保触摸控制器已正确初始化。
总结与展望
通过本文的指南,你已经了解了如何使用Lilygo-T-Circle-S3开发板构建AI语音助手。从环境搭建到功能实现,我们涵盖了开发的主要步骤。基于这个平台,你可以进一步扩展功能,如添加人脸识别、环境监测等,打造真正属于自己的智能设备。
项目持续更新中,更多功能和优化将不断加入。欢迎在项目仓库提交issue和PR,一起完善这个开源项目。
参考资料
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




