尧图精选

xiaozhi-esp32 板级适配实战:无名科技星智 ABS 2.0(Wi-Fi + ML307R 4G 双网语音开发板)从按键交互到编译烧录全解析

🕒 发布时间:2026/9/11 20:18:12 📁 来源:尧图网络
xiaozhi-esp32 板级适配实战无名科技星智 ABS 2.0Wi-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.jsontarget: 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组件绑定 GPIOBOOT_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并截断到 0OnLongPress直接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_CHANNELADC 值介于 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. 配置编译目标为 ESP32S3idf.py set-target esp32s3该目标与板卡目录下 config.json 中声明的target: esp32s3一致是编译该板卡固件的前提。4. 打开 menuconfigidf.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说明音频 I2SWS4, MCLK5, BCLK6, DIN17, DOUT15采样率 24kHzAUDIO_INPUT_REFERENCE true音频编解码 I2CSDA41, SCL42PA_EN21ES8311 编解码器按键Boot0, 音量45, 音量-2支持单击/双击/长按/五击SD 卡 SPIDATA039, CLK38, CMD40, CS46挂载点/sdcardSPI2_HOST震动马达3按键触觉反馈屏幕 SPISDA10, SCL9, DC8, CS14, RES18ST7789240×240SPI3_HOST背光13PWM 控制输出不取反4G 模组RX11, TX12ML307R UART电源管理USB_IN1, 电源控制47, 电源键检测48电池 ADC 通道 6GPIO7固件运行时通过 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),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →