main/boards/quandong-s3-dev/HARDWARE_DIFF.md
两块板都基于 ESP32-S3 + WiFi,软件层都继承 WifiBoard,启动 → 配网 → 接小智后端 → 语音对话 的主流程完全一致。差异集中在 音频路径、显示、人机交互 三块。
| 维度 | quandong-s3-dev | bread-compact-wifi |
|---|---|---|
| 芯片 | ESP32-S3 | ESP32-S3 |
| 基类 | WifiBoard | WifiBoard |
| 音频 codec | ES8311 硬 codec(I2C 控制 + I2S 全双工) | 无 codec:MEMS I2S 麦克 + I2S 数字功放(NoAudioCodec) |
| 显示 | ILI9341 240×320 SPI 彩屏 | SSD1306 / SH1106 OLED 128×32 或 128×64(I2C 单色) |
| 按键数 | 1(BOOT) | 4(BOOT、Touch、Vol+、Vol-) |
| 板载 LED | 无 | GPIO48 单色 |
| MCP 外设示例 | 无 | LampController(GPIO18) |
| 背光 | PWM on GPIO45 | OLED 无背光 |
| 字体 / emoji 资源 | font_noto_sans_basic_20_4 + font_material_symbols_20_4 + noto-color-emoji_64 | font_noto_sans_basic_14_1 + font_material_symbols_14_1(无 emoji) |
| 项 | 值 |
|---|---|
| Codec 芯片 | ES8311(I2C 地址 ES8311_CODEC_DEFAULT_ADDR) |
| I2C 总线 | I2C0,SDA = GPIO16,SCL = GPIO15 |
| I2S 模式 | Duplex(一套 I2S 复用) |
| I2S 引脚 | MCLK = GPIO4,BCLK = GPIO5,WS = GPIO7,DIN = GPIO6,DOUT = GPIO8 |
| 采样率 | 输入 / 输出 = 24000 / 24000 |
| 功放控制 | GPIO1 拉低使能(由 InitializeAudioPaEnable() 处理) |
| 音量控制 | 通过 ES8311 寄存器(Es8311AudioCodec::SetOutputVolume) |
| 项 | 值 |
|---|---|
| Codec 芯片 | 无(用 NoAudioCodecSimplex) |
| I2S 模式 | Simplex(麦克和喇叭走两套 I2S) |
| 麦克 I2S | WS = GPIO4,SCK = GPIO5,DIN = GPIO6 |
| 喇叭 I2S | DOUT = GPIO7,BCLK = GPIO15,LRCK = GPIO16 |
| 采样率 | 输入 / 输出 = 16000 / 24000 |
| 音量控制 | I2S 数字增益(软件实现) |
| 项 | 值 |
|---|---|
| 屏型号 | ILI9341 |
| 接口 | SPI(SPI2,40 MHz) |
| 分辨率 | 240 × 320,配置为横屏使用(SWAP_XY=true → 实际 320×240) |
| 引脚 | MOSI = GPIO11,SCK = GPIO12,CS = GPIO10,DC = GPIO46 |
| 背光 | PWM 控制,GPIO45,非反相 |
| 显示类 | SpiLcdDisplay(LVGL 9,RGB565) |
| 初始化序列 | 板厂自定义 ili9341_vendor_specific_init(gamma / power 时序) |
| 项 | 值 |
|---|---|
| 屏型号 | SSD1306(默认)或 SH1106(由 Kconfig DISPLAY_OLED_TYPE 选择) |
| 接口 | I2C(400 kHz),地址 0x3C |
| 分辨率 | 128 × 32 或 128 × 64(Kconfig 选择) |
| 引脚 | SDA = GPIO41,SCL = GPIO42 |
| 背光 | 无(OLED 自发光) |
| 显示类 | OledDisplay(LVGL 9,1bit 单色) |
esp_lcd_ili9341 (component 1.2.0) + lvgl_port;bread-compact-wifi 用 esp_lcd_panel_ssd1306 / esp_lcd_panel_sh1106。| 按键 | quandong | bread-compact-wifi | 行为 |
|---|---|---|---|
| BOOT (GPIO0) | ✅ | ✅ | 启动期进配网;运行时 ToggleChatState(按一下开/关对话) |
| Touch (GPIO47) | ❌ | ✅ | 按住说话:OnPressDown→StartListening, OnPressUp→StopListening |
| Vol+ (GPIO40) | ❌ | ✅ | 单击 +10 音量;长按拉满 100 |
| Vol- (GPIO39) | ❌ | ✅ | 单击 -10 音量;长按静音 |
→ quandong 只有 BOOT 一个键,没有按住说话,没有物理音量键。调音量需要走 MCP / 语音指令。
| 板子 | LED | 用途 |
|---|---|---|
| quandong | BUILTIN_LED_GPIO = NC | 无 |
| bread-compact-wifi | GPIO48,SingleLed | 状态指示(idle / listening / speaking) |
bread-compact-wifi 注册了一个 LampController(GPIO18) 作为 MCP 协议演示,可以远程通过小智指令"开灯/关灯"。quandong 没有这种外设示例。
主流程相同(详见 application.cc:61 / wifi_board.cc:52),UI 也由 Application::Initialize() 统一拉起。差别只在 board 构造里做的事:
InitializeI2c() // I2C0 for ES8311
InitializeSpi() // SPI2 for ILI9341
InitializeAudioPaEnable() // GPIO1 拉低使能功放
InitializeIli9341Display() // 自定义 init cmds + 实例化 SpiLcdDisplay
InitializeButtons() // BOOT 单键
GetBacklight()->SetBrightness(100)
InitializeDisplayI2c() // I2C0 for SSD1306
InitializeSsd1306Display() // OledDisplay
InitializeButtons() // BOOT + Touch + Vol+ + Vol-
InitializeTools() // 注册 LampController(MCP 外设)
main/CMakeLists.txt 中的字体与 emoji 配置差异:
| 板子 | text font | icon font | emoji collection |
|---|---|---|---|
| quandong-s3-dev | font_noto_sans_basic_20_4 | font_material_symbols_20_4 | noto-color-emoji_64 |
| bread-compact-wifi | font_noto_sans_basic_14_1 | font_material_symbols_14_1 | (无) |
→ quandong 走的是和 lichuang-dev、esp-box-3 等 240×320 LCD 板同档资源;OLED 板因为像素少,用 14 像素位图字体即可,emoji 也加载不动。
espressif/esp_lcd_ili9341 ==1.2.0(仓库 main/idf_component.yml 已有,无需补依赖)esp_lcd_panel_ssd1306 走 ESP-IDF 自带的 driverquandong-s3-dev ≈ "彩屏 + 硬 codec + 单按键" 的工程开发板,UI 表现力强但交互简化。 bread-compact-wifi ≈ "OLED + 纯 I2S 软 codec + 多按键 + 板载 lamp" 的面包板参考实现,便于上手 MCP 外设。 功能层(配网、语音通话、MCP、唤醒)由
WifiBoard基类统一提供,两者表现一致。