xiaozhi-esp32 板级适配实战:无名科技星智 ABS 2.0(Wi-Fi + ML307R 4G 双网语音开发板)从按键交互到编译烧录全解析
【免费下载链接】xiaozhi-esp32An MCP-based chatbot | 一个基于MCP的聊天机器人项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32
本文以 xiaozhi-esp32 开源仓库中「无名科技星智 ABS 2.0」开发板的官方文档为核心,结合 板级实现源码、引脚配置 与双网络基类实现,系统讲解这款板卡的双网络切换、物理按键多阶交互、SD 卡扩展、震动反馈与分级休眠机制,并给出完整的编译、烧录与网络模式切换实操步骤,帮助读者直接上手或在 xiaozhi-esp32 固件中二次适配同类硬件。
一、板卡定位:无 Wi-Fi 也能对话的 4G 语音开发板
无名科技星智 ABS 2.0 是面向小智 ESP32 项目生态的一款高性价比 AI 语音交互开发板。它搭载1.54 寸 240×240 LCD 屏幕、独立的物理按键(Boot 功能键 + 音量加减键),并采用ML307R Cat.1 4G 通信模组,在没有 Wi-Fi 覆盖的户外、车载、校园等场景下依然可以直接与大模型进行语音对话。
从源码看,该板卡在固件中的注册名为XINGZHI_ABS_2_0,类继承自DualNetworkBoard(双网络板基类):
class XINGZHI_ABS_2_0 : public DualNetworkBoard { ... }; DECLARE_BOARD(XINGZHI_ABS_2_0);对应文件:xingzhi-abs-2.0.cc、config.json("target": "esp32s3",即编译目标为 ESP32-S3)。
二、核心特性总览
根据官方 README,星智 ABS 2.0 的核心特性可归纳为以下六点:
- 双网络通信:支持 Wi-Fi 与 ML307R Cat.1 4G 双模切换,适配室内外多场景使用;
- 显示系统:1.54 寸 240×240 LCD 屏幕,针对方形屏对底部表情与文本显示位置做了自定义 UI 布局优化;
- 物理按键交互:独立 Boot 功能键、音量加/减键,支持单击、双击、长按、五击等多阶操作;
- 扩展能力:内置 Micro SD 卡插槽,支持本地存储扩展;预留震动马达,实现按键操作触觉反馈;
- 完善的电源管理:支持电池电量 ADC 检测、充电状态实时监测、自动休眠与深度睡眠节能控制;
- 生态兼容:完全适配小智 ESP32 项目固件,支持 Qwen/DeepSeek 等大模型,兼容 MCP 协议设备控制。
其中第 2 点的 UI 优化在源码中有直接体现:板卡使用了自定义的CustomLcdDisplay(见 customlcddisplay.h),它继承自SpiLcdDisplay,在 LVGL 界面初始化完成后通过定时器检测,将表情框emoji_box_居中并上移 5 像素(lv_obj_align(emoji_box_, LV_ALIGN_CENTER, 0, -5)),同时将底部状态栏bottom_bar_调整为贴合 1.54 寸方形屏的尺寸并对齐底部(LV_ALIGN_BOTTOM_MID,偏移0, -5)。这正是 README 中所说“由于硬件差异,UI 显示上对底部表情和文本的显示位置稍有改动”的实现细节。
三、与铝合金版本(XINGZHI_METAL_1_54_WIFI)的核心差异
官方文档用一张对比表说明了 ABS 2.0 与铝合金版本(xingzhi-metal-1.54-wifi)的定位区别:
| 功能特性 | xingzhi-abs-2.0 | 铝合金版本 |
|---|---|---|
| 交互方式 | 独立物理按键(Boot/音量+/音量-) | CST816 触摸芯片 + 触摸交互 |
| 外壳材质 | ABS 工程塑料 | 铝合金材质 |
两者同为 1.54 寸方形屏产品,但 ABS 版主打性价比与实体按键的确定性操作,金属版主打触摸交互与质感。在固件源码层面,ABS 版通过Button组件绑定 GPIO(BOOT_BUTTON_GPIO/VOLUME_UP_BUTTON_GPIO/VOLUME_DOWN_BUTTON_GPIO)实现按键,而金属版则依赖触摸芯片中断,这是二者适配代码最直观的差异。
四、物理按键操作详解(源码级印证)
星智 ABS 2.0 的全部按键逻辑集中在InitializePhysicalButtons()(xingzhi-abs-2.0.cc 内),与官方 README 的按键说明一一对应:
开机:关机状态,长按电源键 3 秒后自动开机(电源键由 power_manager.h 中的
Power_Control/Power_Dec引脚与定时器轮询实现);关机:开机状态,长按电源键 5 秒后自动关机(源码中power_off_ticks_ = 20,配合 200ms 周期的电源控制定时器,即约 5 秒触发关机流程,且检测到 USB 插入时拒绝软件关机);唤醒/打断:正常通话/待机状态下,单击 Boot 功能键,可唤醒设备或打断正在进行的语音对话(源码:boot_button_.OnClick中调用power_save_timer_->WakeUp()后执行app.ToggleChatState(),并在按键瞬间触发 50ms 震动反馈);重新配网:开机后 1 秒钟内,单击 Boot 功能键,设备会自动重启并进入配网界面(源码:当设备处于kDeviceStateStarting且当前网络为 Wi-Fi 时,调用wifi_board.EnterWifiConfigMode());切换网络模式:开机状态下,双击 Boot 功能键,可切换 Wi-Fi 与 4G 网络模式(源码:boot_button_.OnDoubleClick中当设备处于启动或配网状态时调用SwitchNetworkType());SD 卡状态检测:开机状态下,五击 Boot 功能键,可检测并在屏幕显示 SD 卡挂载状态(源码:boot_button_.OnMultipleClick(..., 5)回调中根据is_sdcard_found显示“开机检测到SD挂载成功/失败”);增加音量:单击音量+键,音量增加 10%;长按音量+键 2s,音量直接递增至 100% 最大音量(源码:OnClick中output_volume + 10并截断到 100,屏幕弹出音量通知;OnLongPress直接SetOutputVolume(100)并提示MAX_VOLUME);减小音量:单击音量-键,音量减小 10%;长按音量-键 2s,音量直接递减至 0% 静音(源码:OnClick中output_volume - 10并截断到 0;OnLongPress直接SetOutputVolume(0)并提示MUTED)。
每个按键动作都会先通过TriggerVibrateEvent()向振动任务队列发送事件,由独立 FreeRTOS 任务VibrateTask驱动 GPIO 输出 50ms 高电平,产生触觉反馈——这是 README 中“预留震动马达,实现按键操作触觉反馈”的实际实现。
网络模式切换的底层原理
双击 Boot 键触发的SwitchNetworkType()定义在双网络基类 dual_network_board.cc 中:
void DualNetworkBoard::SwitchNetworkType() { if (network_type_ == NetworkType::WIFI) { SaveNetworkTypeToSettings(NetworkType::ML307); display->ShowNotification(Lang::Strings::SWITCH_TO_4G_NETWORK); } else { SaveNetworkTypeToSettings(NetworkType::WIFI); display->ShowNotification(Lang::Strings::SWITCH_TO_WIFI_NETWORK); } vTaskDelay(pdMS_TO_TICKS(1000)); Application::GetInstance().Reboot(); }其工作流程为:将目标网络类型写入 NVS 设置(Settings("network", true)的type字段,1表示 ML307、0表示 Wi-Fi),屏幕提示切换结果,延时 1 秒后整机重启;重启时构造函数中通过LoadNetworkTypeFromSettings()读回持久化的网络类型,并只初始化对应的板卡(Ml307Board或WifiBoard)。默认网络为 ML307 4G,这保证了无 Wi-Fi 场景下开箱即用。
五、休眠与电源管理机制
星智 ABS 2.0 采用分级休眠策略,官方文档描述如下:
浅睡眠:开机后维持待命状态 60s,进入浅睡眠(屏幕亮度调整到 1%);深睡眠:开机后维持待命状态 300s,自动关机;唤醒:浅睡眠状态下,单击任意按键唤醒设备(屏幕亮度回调)。
对应源码中的InitializePowerSaveTimer():
power_save_timer_ = new PowerSaveTimer(-1, 60, 300);PowerSaveTimer(见 power_save_timer.h)的三个参数分别为 CPU 最大频率、进入浅睡眠的秒数(60s)、触发关机的秒数(300s)。其回调行为为:
- 进入浅睡眠:清空系统消息、表情切换为
sleepy、背光亮度降至 1%; - 退出浅睡眠:表情恢复
neutral、背光恢复原亮度(RestoreBrightness()); - 请求关机:调用
power_manager_->shutdown(),由电源管理模块先尝试通过电源控制引脚触发硬件断电,若失败则降级为esp_deep_sleep_start()深度睡眠。
值得注意的是,电源管理模块(power_manager.h)还承担了电池电量检测:通过 ADC 单次转换读取电池电压(POWER_BATTERY_ADC_CHANNEL),采用 3 点滑动平均滤波,再按 {1970, 2062, 2154, 2246, 2338, 2430} 六段 ADC 阈值做线性插值,映射为 0~100% 电量;同时检测 USB 插入(POWER_USBIN_ADC_CHANNEL,ADC 值介于 1500~4000 判定为充电中)。充电状态下休眠定时器自动禁用,放电状态恢复启用;电量 ≤20% 时触发低电量告警。当设备以电池供电且处于放电状态时,GetBatteryLevel()会在放电状态变化时动态启用/禁用省电定时器,实现“充电不休眠、放电自动省电”的智能策略。
六、编译配置与烧录步骤
星智 ABS 2.0 的编译流程与标准 ESP-IDF 工程一致,需要 ESP-IDF(支持 ESP32-S3)环境。完整步骤如下:
1. 克隆工程
git clone https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32.git2. 进入工程
cd xiaozhi-esp323. 配置编译目标为 ESP32S3
idf.py set-target esp32s3该目标与板卡目录下 config.json 中声明的"target": "esp32s3"一致,是编译该板卡固件的前提。
4. 打开 menuconfig
idf.py menuconfig5. 选择板子
在菜单中依次进入:
Xiaozhi Assistant → Board Type → 选择「无名科技星智ABS 2.0」该选项对应 Kconfig.projbuild 中的BOARD_TYPE_XINGZHI_ABS_2_0配置项,其构建路径在 CMakeLists.txt 中映射为nologo/xingzhi-abs-2.0目录。
6. 编译
idf.py build7. 下载固件并打开串口终端
idf.py build flash monitor烧录完成后设备默认以ML307 4G模式启动(双网络基类默认network_type_ = NetworkType::ML307),无需 Wi-Fi 即可通过 4G 网络接入大模型;如需切换到 Wi-Fi,按前述“双击 Boot 键”操作即可。
七、硬件引脚速查(二次适配参考)
星智 ABS 2.0 的引脚全部集中定义在 config.h 中,是理解板级实现和进行硬件排查的重要依据,整理如下:
| 模块 | 引脚(GPIO_NUM) | 说明 |
|---|---|---|
| 音频 I2S | WS=4, MCLK=5, BCLK=6, DIN=17, DOUT=15 | 采样率 24kHz,AUDIO_INPUT_REFERENCE true |
| 音频编解码 I2C | SDA=41, SCL=42,PA_EN=21 | ES8311 编解码器 |
| 按键 | Boot=0, 音量+=45, 音量-=2 | 支持单击/双击/长按/五击 |
| SD 卡 SPI | DATA0=39, CLK=38, CMD=40, CS=46 | 挂载点/sdcard,SPI2_HOST |
| 震动马达 | 3 | 按键触觉反馈 |
| 屏幕 SPI | SDA=10, SCL=9, DC=8, CS=14, RES=18 | ST7789,240×240,SPI3_HOST |
| 背光 | 13 | PWM 控制,输出不取反 |
| 4G 模组 | RX=11, TX=12 | ML307R UART |
| 电源管理 | USB_IN=1, 电源控制=47, 电源键检测=48 | 电池 ADC 通道 6(GPIO7) |
固件运行时通过 I2C 总线探测(地址 1~126)自动发现外设并打印日志;SPI 总线分别初始化屏幕(SPI3_HOST)与 SD 卡(SPI2_HOST)两条独立总线,互不干扰。若 SD 卡未插入或初始化失败,InitializeSDcardSpi()会记录错误日志并将is_sdcard_found置为false,五击 Boot 键即可在屏幕确认挂载状态。
八、总结
无名科技星智 ABS 2.0 是 xiaozhi-esp32 生态中一款典型“双网络 + 物理按键 + 低成本”的语音交互开发板:通过DualNetworkBoard基类获得 Wi-Fi/ML307R 4G 双模切换能力,通过PowerSaveTimer与PowerManager实现 60s 浅睡眠/300s 深度关机的分级省电,通过自定义CustomLcdDisplay完成 1.54 寸方形屏的 UI 适配,并通过 Boot/音量键的多阶交互覆盖唤醒、打断、配网、切网、SD 卡检测与音量调节等全部日常操作。对开发者而言,本板既是开箱即用的 4G 语音终端,也是研究 xiaozhi-esp32 双网络板卡适配、按键状态机与电源策略的一份完整参考实现。
【免费下载链接】xiaozhi-esp32An MCP-based chatbot | 一个基于MCP的聊天机器人项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考