四博 AI 双目智能音箱技术方案1. 方案定位四博 AI 双目智能音箱是一款面向 AI 陪伴、智能语音交互、桌面情绪机器人、儿童教育、AI 潮玩和品牌定制市场的高集成度智能硬件方案。整机以ESP32-S3R8 16M Flash VB6824 语音芯片为核心结合双目显示屏、四路触控感应、震动马达、三轴姿态传感器、麦克风、喇叭、电池与小程序平台实现“能听、能说、能看、能动、能感知”的多模态 AI 音箱体验。根据四博资料AI-S3 双目双屏方案本身已经内置小智 AI 语音大模型可直接套壳使用主要配件包括 1.28 寸 LCD 显示屏 x2、主板、麦克风、喇叭和线材主控配置为 ESP32S3R8 16M Flash VB6824并支持小智、豆包、ChatGPT 等主流大模型适合高端 AI 市场和二次开发。本方案在 AI-S3 双目基础上进一步强化交互体验标配模块配置主控ESP32-S3R8 16M Flash语音VB6824 离线语音 / AEC / 唤醒 / 打断显示双目屏兼容 0.71 寸 / 1.28 寸触控四路触控感应震动震动马达支持触觉反馈姿态内置三轴传感器网络Wi-Fi / BLE 配网可扩展 4G平台四博小助手小程序AI 能力AI 对话、语音克隆、知识库、MCP 工具扩展、OTA / 素材更新2. 核心卖点2.1 双目情绪显示设备支持双眼动画显示可根据 AI 状态自动切换不同表情。例如状态双目表情待机呼吸眨眼唤醒睁眼 / 聚焦聆听眼球跟随 / 蓝色光效思考转圈 / 眨眼回复嘴型联动 / 表情变化错误困惑 / 闭眼摇晃惊讶表情触摸开心 / 害羞 / 生气开发文档中提到AI-S3 双目主板支持 0.71 寸和 1.28 寸屏幕V1/V2 板型对应不同屏幕组合0.71 寸屏分辨率为 160×1601.28 寸屏分辨率为 240×240。2.2 VB6824 语音前端VB6824 负责音频编解码、AEC 回声消除、语音唤醒、自定义唤醒词等功能让 ESP32-S3 主控专注于网络通信、UI 显示和交互逻辑。资料中也明确说明ESP32-C2 / C3 / S3 VB6824 方案已经成熟应用于电子吧唧、S3 双目、S3 拍学机、地球仪、拍拍灯等产品。这种架构的优点是主控压力小S3 不需要承担全部语音前处理。唤醒更稳定离线唤醒不依赖网络。支持打断AI 播放过程中可以实时打断。适合量产语音前端、UI、网络、AI 业务分层清晰。2.3 四路触控 震动马达四路触控可用于实现更自然的桌面宠物式交互触控区域功能建议顶部触摸唤醒 / 暂停 / 继续左侧触摸上一首 / 上一个角色右侧触摸下一首 / 下一个角色底部 / 背部触摸进入配网 / 静音 / 收藏回答震动马达用于增强反馈场景震动反馈触摸确认短震一次唤醒成功双短震网络异常长震一次知识库命中轻震一次摇晃互动连续短震低电量间歇提醒2.4 三轴姿态感应内置三轴传感器可实现拿起唤醒。摇一摇切换角色。倾斜切换眼睛方向。翻转静音。敲击桌面触发彩蛋。防跌落 / 移动检测。2.5 小程序平台能力配合“四博小助手”小程序可以实现 AI 对话、本地或云端智能体切换、声音克隆、知识库接入、MCP 工具扩展以及提示音、模型、参数、固件等在线管理。资料中明确写到四博小助手可支持 AI 对话、声音克隆、知识库接入、MCP 扩展能力、素材与固件在线更新。3. 系统总体架构┌──────────────────────────────┐ │ 四博小助手小程序 │ │ 配网 / 声音克隆 / 知识库 / MCP │ └──────────────┬───────────────┘ │ BLE BluFi / HTTPS / WebSocket ┌──────────────▼───────────────┐ │ ESP32-S3R8 主控 │ │ Wi-Fi / BLE / UI / 触控 / 姿态 │ │ 双目动画 / OTA / MCP / 状态机 │ └──────┬─────────┬─────────┬────┘ │ │ │ │ │ │ ┌──────▼───┐ ┌───▼────┐ ┌──▼────────┐ │ VB6824 │ │ 双目屏 │ │ 传感器系统 │ │ 唤醒/AEC │ │ LCD x2 │ │ 触控/IMU/震动 │ └──────┬───┘ └────────┘ └───────────┘ │ ┌──────▼──────────────┐ │ 麦克风 / 功放 / 喇叭 │ └────────────────────┘4. 硬件方案设计4.1 主控模块推荐采用ESP32-S3R8 16M Flash。四博模组选型资料中ESP32-S3 系列面向音视频 / AI 市场S3 为 Xtensa 双核 240MHz 架构适合承担显示、通信、UI、传感器融合和 AI 设备控制逻辑。主控职责Wi-Fi / BLE 网络通信。小程序 BluFi 配网。WebSocket / MQTT AI 通信。双目屏动画刷新。四路触控扫描。三轴姿态数据处理。震动马达控制。OTA 升级。MCP 工具调用。与 VB6824 进行状态通信。4.2 语音音频模块采用 VB6824 作为语音前端麦克风 → VB6824 → 唤醒 / AEC / 降噪 / 编解码 → ESP32-S3 → 云端 AI 云端 TTS → ESP32-S3 → VB6824 / I2S DAC / 功放 → 喇叭建议功能功能实现方式离线唤醒VB6824 本地唤醒自定义唤醒词VB6824 固件升级配置实时打断VB6824 固件支持AEC 回声消除VB6824 语音前端处理AI 语音对话S3 连接云端 AI 服务本地提示音Flash / SD / SPIFFS 存储开发宝典中也提到VB6824 自定义唤醒词需要进入升级模式可设置“你好小智”“小乐小乐”等唤醒词并支持定制唤醒词。4.3 双目显示模块推荐两种 SKU版本屏幕分辨率定位标准版0.71 寸双目屏160×160低成本、小体积高配版1.28 寸双目屏240×240显示效果更好顶配版1.28 寸可调光双目屏240×240情绪交互 / 礼品 / 高端客户双目屏显示内容眼睛动画。网络状态。音量状态。电量状态。AI 思考状态。情绪表情。角色头像。简短文字提示。开发资料中还提到可通过修改screen_type指向 1.28 或 0.71并替换defaultEye_1.28.h或defaultEye_0.71.h素材数组来定制眼睛样式固件。5. 软件系统设计5.1 软件任务划分ESP32-S3 固件建议采用 FreeRTOS 多任务结构app_main ├── wifi_task // Wi-Fi / BluFi / 网络管理 ├── ai_client_task // WebSocket / MQTT / AI 对话 ├── audio_task // 音频状态、TTS、播放控制 ├── eye_task // 双目动画刷新 ├── touch_task // 四路触控扫描 ├── imu_task // 三轴姿态检测 ├── haptic_task // 震动马达反馈 ├── ota_task // 固件 / 素材在线升级 └── mcp_task // MCP 工具调用5.2 状态机设计typedef enum { AI_STATE_BOOT 0, AI_STATE_IDLE, AI_STATE_WAKEUP, AI_STATE_LISTENING, AI_STATE_THINKING, AI_STATE_SPEAKING, AI_STATE_NETWORK_ERROR, AI_STATE_LOW_BATTERY, AI_STATE_OTA, } ai_state_t;状态与硬件联动状态双目震动音频BOOT开机动画短震开机音IDLE慢眨眼无待机WAKEUP睁眼双短震提示音LISTENING聚焦眼神无录音THINKING眼球转动轻震等待SPEAKING说话表情无TTSERROR困惑表情长震错误提示OTA升级动画间歇震动升级提示6. 关键代码示例下面代码是方案级参考代码GPIO、I2C 地址、屏幕驱动 IC 需要按实际原理图调整。6.1 全局事件总线// app_event.h #pragma once #include stdint.h #include freertos/FreeRTOS.h #include freertos/queue.h typedef enum { EVT_WAKE_WORD 1, EVT_TOUCH_TOP, EVT_TOUCH_LEFT, EVT_TOUCH_RIGHT, EVT_TOUCH_BACK, EVT_SHAKE, EVT_PICKUP, EVT_FLIP, EVT_AI_LISTENING, EVT_AI_THINKING, EVT_AI_SPEAKING, EVT_AI_ERROR, EVT_LOW_BATTERY, } app_event_type_t; typedef struct { app_event_type_t type; int value; int x; int y; int z; } app_event_t; extern QueueHandle_t g_app_event_queue;// app_main.c #include app_event.h #include esp_log.h #include nvs_flash.h QueueHandle_t g_app_event_queue; void wifi_app_start(void); void blufi_app_start(void); void eye_app_start(void); void touch_app_start(void); void imu_app_start(void); void haptic_app_start(void); void ai_client_start(void); void app_main(void) { ESP_ERROR_CHECK(nvs_flash_init()); g_app_event_queue xQueueCreate(16, sizeof(app_event_t)); if (!g_app_event_queue) { ESP_LOGE(APP, 事件队列创建失败); return; } wifi_app_start(); blufi_app_start(); eye_app_start(); haptic_app_start(); touch_app_start(); imu_app_start(); ai_client_start(); ESP_LOGI(APP, 四博AI双目音箱启动完成); }6.2 震动马达驱动// haptic_motor.c #include driver/ledc.h #include freertos/FreeRTOS.h #include freertos/task.h #include esp_err.h #define MOTOR_GPIO 15 #define MOTOR_LEDC_TIMER LEDC_TIMER_0 #define MOTOR_LEDC_MODE LEDC_LOW_SPEED_MODE #define MOTOR_LEDC_CHANNEL LEDC_CHANNEL_0 #define MOTOR_LEDC_FREQ 2000 #define MOTOR_DUTY_MAX 8191 typedef enum { HAPTIC_SHORT, HAPTIC_DOUBLE, HAPTIC_LONG, HAPTIC_ERROR, } haptic_pattern_t; static void motor_set(uint32_t duty) { ledc_set_duty(MOTOR_LEDC_MODE, MOTOR_LEDC_CHANNEL, duty); ledc_update_duty(MOTOR_LEDC_MODE, MOTOR_LEDC_CHANNEL); } void haptic_play(haptic_pattern_t pattern) { switch (pattern) { case HAPTIC_SHORT: motor_set(MOTOR_DUTY_MAX * 60 / 100); vTaskDelay(pdMS_TO_TICKS(60)); motor_set(0); break; case HAPTIC_DOUBLE: for (int i 0; i 2; i) { motor_set(MOTOR_DUTY_MAX * 70 / 100); vTaskDelay(pdMS_TO_TICKS(50)); motor_set(0); vTaskDelay(pdMS_TO_TICKS(80)); } break; case HAPTIC_LONG: motor_set(MOTOR_DUTY_MAX * 80 / 100); vTaskDelay(pdMS_TO_TICKS(300)); motor_set(0); break; case HAPTIC_ERROR: for (int i 0; i 3; i) { motor_set(MOTOR_DUTY_MAX * 90 / 100); vTaskDelay(pdMS_TO_TICKS(80)); motor_set(0); vTaskDelay(pdMS_TO_TICKS(100)); } break; } } void haptic_app_start(void) { ledc_timer_config_t timer { .speed_mode MOTOR_LEDC_MODE, .timer_num MOTOR_LEDC_TIMER, .duty_resolution LEDC_TIMER_13_BIT, .freq_hz MOTOR_LEDC_FREQ, .clk_cfg LEDC_AUTO_CLK, }; ESP_ERROR_CHECK(ledc_timer_config(timer)); ledc_channel_config_t ch { .gpio_num MOTOR_GPIO, .speed_mode MOTOR_LEDC_MODE, .channel MOTOR_LEDC_CHANNEL, .timer_sel MOTOR_LEDC_TIMER, .duty 0, .hpoint 0, }; ESP_ERROR_CHECK(ledc_channel_config(ch)); }6.3 四路触控检测如果四路触控直接接 ESP32-S3 Touch Pad可采用如下逻辑。如果实际硬件使用外置触控 IC则将touch_pad_read_raw_data()替换为 I2C 读取触控状态即可。// touch_input.c #include driver/touch_sensor.h #include freertos/FreeRTOS.h #include freertos/task.h #include app_event.h #include esp_log.h #define TOUCH_THRESHOLD_PERCENT 70 typedef struct { touch_pad_t pad; app_event_type_t event; uint32_t baseline; const char *name; } touch_key_t; static touch_key_t g_keys[] { {TOUCH_PAD_NUM1, EVT_TOUCH_TOP, 0, TOP}, {TOUCH_PAD_NUM2, EVT_TOUCH_LEFT, 0, LEFT}, {TOUCH_PAD_NUM3, EVT_TOUCH_RIGHT, 0, RIGHT}, {TOUCH_PAD_NUM4, EVT_TOUCH_BACK, 0, BACK}, }; static void touch_task(void *arg) { uint32_t value 0; while (1) { for (int i 0; i 4; i) { touch_pad_read_raw_data(g_keys[i].pad, value); uint32_t threshold g_keys[i].baseline * TOUCH_THRESHOLD_PERCENT / 100; if (value threshold) { app_event_t evt { .type g_keys[i].event, .value value, }; xQueueSend(g_app_event_queue, evt, 0); ESP_LOGI(TOUCH, 触摸按键:%s raw%lu, g_keys[i].name, value); vTaskDelay(pdMS_TO_TICKS(300)); } } vTaskDelay(pdMS_TO_TICKS(30)); } } void touch_app_start(void) { touch_pad_init(); for (int i 0; i 4; i) { touch_pad_config(g_keys[i].pad); } vTaskDelay(pdMS_TO_TICKS(200)); for (int i 0; i 4; i) { uint32_t sum 0; for (int j 0; j 16; j) { uint32_t v 0; touch_pad_read_raw_data(g_keys[i].pad, v); sum v; vTaskDelay(pdMS_TO_TICKS(10)); } g_keys[i].baseline sum / 16; ESP_LOGI(TOUCH, %s baseline%lu, g_keys[i].name, g_keys[i].baseline); } xTaskCreate(touch_task, touch_task, 4096, NULL, 5, NULL); }6.4 三轴姿态传感器检测下面以通用 I2C 三轴传感器为例。实际项目中需要按具体传感器型号调整寄存器例如 QMI8658、MPU6050、LIS3DH 等。// imu_sensor.c #include driver/i2c.h #include freertos/FreeRTOS.h #include freertos/task.h #include app_event.h #include esp_log.h #include math.h #define I2C_PORT I2C_NUM_0 #define I2C_SDA_GPIO 8 #define I2C_SCL_GPIO 9 #define I2C_FREQ_HZ 400000 #define IMU_ADDR 0x68 #define IMU_REG_ACCEL_X 0x3B static esp_err_t imu_read_accel(int16_t *x, int16_t *y, int16_t *z) { uint8_t reg IMU_REG_ACCEL_X; uint8_t data[6] {0}; esp_err_t ret i2c_master_write_read_device( I2C_PORT, IMU_ADDR, reg, 1, data, sizeof(data), pdMS_TO_TICKS(50) ); if (ret ! ESP_OK) { return ret; } *x (int16_t)((data[0] 8) | data[1]); *y (int16_t)((data[2] 8) | data[3]); *z (int16_t)((data[4] 8) | data[5]); return ESP_OK; } static void imu_task(void *arg) { int16_t last_x 0, last_y 0, last_z 0; while (1) { int16_t x, y, z; if (imu_read_accel(x, y, z) ESP_OK) { int dx abs(x - last_x); int dy abs(y - last_y); int dz abs(z - last_z); int delta dx dy dz; if (delta 18000) { app_event_t evt { .type EVT_SHAKE, .x x, .y y, .z z, }; xQueueSend(g_app_event_queue, evt, 0); ESP_LOGI(IMU, 检测到摇晃 x%d y%d z%d, x, y, z); } if (z -12000) { app_event_t evt { .type EVT_FLIP, .x x, .y y, .z z, }; xQueueSend(g_app_event_queue, evt, 0); ESP_LOGI(IMU, 检测到翻转); } last_x x; last_y y; last_z z; } vTaskDelay(pdMS_TO_TICKS(80)); } } void imu_app_start(void) { i2c_config_t conf { .mode I2C_MODE_MASTER, .sda_io_num I2C_SDA_GPIO, .scl_io_num I2C_SCL_GPIO, .sda_pullup_en GPIO_PULLUP_ENABLE, .scl_pullup_en GPIO_PULLUP_ENABLE, .master.clk_speed I2C_FREQ_HZ, }; ESP_ERROR_CHECK(i2c_param_config(I2C_PORT, conf)); ESP_ERROR_CHECK(i2c_driver_install(I2C_PORT, conf.mode, 0, 0, 0)); xTaskCreate(imu_task, imu_task, 4096, NULL, 5, NULL); }6.5 事件处理触控、姿态、表情、震动联动// interaction_task.c #include app_event.h #include esp_log.h typedef enum { EYE_IDLE, EYE_HAPPY, EYE_LISTENING, EYE_THINKING, EYE_SPEAKING, EYE_SURPRISED, EYE_ANGRY, EYE_SLEEP, EYE_ERROR, } eye_expression_t; void eye_set_expression(eye_expression_t exp); void haptic_play(int pattern); void ai_start_listen(void); void ai_stop_speak(void); void enter_blufi_config(void); static void interaction_task(void *arg) { app_event_t evt; while (1) { if (xQueueReceive(g_app_event_queue, evt, portMAX_DELAY)) { switch (evt.type) { case EVT_WAKE_WORD: eye_set_expression(EYE_LISTENING); haptic_play(1); ai_start_listen(); break; case EVT_TOUCH_TOP: eye_set_expression(EYE_HAPPY); haptic_play(0); ai_start_listen(); break; case EVT_TOUCH_LEFT: eye_set_expression(EYE_SLEEP); haptic_play(0); break; case EVT_TOUCH_RIGHT: eye_set_expression(EYE_HAPPY); haptic_play(0); break; case EVT_TOUCH_BACK: eye_set_expression(EYE_THINKING); haptic_play(1); enter_blufi_config(); break; case EVT_SHAKE: eye_set_expression(EYE_SURPRISED); haptic_play(1); break; case EVT_FLIP: eye_set_expression(EYE_SLEEP); haptic_play(2); ai_stop_speak(); break; case EVT_AI_THINKING: eye_set_expression(EYE_THINKING); break; case EVT_AI_SPEAKING: eye_set_expression(EYE_SPEAKING); break; case EVT_AI_ERROR: eye_set_expression(EYE_ERROR); haptic_play(3); break; default: break; } } } } void interaction_app_start(void) { xTaskCreate(interaction_task, interaction_task, 4096, NULL, 6, NULL); }6.6 AI WebSocket 消息处理示例// ai_client.c #include esp_websocket_client.h #include esp_log.h #include cJSON.h #include app_event.h static const char *TAG AI_WS; static void ai_ws_event_handler( void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data ) { esp_websocket_event_data_t *data (esp_websocket_event_data_t *)event_data; switch (event_id) { case WEBSOCKET_EVENT_CONNECTED: ESP_LOGI(TAG, AI服务已连接); break; case WEBSOCKET_EVENT_DISCONNECTED: ESP_LOGW(TAG, AI服务断开); break; case WEBSOCKET_EVENT_DATA: { char *json calloc(1, data-data_len 1); if (!json) return; memcpy(json, data-data_ptr, data-data_len); cJSON *root cJSON_Parse(json); if (root) { cJSON *type cJSON_GetObjectItem(root, type); cJSON *state cJSON_GetObjectItem(root, state); cJSON *emotion cJSON_GetObjectItem(root, emotion); if (cJSON_IsString(type)) { if (strcmp(type-valuestring, stt) 0) { ESP_LOGI(TAG, 用户语音识别结果:%s, cJSON_GetObjectItem(root, text)-valuestring); } if (strcmp(type-valuestring, llm) 0) { app_event_t evt {.type EVT_AI_THINKING}; xQueueSend(g_app_event_queue, evt, 0); } if (strcmp(type-valuestring, tts) 0) { if (state cJSON_IsString(state)) { if (strcmp(state-valuestring, start) 0) { app_event_t evt {.type EVT_AI_SPEAKING}; xQueueSend(g_app_event_queue, evt, 0); } else if (strcmp(state-valuestring, stop) 0) { app_event_t evt {.type EVT_AI_LISTENING}; xQueueSend(g_app_event_queue, evt, 0); } } } if (emotion cJSON_IsString(emotion)) { ESP_LOGI(TAG, AI情绪:%s, emotion-valuestring); } } cJSON_Delete(root); } free(json); break; } case WEBSOCKET_EVENT_ERROR: ESP_LOGE(TAG, AI服务错误); app_event_t evt {.type EVT_AI_ERROR}; xQueueSend(g_app_event_queue, evt, 0); break; default: break; } } void ai_client_start(void) { esp_websocket_client_config_t cfg { .uri wss://your-ai-server/ws, .buffer_size 4096, }; esp_websocket_client_handle_t client esp_websocket_client_init(cfg); esp_websocket_register_events( client, WEBSOCKET_EVENT_ANY, ai_ws_event_handler, NULL ); esp_websocket_client_start(client); }6.7 MCP 工具扩展示例四博小助手支持 MCP 扩展能力因此可以把设备能力封装成 AI 可调用工具例如切换眼睛主题、播放提示音、打开夜灯、查询电量、进入配网等。资料中也提到小程序侧支持 MCP 工具扩展可对接工具和插件。示例工具定义{ name: self.screen.set_eye_theme, description: 切换AI双目音箱的眼睛主题, parameters: { type: object, properties: { theme: { type: string, enum: [默认, 海洋, 爱心, 梦境, 彩虹, 花仙子, 机甲] } }, required: [theme] } }设备侧收到 MCP 指令后的处理逻辑void mcp_handle_set_eye_theme(const char *theme) { if (strcmp(theme, 海洋) 0) { eye_load_theme(ocean); } else if (strcmp(theme, 爱心) 0) { eye_load_theme(heart); } else if (strcmp(theme, 梦境) 0) { eye_load_theme(dream); } else if (strcmp(theme, 彩虹) 0) { eye_load_theme(rainbow); } else if (strcmp(theme, 花仙子) 0) { eye_load_theme(flower); } else if (strcmp(theme, 机甲) 0) { eye_load_theme(mecha); } else { eye_load_theme(default); } haptic_play(HAPTIC_SHORT); }7. 小程序与云端功能设计7.1 四博小助手功能入口建议小程序提供以下入口功能说明设备绑定BLE 搜索设备并绑定BluFi 配网输入 Wi-Fi 账号密码智能体选择小智 / 豆包 / ChatGPT / 私有模型声音克隆录制样本生成专属音色知识库上传产品说明书、课程资料、FAQMCP 工具控制设备能力素材管理眼睛动画、提示音、角色皮肤固件升级OTA 更新参数配置音量、唤醒词、灵敏度、儿童模式开发资料中也说明设备烧录后可通过“四博小助手”进行 BluFi 配网搜索设备、输入网络密码后即可使用对话控制。7.2 典型用户流程首次开机 ↓ 双目显示配网动画 ↓ 用户打开四博小助手 ↓ BLE 搜索设备 ↓ BluFi 下发 Wi-Fi ↓ 设备连接云端 ↓ 选择智能体 / 绑定知识库 / 设置音色 ↓ 开始 AI 对话8. 产品功能清单8.1 基础功能离线语音唤醒。AI 问答。连续对话。实时打断。双目表情。四路触控。震动反馈。姿态感应。Wi-Fi 配网。小程序绑定。OTA 升级。自定义唤醒词。8.2 高级功能声音克隆。专属知识库。角色人格设定。MCP 工具控制。AI 讲故事。儿童问答。英语陪练。桌面宠物互动。情绪陪伴。智能家居控制。蓝牙音箱模式需增加经典蓝牙音频芯片或独立蓝牙方案。4G 联网版本适合户外或无 Wi-Fi 场景。9. 推荐 SKU 规划SKU配置定位标准版S3 VB6824 0.71 双目 触控 震动AI 玩具 / 礼品高配版S3 VB6824 1.28 双目 四触控 三轴 震动AI 桌宠 / AI 音箱Pro 版S3 VB6824 1.28 可调光双目 三轴 4G/SD教育 / 陪伴 / 高端市场蓝牙音箱版S3 VB6824 7014 / 蓝牙音频芯片传统音箱升级 AI资料中提到7014 蓝牙 PAN AI 手机伴侣方案具有成本低、可通过手机网络通信、适合手机配件和传统音箱等特点如果要把本产品强化成“能当蓝牙音箱”的版本可以在 S3 双目 AI 架构外增加经典蓝牙音频链路。10. 开发与量产建议10.1 开发环境开发宝典中建议在 VSCode 中安装 ESP-IDF 扩展和编译工具并选择 ESP-IDF v5.5 版本进行安装配置文档也提到 S3 双目工程推荐 ESP-IDF 版本大于等于 5.4.0C5 则建议大于等于 5.5.0。推荐工程结构fourbo_ai_eye_speaker/ ├── main/ │ ├── app_main.c │ ├── app_event.h │ ├── board_config.h │ ├── wifi_app.c │ ├── blufi_app.c │ ├── ai_client.c │ ├── eye_display.c │ ├── touch_input.c │ ├── imu_sensor.c │ ├── haptic_motor.c │ ├── mcp_tools.c │ └── ota_manager.c ├── components/ │ ├── vb6824/ │ ├── eye_assets/ │ ├── audio_player/ │ └── json_protocol/ ├── partitions.csv ├── sdkconfig.defaults └── CMakeLists.txt10.2 量产固件建议量产建议准备 4 类固件固件用途factory_test.bin产测屏幕、触控、马达、喇叭、麦克风、IMUuser_app.bin正式出货固件ota_app.binOTA 升级固件eye_asset.bin眼睛素材包 / 角色素材包产测项目双目屏颜色测试。双目同步刷新测试。四路触控阈值校准。震动马达 PWM 测试。三轴传感器方向测试。麦克风录音测试。喇叭播放测试。VB6824 唤醒测试。Wi-Fi RSSI 测试。电池电压 ADC 测试。Type-C 充电测试。OTA 分区校验。11. 方案总结四博 AI 双目智能音箱不是普通语音盒子而是一个集AI 语音大模型、双目情绪显示、触控交互、姿态感应、震动反馈、小程序平台、声音克隆、知识库和 MCP 扩展于一体的高集成 AI 硬件方案。它的核心优势可以概括为硬件完整S3 VB6824 双目屏 麦克风 喇叭 触控 马达 姿态。交互丰富语音、触摸、动作、表情、震动多通道联动。开发友好ESP32-S3 生态成熟资料中也明确该方案全开源、支持二次开发。平台完整四博小助手支持配网、声音克隆、知识库、MCP、素材和固件更新。量产友好可直接套壳也可面向品牌客户、方案商、电商客户进行定制开发。扩展空间大可升级为蓝牙音箱版、4G 版、儿童教育版、桌面宠物版、IP 角色定制版。一句话概括四博 AI 双目智能音箱 AI 语音音箱 情绪双目屏 触控桌宠 小程序智能体平台是面向 2026 年 AI 硬件市场的高性价比顶配方案。