四博 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×160,1.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 | 说话表情 | 无 | TTS |
| ERROR | 困惑表情 | 长震 | 错误提示 |
| 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, ®, 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 / 私有模型 |
| 声音克隆 | 录制样本,生成专属音色 |
| 知识库 | 上传产品说明书、课程资料、FAQ |
| MCP 工具 | 控制设备能力 |
| 素材管理 | 眼睛动画、提示音、角色皮肤 |
| 固件升级 | 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.0,C5 则建议大于等于 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 | 产测:屏幕、触控、马达、喇叭、麦克风、IMU |
| user_app.bin | 正式出货固件 |
| ota_app.bin | OTA 升级固件 |
| 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 硬件市场的高性价比顶配方案。