四博大黄蜂 AI 智能音箱方案云端音乐、SD 卡播放、蓝牙音箱、AI 对讲一体化智能终端AI 音箱的价值不只是“能聊天”。真正适合量产落地的智能音箱应该同时具备AI 对话、音乐播放、本地存储播放、蓝牙音频、外接蓝牙音箱、双向对讲、小程序控制、OTA 升级和二次开发能力。四博大黄蜂 AI 智能音箱方案可以理解为一套面向家庭、儿童陪伴、学习娱乐、户外便携、智能家居和品牌定制市场的 AIoT 音频终端方案。四博大黄蜂 AI 智能音箱 ESP32-S3 / ESP32-C5 AI 主控 云端音乐播放 SD 卡本地音乐播放 蓝牙音箱模式 外接蓝牙音箱播放 AI 双向对讲 麦克风拾音 喇叭播放 小程序控制 MCP 工具调用 OTA 在线升级四博 AI 开发宝典中AI-S3 标准开发板为全开源方案带 240×240 分辨率 1.3 寸屏幕支持“四博小助手”小程序、声音克隆、知识库、自建大模型和 MCP 能力开发宝典也包含 ESP-IDF 环境搭建、DOIT_AI 编译烧录、设备配网、实时打断固件和 VB6824 自定义唤醒词等内容适合客户做二次开发和量产验证。一、产品定位四博大黄蜂 AI 智能音箱不是传统蓝牙音箱而是一个“多音源 AI 对话 小程序管理 可扩展控制”的智能音频平台。它可以覆盖以下场景1. 云端音乐通过 Wi-Fi/4G 播放在线音乐、故事、儿歌、课程音频 2. SD 卡音乐无网环境播放本地 MP3/WAV 文件 3. 蓝牙音箱手机连接设备把设备当普通蓝牙音箱使用 4. 蓝牙外放设备连接外部蓝牙音箱把 AI 回复或音乐转发出去 5. AI 对讲小程序与设备、设备与设备之间实现语音对讲 6. 学习陪伴儿童故事、英语跟读、古诗背诵、口算训练 7. 智能控制通过 MCP 控制灯光、插座、窗帘、场景模式 8. 小程序管理配网、绑定、音量、播放列表、模式切换、OTA四博 AI 硬件选型表中已经展示了 AI-智能音响、AI-语音机器人、AI-智能小夜灯、AI-S3 双目双屏等多种硬件形态说明四博 AI 方案不局限于单一音箱而是可以扩展到多种 AI 音频和智能终端产品。二、系统总体架构用户语音 / 小程序 / 手机蓝牙 / SD卡 / 云端音乐 ↓ 输入层麦克风 / BLE / Wi-Fi / SDMMC / Bluetooth A2DP ↓ ESP32-S3 / ESP32-C5 主控 ↓ 音频路由管理 Audio Router ↓ 播放链路I2S Codec / Class-D 功放 / 蓝牙外放 ↓ AI 服务ASR / LLM / TTS / MCP / 对讲服务器 ↓ 小程序配网 / 控制 / 对讲 / 播放列表 / OTA设备端主要负责1. Wi-Fi / BLE / 4G 联网 2. 蓝牙 A2DP Sink / Source 3. SD 卡文件扫描和播放 4. 云端音乐流媒体播放 5. 麦克风录音和 AI 对讲 6. TTS 音频播放 7. 音频源优先级调度 8. 小程序控制协议 9. OTA 固件和资源升级云端主要负责1. ASR 语音识别 2. LLM 大模型理解 3. TTS 语音合成 4. 云端音乐资源管理 5. 对讲消息转发 6. 用户账号和设备绑定 7. 播放列表管理 8. MCP 工具调度三、推荐硬件配置模块推荐配置主控ESP32-S3R8 / ESP32-C5存储16MB Flash 8MB PSRAM音频输入I2S 数字麦克风 / 双麦音频输出I2S Codec Class-D 功放喇叭4Ω 3W / 8Ω 2W本地存储Micro SD 卡支持 MP3/WAV蓝牙A2DP Sink / A2DP Source / BLE 控制网络Wi-Fi4G 可选显示1.3 寸 / 1.54 寸 LCD 可选电池锂电池可选控制按键 / 小程序 / 语音升级HTTPS OTA / 小程序触发 OTA开发宝典中提到AI 系统硬件设备的开源代码可以在 VSCode 中通过 ESP-IDF 扩展和编译工具进行开发、编译和烧录ESP-IDF 环境配置、烧录波特率和监视串口配置也有完整流程说明。四、软件模块设计推荐工程目录doit_ai_bumblebee_speaker/ ├── main/ │ ├── app_main.c │ ├── board_config.h │ ├── wifi_manager.c │ ├── ble_config.c │ ├── audio_router.c │ ├── audio_player.c │ ├── audio_capture.c │ ├── cloud_music.c │ ├── sd_music.c │ ├── bt_a2dp_sink.c │ ├── bt_a2dp_source.c │ ├── intercom_service.c │ ├── miniapp_protocol.c │ ├── ai_ws_client.c │ ├── mcp_service.c │ ├── lcd_ui.c │ └── ota_service.c ├── components/ │ ├── codec/ │ ├── mp3_decoder/ │ ├── sdcard/ │ ├── bt_audio/ │ └── lcd_driver/ ├── partitions_ota.csv └── sdkconfig.defaults系统状态机typedef enum { SYS_STATE_BOOT 0, SYS_STATE_WIFI_CONFIG, SYS_STATE_IDLE, SYS_STATE_CLOUD_MUSIC, SYS_STATE_SD_MUSIC, SYS_STATE_BT_SPEAKER, SYS_STATE_BT_OUTPUT, SYS_STATE_AI_CHAT, SYS_STATE_INTERCOM, SYS_STATE_OTA, SYS_STATE_ERROR } system_state_t; static volatile system_state_t g_sys_state SYS_STATE_BOOT;五、音频源管理云端音乐、SD 卡、蓝牙、AI、对讲统一调度大黄蜂音箱最核心的是“多音源管理”。音频源可以定义为typedef enum { AUDIO_SRC_NONE 0, AUDIO_SRC_CLOUD_MUSIC, AUDIO_SRC_SD_MUSIC, AUDIO_SRC_BT_A2DP, AUDIO_SRC_AI_TTS, AUDIO_SRC_INTERCOM, AUDIO_SRC_PROMPT } audio_source_t; typedef struct { audio_source_t current; int volume; int muted; int playing; } audio_router_t; static audio_router_t g_audio_router { .current AUDIO_SRC_NONE, .volume 70, .muted 0, .playing 0, };音频源优先级建议最高优先级系统提示音 / 报警音 第二优先级AI 对讲 第三优先级AI TTS 回复 第四优先级蓝牙音箱输入 第五优先级云端音乐 第六优先级SD 卡音乐切换音源void audio_router_switch(audio_source_t src) { if (g_audio_router.current src) { return; } audio_player_stop(); g_audio_router.current src; g_audio_router.playing 0; switch (src) { case AUDIO_SRC_CLOUD_MUSIC: lcd_ui_show_status(云端音乐); break; case AUDIO_SRC_SD_MUSIC: lcd_ui_show_status(SD卡音乐); break; case AUDIO_SRC_BT_A2DP: lcd_ui_show_status(蓝牙音箱模式); break; case AUDIO_SRC_AI_TTS: lcd_ui_show_status(AI正在回答); break; case AUDIO_SRC_INTERCOM: lcd_ui_show_status(AI对讲中); break; default: lcd_ui_show_status(待机); break; } }六、云端音乐播放设计云端音乐适合播放故事、课程、儿歌、白噪声、助眠音乐、品牌内容库等。云端音乐播放请求{ type: music.play, source: cloud, url: https://cdn.example.com/music/story_001.mp3, title: 睡前故事, album: 儿童故事 }云端音乐结构typedef struct { char url[256]; char title[64]; char album[64]; int duration_sec; } cloud_music_item_t;播放云端音乐esp_err_t cloud_music_play(const cloud_music_item_t *item) { if (!item || strlen(item-url) 0) { return ESP_FAIL; } audio_router_switch(AUDIO_SRC_CLOUD_MUSIC); lcd_ui_show_title(item-title); lcd_ui_show_status(正在播放云端音乐); /* * 实际项目中 * 1. HTTP 拉取 MP3/AAC 流 * 2. 解码为 PCM * 3. 送入 I2S Codec 或蓝牙外放 */ return audio_player_play_url(item-url); }小程序下发播放命令void miniapp_handle_cloud_music(cJSON *root) { cJSON *url cJSON_GetObjectItem(root, url); cJSON *title cJSON_GetObjectItem(root, title); if (!cJSON_IsString(url)) { return; } cloud_music_item_t item {0}; strncpy(item.url, url-valuestring, sizeof(item.url) - 1); if (cJSON_IsString(title)) { strncpy(item.title, title-valuestring, sizeof(item.title) - 1); } else { strcpy(item.title, 云端音乐); } cloud_music_play(item); }七、SD 卡本地音乐播放SD 卡音乐适合无网场景比如户外、儿童故事机、工厂预置内容、离线课程包。SD 卡初始化#include driver/sdmmc_host.h #include sdmmc_cmd.h #include esp_vfs_fat.h #define SD_MOUNT_POINT /sdcard esp_err_t sdcard_init(void) { sdmmc_host_t host SDMMC_HOST_DEFAULT(); sdmmc_slot_config_t slot_config SDMMC_SLOT_CONFIG_DEFAULT(); esp_vfs_fat_sdmmc_mount_config_t mount_config { .format_if_mount_failed false, .max_files 8, .allocation_unit_size 16 * 1024, }; sdmmc_card_t *card NULL; esp_err_t ret esp_vfs_fat_sdmmc_mount( SD_MOUNT_POINT, host, slot_config, mount_config, card ); if (ret ESP_OK) { lcd_ui_show_status(SD卡已挂载); } else { lcd_ui_show_status(SD卡挂载失败); } return ret; }扫描音乐文件#include dirent.h #include string.h #define MAX_MUSIC_FILES 128 typedef struct { char path[128]; char name[64]; } sd_music_file_t; static sd_music_file_t g_sd_music_list[MAX_MUSIC_FILES]; static int g_sd_music_count 0; void sd_music_scan(const char *dir_path) { DIR *dir opendir(dir_path); if (!dir) { return; } struct dirent *entry; while ((entry readdir(dir)) ! NULL g_sd_music_count MAX_MUSIC_FILES) { if (strstr(entry-d_name, .mp3) || strstr(entry-d_name, .wav)) { snprintf(g_sd_music_list[g_sd_music_count].path, sizeof(g_sd_music_list[g_sd_music_count].path), %s/%s, dir_path, entry-d_name); strncpy(g_sd_music_list[g_sd_music_count].name, entry-d_name, sizeof(g_sd_music_list[g_sd_music_count].name) - 1); g_sd_music_count; } } closedir(dir); }播放 SD 卡音乐esp_err_t sd_music_play_index(int index) { if (index 0 || index g_sd_music_count) { return ESP_FAIL; } audio_router_switch(AUDIO_SRC_SD_MUSIC); lcd_ui_show_title(g_sd_music_list[index].name); lcd_ui_show_status(正在播放SD卡音乐); return audio_player_play_file(g_sd_music_list[index].path); }上一首 / 下一首static int g_sd_music_index 0; void sd_music_next(void) { if (g_sd_music_count 0) { return; } g_sd_music_index; if (g_sd_music_index g_sd_music_count) { g_sd_music_index 0; } sd_music_play_index(g_sd_music_index); } void sd_music_prev(void) { if (g_sd_music_count 0) { return; } g_sd_music_index--; if (g_sd_music_index 0) { g_sd_music_index g_sd_music_count - 1; } sd_music_play_index(g_sd_music_index); }八、蓝牙音箱模式手机连接大黄蜂播放音乐蓝牙音箱模式本质上是Bluetooth A2DP Sink。手机作为音源大黄蜂作为蓝牙音箱播放。状态定义typedef enum { BT_SINK_STATE_IDLE 0, BT_SINK_STATE_DISCOVERABLE, BT_SINK_STATE_CONNECTED, BT_SINK_STATE_PLAYING } bt_sink_state_t; static bt_sink_state_t g_bt_sink_state BT_SINK_STATE_IDLE;进入蓝牙音箱模式void bt_speaker_mode_start(void) { audio_router_switch(AUDIO_SRC_BT_A2DP); /* * 实际项目中初始化 Classic Bluetooth A2DP Sink。 */ bt_a2dp_sink_init(Bumblebee Speaker); g_bt_sink_state BT_SINK_STATE_DISCOVERABLE; lcd_ui_show_status(蓝牙音箱模式); }A2DP 音频数据回调void bt_a2dp_sink_audio_data_cb(const uint8_t *data, uint32_t len) { if (g_audio_router.current ! AUDIO_SRC_BT_A2DP) { return; } /* * data 通常为解码后的 PCM 或 SBC 解码后的数据 * 具体取决于蓝牙协议栈封装。 */ audio_player_write_pcm(data, len); }蓝牙连接状态void bt_a2dp_sink_event_cb(bt_sink_state_t state) { g_bt_sink_state state; switch (state) { case BT_SINK_STATE_CONNECTED: lcd_ui_show_status(手机蓝牙已连接); break; case BT_SINK_STATE_PLAYING: lcd_ui_show_status(手机音乐播放中); break; default: lcd_ui_show_status(等待蓝牙连接); break; } }九、连接外部蓝牙音箱设备作为蓝牙音源输出“大黄蜂可以连接蓝牙音箱”意味着设备可以作为Bluetooth A2DP Source把 AI TTS、云端音乐、SD 卡音乐推送到外部蓝牙音箱播放。输出设备结构typedef struct { char name[64]; uint8_t mac[6]; int connected; } bt_output_device_t; static bt_output_device_t g_bt_output;连接外部蓝牙音箱esp_err_t bt_output_connect(const uint8_t mac[6], const char *name) { memcpy(g_bt_output.mac, mac, 6); if (name) { strncpy(g_bt_output.name, name, sizeof(g_bt_output.name) - 1); } lcd_ui_show_status(正在连接外部蓝牙音箱); /* * 实际项目中 * 1. 扫描 A2DP Sink 设备 * 2. 建立连接 * 3. 将 PCM 编码为 SBC 后发送 */ esp_err_t ret bt_a2dp_source_connect(mac); if (ret ESP_OK) { g_bt_output.connected 1; lcd_ui_show_status(外部蓝牙音箱已连接); } else { lcd_ui_show_status(蓝牙音箱连接失败); } return ret; }统一输出接口esp_err_t audio_output_write(const uint8_t *pcm, size_t len) { if (g_bt_output.connected) { return bt_a2dp_source_send_pcm(pcm, len); } return i2s_audio_write(pcm, len); }这样就可以实现手机 → 大黄蜂蓝牙音箱 → 本机喇叭 云端音乐 → 大黄蜂 → 本机喇叭 SD卡音乐 → 大黄蜂 → 本机喇叭 AI TTS → 大黄蜂 → 外部蓝牙音箱 云端音乐 → 大黄蜂 → 外部蓝牙音箱十、AI 对讲 / 双向对讲设计“A 对讲”可以设计成小程序与设备对讲或设备与设备对讲。对讲建议采用小程序录音 → 云端对讲服务器 → 设备播放 设备录音 → 云端对讲服务器 → 小程序播放对讲消息结构typedef enum { INTERCOM_IDLE 0, INTERCOM_RECORDING, INTERCOM_UPLOADING, INTERCOM_PLAYING } intercom_state_t; static intercom_state_t g_intercom_state INTERCOM_IDLE;开始对讲void intercom_start_record(void) { audio_router_switch(AUDIO_SRC_INTERCOM); g_intercom_state INTERCOM_RECORDING; audio_capture_start(); lcd_ui_show_status(对讲录音中); }上传对讲音频void intercom_upload_audio(const uint8_t *pcm, size_t len) { if (g_intercom_state ! INTERCOM_RECORDING) { return; } /* * 可使用 WebSocket 二进制帧上传 PCM/OPUS 数据。 */ ai_ws_send_binary(intercom_audio, pcm, len); }收到小程序对讲音频void intercom_on_receive_audio(const uint8_t *audio, size_t len) { audio_router_switch(AUDIO_SRC_INTERCOM); g_intercom_state INTERCOM_PLAYING; lcd_ui_show_status(收到对讲消息); audio_player_write_pcm(audio, len); }对讲控制消息{ type: intercom.start, from: miniapp, to: device_001, codec: opus, sample_rate: 16000 }十一、小程序控制协议专属小程序可以承担以下功能1. 设备配网 2. 设备绑定 3. 播放云端音乐 4. 管理 SD 卡音乐列表 5. 切换蓝牙音箱模式 6. 连接外部蓝牙音箱 7. 发起 AI 对讲 8. 调节音量 9. 修改唤醒词 10. OTA 升级小程序命令格式{ type: miniapp.cmd, cmd: music.play, source: cloud, payload: { url: https://cdn.example.com/story001.mp3, title: 睡前故事 } }设备端解析void miniapp_protocol_handle(const char *json) { cJSON *root cJSON_Parse(json); if (!root) { return; } cJSON *cmd cJSON_GetObjectItem(root, cmd); cJSON *payload cJSON_GetObjectItem(root, payload); if (!cJSON_IsString(cmd)) { cJSON_Delete(root); return; } if (strcmp(cmd-valuestring, music.play) 0) { miniapp_handle_music_play(payload); } else if (strcmp(cmd-valuestring, music.pause) 0) { audio_player_pause(); } else if (strcmp(cmd-valuestring, music.next) 0) { sd_music_next(); } else if (strcmp(cmd-valuestring, bt.speaker.start) 0) { bt_speaker_mode_start(); } else if (strcmp(cmd-valuestring, bt.output.connect) 0) { miniapp_handle_bt_output_connect(payload); } else if (strcmp(cmd-valuestring, intercom.start) 0) { intercom_start_record(); } else if (strcmp(cmd-valuestring, volume.set) 0) { miniapp_handle_volume_set(payload); } else if (strcmp(cmd-valuestring, ota.check) 0) { ota_check_update(); } cJSON_Delete(root); }音量控制void miniapp_handle_volume_set(cJSON *payload) { cJSON *vol cJSON_GetObjectItem(payload, volume); if (!cJSON_IsNumber(vol)) { return; } int volume vol-valueint; if (volume 0) volume 0; if (volume 100) volume 100; g_audio_router.volume volume; audio_player_set_volume(volume); lcd_ui_show_volume(volume); }十二、AI 对话和 MCP 工具调用大黄蜂不仅能播音乐也可以做 AI 对话和智能控制。用户说播放儿童故事 下一首 打开蓝牙音箱模式 连接客厅蓝牙音箱 开始对讲 打开客厅灯 进入睡眠音乐模式AI 后端可以返回 MCP 工具调用{ type: tool_call, tool: speaker.music.play, arguments: { source: cloud, url: https://cdn.example.com/story001.mp3, title: 儿童故事 } }MCP 工具定义typedef enum { MCP_TOOL_MUSIC_PLAY 0, MCP_TOOL_MUSIC_STOP, MCP_TOOL_BT_SPEAKER, MCP_TOOL_BT_OUTPUT, MCP_TOOL_INTERCOM, MCP_TOOL_VOLUME_SET, MCP_TOOL_HOME_CONTROL, MCP_TOOL_UNKNOWN } mcp_tool_id_t; typedef struct { const char *name; mcp_tool_id_t id; } mcp_tool_map_t; static const mcp_tool_map_t g_mcp_tools[] { {speaker.music.play, MCP_TOOL_MUSIC_PLAY}, {speaker.music.stop, MCP_TOOL_MUSIC_STOP}, {speaker.bt.speaker, MCP_TOOL_BT_SPEAKER}, {speaker.bt.output, MCP_TOOL_BT_OUTPUT}, {speaker.intercom.start, MCP_TOOL_INTERCOM}, {speaker.volume.set, MCP_TOOL_VOLUME_SET}, {home.device.control, MCP_TOOL_HOME_CONTROL}, };MCP 分发void mcp_service_handle(cJSON *root) { cJSON *tool cJSON_GetObjectItem(root, tool); cJSON *args cJSON_GetObjectItem(root, arguments); if (!cJSON_IsString(tool) || !cJSON_IsObject(args)) { return; } switch (mcp_get_tool_id(tool-valuestring)) { case MCP_TOOL_MUSIC_PLAY: mcp_handle_music_play(args); break; case MCP_TOOL_BT_SPEAKER: bt_speaker_mode_start(); break; case MCP_TOOL_BT_OUTPUT: mcp_handle_bt_output(args); break; case MCP_TOOL_INTERCOM: intercom_start_record(); break; case MCP_TOOL_VOLUME_SET: mcp_handle_volume_set(args); break; case MCP_TOOL_HOME_CONTROL: mcp_handle_home_control(args); break; default: lcd_ui_show_status(未知MCP工具); break; } }播放音乐工具void mcp_handle_music_play(cJSON *args) { cJSON *source cJSON_GetObjectItem(args, source); if (!cJSON_IsString(source)) { return; } if (strcmp(source-valuestring, cloud) 0) { cJSON *url cJSON_GetObjectItem(args, url); cJSON *title cJSON_GetObjectItem(args, title); if (!cJSON_IsString(url)) { return; } cloud_music_item_t item {0}; strncpy(item.url, url-valuestring, sizeof(item.url) - 1); if (cJSON_IsString(title)) { strncpy(item.title, title-valuestring, sizeof(item.title) - 1); } cloud_music_play(item); } else if (strcmp(source-valuestring, sdcard) 0) { sd_music_play_index(g_sd_music_index); } }十三、OTA 和资源更新大黄蜂音箱 OTA 不只是升级主固件还可以更新1. 云端音乐资源地址 2. 提示音资源 3. 小程序协议 4. 蓝牙兼容策略 5. 对讲协议 6. AI 后端地址 7. MCP 工具列表 8. SD 卡扫描策略 9. UI 资源 10. 语音唤醒词OTA 版本文件{ project: doit_ai_bumblebee_speaker, version: 1.0.3, chip: esp32s3, url: https://ota.customer.com/bumblebee_v1.0.3.bin, asset_url: https://ota.customer.com/assets/bumblebee_assets_v3.bin, md5: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, force: false, note: 新增SD卡音乐、蓝牙外放、AI对讲和小程序播放列表 }OTA 执行void ota_check_update(void) { esp_http_client_config_t http_config { .url https://ota.customer.com/bumblebee/latest.bin, .timeout_ms 10000, .keep_alive_enable true, }; esp_https_ota_config_t ota_config { .http_config http_config, }; lcd_ui_show_status(正在升级请勿断电); esp_err_t ret esp_https_ota(ota_config); if (ret ESP_OK) { lcd_ui_show_status(升级成功正在重启); esp_restart(); } else { lcd_ui_show_status(升级失败); } }分区表示例# Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 0x9000, 0x6000, otadata, data, ota, 0xf000, 0x2000, phy_init, data, phy, 0x11000, 0x1000, factory, app, factory, 0x20000, 0x300000, ota_0, app, ota_0, , 0x300000, ota_1, app, ota_1, , 0x300000, assets, data, spiffs, , 0x200000, storage, data, spiffs, , 0x100000,十四、方案核心价值四博大黄蜂 AI 智能音箱方案的核心价值不是单纯增加几个播放功能而是把AI 对话、音乐播放、蓝牙音频、本地存储、小程序控制和双向对讲整合成一个完整产品平台。1. 支持云端音乐适合故事、课程、儿歌、助眠内容 2. 支持 SD 卡音乐无网环境也能播放 3. 可作为蓝牙音箱手机直接连接播放 4. 可连接外部蓝牙音箱实现无线外放 5. 支持 AI 对讲小程序与设备可双向语音 6. 支持专属小程序完成配网、控制、播放列表和 OTA 7. 支持 AI 对话和 MCP 工具调用 8. 支持 Wi-Fi / BLE / 4G 扩展 9. 支持二次开发和客户系统接入 10. 支持 OTA量产后可持续迭代一句话总结四博大黄蜂不是普通蓝牙音箱 也不是简单 AI 播放器 而是一个集云端音乐、SD 卡播放、蓝牙音箱、蓝牙外放、 AI 对讲、小程序控制和智能语音交互于一体的 AI 智能音频终端。