尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

在 xiaozhi-esp32 中编译适配 Waveshare ESP32-C6-Touch-AMOLED-1.43:从 menuconfig 选板到烧录运行

在 xiaozhi-esp32 中编译适配 Waveshare ESP32-C6-Touch-AMOLED-1.43:从 menuconfig 选板到烧录运行 在 xiaozhi-esp32 中编译适配 Waveshare ESP32-C6-Touch-AMOLED-1.43从 menuconfig 选板到烧录运行【免费下载链接】xiaozhi-esp32An MCP-based chatbot | 一个基于MCP的聊天机器人项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32本文是 xiaozhi-esp32 开源项目针对微雪WaveshareESP32-C6-Touch-AMOLED-1.43 开发板的中文实战指南。文章以官方板级说明文档 main/boards/waveshare/esp32-c6-touch-amoled-1.43/README.md 为骨架完整复现其编译配置全流程并结合仓库内的板级源码config.h、config.json、板级 C 实现逐层剖析该板子的硬件资源分配、SH8601 AMOLED 显示驱动、I2C 触摸、音频 Codec 与 MCP 屏幕亮度工具的实现细节。读完本文你将能够独立完成该板子从克隆工程、设置目标芯片、menuconfig 选板、编译到烧录运行的完整闭环并具备按需裁剪板级配置的能力。一、板卡概况为什么选择这块板子Waveshare ESP32-C6-Touch-AMOLED-1.43 是一款基于乐鑫 ESP32-C6 芯片的触摸屏开发板与 ESP32-C6-Touch-AMOLED-1.43-B 为同系列后者在电池、接插件等外围上略有差异编译配置完全相同。它在 xiaozhi-esp32 生态中的定位是一款自带圆形 1.43 英寸 AMOLED 触摸屏的 Wi-Fi 语音对话终端主控ESP32-C6支持 2.4GHz Wi-Fi 6 与 BLE 5适合低功耗语音设备显示1.43 英寸 SH8601 驱动的 AMOLED分辨率 466×466支持 QSPI 四线高速刷屏可流畅承载 LVGL 表情、时钟等 UI交互板载 I2C 电容触摸屏配合 BOOT 按键实现语音对讲音频ES8311 音频 CodecADCDAC ES7210 四通道 ADC 麦克风阵列AEC 参考输入采样率 24kHz电源管理可选锂电池供电支持长按 PWR 键关机详见板级源码注释。该板级支持已完整合入仓库对应的板级定义位于main/boards/waveshare/esp32-c6-touch-amoled-1.43/目录下由config.json构建配置、config.h引脚/参数宏与esp32-c6-touch-amoled-1.43.cc板级驱动实现三个文件组成。二、编译配置全流程官方步骤逐条讲解以下是官方 README 给出的完整编译流程。准备工作已安装 ESP-IDF建议 v5.x 及以上项目根目录 sdkconfig.defaults.esp32c6 依赖较新的 IDF 特性并配置好idf.py命令行环境。1. 克隆工程git clone https://github.com/78/xiaozhi-esp32.git注意官方 README 克隆的是 GitHub 上游地址78/xiaozhi-esp32。若你使用的是镜像仓库克隆地址以镜像为准后续命令完全一致。2. 进入工程目录cd xiaozhi-esp323. 设置编译目标为 ESP32-C6idf.py set-target esp32c6该命令会按目标芯片生成对应的sdkconfig。项目为 ESP32-C6 提供了专用默认配置 sdkconfig.defaults.esp32c6其中关键项包括CONFIG_PARTITION_TABLE_CUSTOM_FILENAMEpartitions/v2/16m_c3.csv使用 16MB 分区分区表v2 版适配带唤醒词模型的固件布局CONFIG_ESPTOOLPY_FLASHMODE_QIOyQIO 四线 SPI Flash 模式CONFIG_SR_WN_WN9S_NIHAOXIAOZHIy内置乐鑫语音识别ESP-SR的你好小智唤醒词模型。4. 打开 menuconfigidf.py menuconfig5. 选择板卡在 menuconfig 图形界面中依次进入Xiaozhi Assistant - Board Type - Waveshare ESP32-C6-Touch-AMOLED-1.43该选项对应 Kconfig 中的CONFIG_BOARD_TYPE_WAVESHARE_ESP32_C6_TOUCH_AMOLED_1_43其声明位于 main/Kconfig.projbuild并带有depends on IDF_TARGET_ESP32C6约束——这正是前面必须set-target esp32c6的原因。选中后main/CMakeLists.txt 会据此将编译目录指向waveshare/esp32-c6-touch-amoled-1.43并选用 30px 级字体font_noto_sans_basic_30_4、font_material_symbols_30_4与noto-color-emoji_64彩色 emoji 集合——30px 字号明显是为 466×466 的高分 AMOLED 屏幕优化的。6. 编译idf.py build首次编译会拉取main/idf_component.yml中声明的组件依赖含 ESP-SR 语音识别、LVGL、esp_lcd 相关驱动等耗时较长属正常现象。7. 烧录并打开串口监视器idf.py build flash monitor连接开发板若首次使用请先安装 USB 转串口驱动并确认/dev/ttyUSBx或 Windows 对应 COM 口烧录完成后自动进入 monitor。首次上电会进入配网流程通过串口提示或小智配网工具完成 Wi-Fi 配置后即可开始语音对话。三、构建配置详解config.jsonmain/boards/waveshare/esp32-c6-touch-amoled-1.43/config.json 是板级构建清单{ manufacturer: waveshare, type: esp32-c6-touch-amoled-1.43, target: esp32c6, builds: [ { name: esp32-c6-touch-amoled-1.43, sdkconfig_append: [ CONFIG_USE_ESP_WAKE_WORDy ] } ] }manufacturer/type板卡厂商与型号标识target目标芯片固定为esp32c6与idf.py set-target esp32c6一致builds[].sdkconfig_append构建时追加的配置项。此处CONFIG_USE_ESP_WAKE_WORDy显式启用了乐鑫 ESP Wake Word 唤醒词方案配套的唤醒词引擎实现见 main/audio/wake_words/esp_wake_word.cc即默认采用你好小智作为离线唤醒词唤醒后进入语音交互。四、板级资源与引脚分配config.h 解读main/boards/waveshare/esp32-c6-touch-amoled-1.43/config.h 集中定义了全部硬件资源映射理解它是后续裁剪、移植或排查硬件问题的关键。音频通路宏定义值说明AUDIO_INPUT_SAMPLE_RATE24000输入采样率 24kHzES7210 麦克风阵列AUDIO_OUTPUT_SAMPLE_RATE24000输出采样率 24kHzES8311 喇叭AUDIO_INPUT_REFERENCEfalse关闭参考信号此板未用 I2S 回采做 AEC 参考AUDIO_I2S_GPIO_MCLK/WS/BCLK/DIN/DOUT19 / 22 / 21 / 20 / 23I2S 音频总线引脚AUDIO_CODEC_PA_PINGPIO_NUM_NC无独立功放使能脚Codec 内部管理AUDIO_CODEC_I2C_SDA/SCL_PIN18 / 8Codec 控制 I2C 总线AUDIO_CODEC_ES8311_ADDRES8311_CODEC_DEFAULT_ADDRES8311 DAC/ADC 地址AUDIO_CODEC_ES7210_ADDRES7210_CODEC_DEFAULT_ADDRES7210 多通道 ADC 地址音频侧使用BoxAudioCodecmain/audio/codecs/box_audio_codec.h组合 ES8311 与 ES7210 两颗芯片形成多麦拾音 单声道播放的经典语音盒子方案。触摸与 IO 扩展宏定义值说明I2C_Touch_ADDRESS0x38触摸控制器 I2C 地址I2C_ADDRESSESP_IO_EXPANDER_I2C_TCA9554_ADDRESS_000TCA9554 IO 扩展器地址BOOT_BUTTON_GPIOGPIO_NUM_9BOOT 按键对讲PWR_BUTTON_GPIOGPIO_NUM_2PWR 按键长按关机LCDSH8601 AMOLED宏定义值说明LCD_CS/PCLK/D0~D3/RST10 / 11 / 4 / 5 / 6 / 7 / 3SPI/QSPI 显示总线LCD_LIGHT(-1)背光由屏内寄存器控制见下文 MCP 工具EXAMPLE_LCD_H_RES/V_RES466 / 466屏幕物理分辨率DISPLAY_MIRROR_X/Y、DISPLAY_SWAP_XYfalse无镜像/无旋转DISPLAY_OFFSET_X/Y0 / 0无偏移五、板级驱动实现剖析esp32-c6-touch-amoled-1.43.ccmain/boards/waveshare/esp32-c6-touch-amoled-1.43/esp32-c6-touch-amoled-1.43.cc 继承WifiBoardmain/boards/common/wifi_board.h实现板级初始化其构造顺序为InitializeI2c - InitializeTca9554 - InitializeSpi - InitializeLcdDisplay - InitializeButtons - InitializeTools最后通过DECLARE_BOARD(CustomBoard)注册为可被Application实例化的板型。1. SH8601 AMOLED 的 QSPI 驱动InitializeSpi以 4 根数据线D0~D3初始化 SPI2 总线InitializeLcdDisplay中面板 IO 配置了quad_mode true与lcd_cmd_bits 32并以 40MHz 时钟运行配合esp_lcd_new_panel_sh8601建立 SH8601 面板实例。初始化命令序列lcd_init_cmds里包含0x11退出睡眠、0x53显示增强、0x51背光亮度、0x29开显示等关键命令。值得注意的细节是CustomLcdDisplay重写了SetupUI()通过 LVGL 的LV_EVENT_INVALIDATE_AREA事件回调MyDrawEventCb将每次刷新脏矩形对齐到 2 的倍数起始坐标向下取偶、结束坐标向上取奇。AMOLED 面板通常要求刷新区域字节对齐这一做法可避免奇数坐标导致的显示花屏是高分圆形屏适配中的典型技巧。2. TCA9554 IO 扩展器InitializeTca9554通过esp_io_expander_new_i2c_tca9554创建扩展器实例并将 PIN6/PIN7 配置为输出高电平。从按键逻辑看PIN6 用于控制电源通路长按 PWR 时拉低实现关机PIN7 用于使能外设供电具体由pwr_flag状态机配合OnLongPress/OnPressUp事件完成点按点亮、长按关机的电源管理。3. 触摸输入InitializeTouch将地址0x38的触摸控制器挂到 I2C 总线300kHz并注册 LVGLLV_INDEV_TYPE_POINTER输入设备。TouchInputReadCallback每次读取寄存器0x02的 5 字节数据首字节非零表示有触摸随后按 12bit 位宽解析 X/Y 坐标并做屏幕分辨率越界钳制后写入 LVGL。这保证了手指滑动与 LVGL 控件点击的实时映射。4. 按键与语音对讲InitializeButtons中 BOOT 键承担双重职责短按OnClick若设备处于kDeviceStateStarting启动状态则进入 Wi-Fi 配网模式EnterWifiConfigMode()按下/抬起OnPressDown/OnPressUp分别调用Application::GetInstance().StartListening()与StopListening()实现按住说话、松开结束的 PTTPush-to-Talk对讲体验。5. MCP 屏幕亮度工具InitializeTools向 MCP Servermain/mcp_server.h注册了一个自定义工具mcp_server.AddTool(self.disp.setbacklight, 设置屏幕亮度, PropertyList({ Property(level, kPropertyTypeInteger, 0, 255) }), this - ReturnValue { int level properties[level].valueint(); SetDispbacklight(level); return true; });SetDispbacklight向 SH8601 发送命令0x51背光亮度寄存器并携带 0~255 的亮度值。这意味着接入小智 MCP 服务器后Agent/LLM 可以直接调用self.disp.setbacklight工具通过自然语言控制这块 AMOLED 的屏幕亮度——例如把屏幕调暗一点这是板级能力与 MCP 协议结合的典型示例MCP 协议细节可参考 docs/mcp-protocol_zh.md。六、FAQ 与排障建议menuconfig 里找不到该板卡确认已执行idf.py set-target esp32c6板卡选项依赖IDF_TARGET_ESP32C6烧录失败/串口无法识别检查 USB 驱动与端口权限Linux 下可将当前用户加入dialout组并确认按住 BOOT 键进入下载模式编译报 ESP-SR 相关错误确认已按 README.md 完成 esp-sr 模型下载配置且分区表使用 16MB 方案见 partitions/v2/16m_c3.csv唤醒不灵敏板级默认启用CONFIG_USE_ESP_WAKE_WORDy可检查串口日志中的唤醒词初始化是否成功。七、参考与延伸板级官方说明本文骨架main/boards/waveshare/esp32-c6-touch-amoled-1.43/README.md板级构建清单config.json引脚与参数宏config.h板级驱动实现esp32-c6-touch-amoled-1.43.cc板卡注册与字体选择main/CMakeLists.txt、Kconfig 选项 main/Kconfig.projbuild同系列其他板卡1.32 / 1.8 / 2.06 / 2.16 英寸 AMOLED目录main/boards/waveshare/配置方式与本板完全一致仅需在 menuconfig 中选择对应型号。【免费下载链接】xiaozhi-esp32An MCP-based chatbot | 一个基于MCP的聊天机器人项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表