一套基于 Bouffalo BL616 的多功能演示:Wi‑Fi、HTTPS 调用大模型、TTS 语音播报、流式 STT 语音识别、LVGL 图形界面、夜灯(WS2812)、BLE 心率客户端、智能时钟(闹钟/倒计时/秒表)等。
-
主界面(LVGL):6 个入口按钮(小夜灯 / AI 对话 / 语音词典 / 智能时钟 / …)。
-
Wi‑Fi + NTP:联网自动校时(
ntp.tencent.com),顶部状态栏显示 HH:MM,Wi‑Fi 图标随联网状态显示/隐藏。 -
HTTPS 客户端(mbedTLS):
- Chat:
api.siliconflow.cn /v1/chat/completions(DeepSeek-V3)。 - TTS:
/v1/audio/speech(CosyVoice2),返回 WAV 后本地播放。
- Chat:
-
TTS 播放:WAV(16 kHz/16-bit/Mono→本地转双声道)→ I2S+ES8388+DMA 播放。
-
STT 录音→识别(流式):长按 GPIO33 录音(I2S+DMA),边录边以 chunked HTTP 发送到百度短语音;松手或超时(默认 10 s)结束,返回文本自动发往聊天或词典模式。
-
夜灯(WS2812):3 种色温(暖/冷/白)、5 档亮度,GPIO34 单总线时序。
-
BLE 心率:自动扫描并订阅目标设备(示例为某手环);超阈值红字并显示 SOS。
-
智能时钟:
- 闹钟(单次/工作日/周末,UI 可编辑时间、启用状态)。
- 倒计时(结束时红蓝闪烁 + 提示音)。
- 秒表(分:秒:厘秒)。
-
FatFS + 资源:
- 图片:
/sd/images/*.bin(RGB565 裸图)。 - 音频:
/sd/audio/hi_16k.wav、wakeup.wav、timeup.wav等。
- 图片:
examples/wifi/sta/full_project_release
├── audio/ # 音频硬件初始化、播放/录音任务
│ ├── audio_init/ # I2S+DMA+ES8388 封装
│ ├── capture/ # 录音任务(长按 GPIO33 流式 STT)
│ └── player/ # WAV 播放任务
├── ble/ # BLE 心率客户端(GATT 订阅)
├── certs/ # TLS 根证书(SiliconFlow)
├── clock/ # 闹钟/倒计时/秒表 UI + 任务
├── fatfs/ # FatFS 工具(读 WAV / 裸图)
├── llm_client/ # Chat 请求封装(HTTPS + JSON)
├── nightlight/ # WS2812 驱动与 UI
├── stt/ # 百度流式识别(chunked HTTP)
├── tts/ # TTS 任务(HTTPS 拉取 WAV)
├── ui/ # LVGL 任务与各子界面
└── wifi_manager/ # Wi‑Fi/HTTPS/时间同步
-
芯片/板卡:BL616(示例基于 Bouffalo SDK 标准板)
-
音频 Codec:ES8388(I²C 配置 + I²S 数据)
-
I²S/MCLK/GPIO:
- FS:
GPIO1,DI:GPIO10,DO:GPIO3,BCLK:GPIO0,MCLK:GPIO2(25 MHz 参照时钟)。
- FS:
-
按键(录音):
GPIO33(低电平按下)。 -
夜灯 WS2812:
GPIO34。 -
存储卡:SD 卡(FAT/FAT32),资源放置于
/sd/...。 -
显示:240×320,LVGL 驱动参考项目 BSP;图片资源 RGB565 裸图。
若使用自定义硬件,请比照
audio/audio_init/audio_init.c与nightlight/led_ws2812.c中的引脚与时序进行适配。
- Bouffalo SDK(设置环境变量
BL_SDK_BASE供CMakeLists.txt查找)。 - Toolchain:随 SDK 安装的 RISC‑V 工具链(参考 Bouffalo 官方文档)。
- LVGL / FatFS / mbedTLS:工程已集成。
-
准备 SDK:安装 Bouffalo SDK
-
配置工程(可选):如需修改宏开关,在
proj.conf、CMakeLists.txt中调整;TLS 校验证书通过-DBL_VERIFY打开。 -
编译:
cd full_project make CHIP=bl616 BOARD=bl616g0 -
烧录:使用官方烧录工具(或
bflb-mcu-tool/命令行)将生成固件写入;串口波特率与端口请按板卡设置。make flash COMX=/dev/ttyACM0
工程同时提供
Makefile;如使用 IDE/官方 GUI,请按其向导选择生成的 ELF/ BIN 文件进行烧录。
-
拷贝资源到 SD 卡(FAT/FAT32):
-
图片:
/sd/images/left.bin(30×30,返回箭头)/sd/images/wifi.bin(30×30,Wi‑Fi 图标)/sd/images/march_start.bin(240×320,开机图)
-
音频:
/sd/audio/hi_16k.wav(示例音乐)/sd/audio/wakeup.wav(闹钟响铃)/sd/audio/timeup.wav(倒计时到时音)
-
-
Wi‑Fi 账号:编辑
wifi_manager/wifi_task.c:wifi_sta_connect("<Your-SSID>", "<Your-PASS>", "0", "0", 0, 0, 0, 1);
-
云端凭据(请勿提交到仓库):
- Chat(SiliconFlow/DeepSeek):
llm_client/message_task.c→AUTH_BEARER_TOKEN - TTS(SiliconFlow/CosyVoice2):
tts/tts_task.c→TOKEN - 百度 STT(流式):
stt/baidu_stt_stream.c→s_token - 建议:将以上密钥移到
secrets.h或 NVS/Flash,并在CMakeLists.txt中排除出库。
- Chat(SiliconFlow/DeepSeek):
-
证书:
certs/siliconflow_cert.c已包含 SiliconFlow 根证书;CMake 中-DBL_VERIFY打开校验。
-
开机流程:
- 显示启动图(2 s)→ 主界面。
- Wi‑Fi 连接成功后触发 NTP 校时,顶部时钟开始走动。
-
主界面按钮:
-
小夜灯:进入灯控界面(暖/冷/白、亮度 0~4、开/关)。
-
AI 对话:进入聊天 UI;
- 按住 GPIO33 录音,松手或 10 s 到达后结束;
- 识别结果自动作为用户输入,随后调用 Chat 接口,回传文本 + TTS 播报。
-
语音词典:流程同上,但使用字典系统提示词与展示布局。
-
智能时钟:进入二级菜单:
- 闹钟:3 组(单次/工作日/周末)。点击条目进入编辑界面(小时/分钟滚轮),右侧圆点点击启/停。
- 倒计时:设置 HH:MM:SS,开始后每秒刷新;到时红蓝闪烁 2 s 并播放提示音。
- 秒表:开始/结束,显示 分:秒:厘秒。
-
-
BLE 心率:启动后自动扫描并连接示例目标(
ble/ble_hrm_client.c中的TARGET_NAME/TARGET_ADDR可修改)。订阅通知后实时更新心率,超过阈值(默认 130 bpm)变红并显示 “SOS”。
-
I2S 主机(16 kHz/16-bit/双通道,Left-Justified),DMA TX/RX。
-
ES8388 通过 I²C 配置;MCLK 输出 25 MHz。
-
提供统一接口:
audio_hw_init():硬件初始化(GPIO/MCLK/Codec/I2S/DMA)。audio_dma_start(addr, bytes):启动一次播放(带 5 段静音 + 首段淡入)。audio_is_playing():查询 DMA 忙闲。audio_rx_start(addr, bytes)/audio_rx_done():单次采集片段。
- 每次采集固定 chunk(示例 16 KB ≈ 0.25 s,立刻发送)。
- 就地抽 左声道并降采样到 8 kHz 后送出(可按需改为全链路 16 kHz)。
- 采用
Transfer-Encoding: chunked持续写入;结束时写终止块并解析 JSON。
- 构造 JSON 调用
/v1/audio/speech,返回 WAV; - 单声道 → 本地扩展成左右相同的双声道,再通过 DMA 播放。
- 队列解耦 UI 与网络请求;收到回复后更新 UI,并把文本投喂 TTS。
- 完整的扫描→连接→加密→发现服务→订阅通知流程;解析 Measurement Flags 与 8/16-bit 心率值。
- 基于 mbedTLS 的轻量封装:SNI、证书校验、Content‑Length 处理、分块读写、超时控制。
- WAV 裸读(跳过 44 字节头)、图片按 RGB565 裸图读入并构造
lv_img_dsc_t。
- Wi‑Fi:
wifi_manager/wifi_task.c→wifi_sta_connect() - 证书:
certs/siliconflow_cert.c(宏BL_VERIFY) - Chat Token:
llm_client/message_task.c→AUTH_BEARER_TOKEN - TTS Token:
tts/tts_task.c→TOKEN - 百度 STT Token:
stt/baidu_stt_stream.c→s_token - BLE 目标:
ble/ble_hrm_client.c→TARGET_NAME/TARGET_ADDR - 闹钟资源音:
/sd/audio/wakeup.wav - 倒计时提示音:
/sd/audio/timeup.wav
建议将所有密钥迁移到
secrets.h或安全存储,并从版本管理中排除。
-
SD 卡未挂载:串口无
[FS] mount ok,检查供电/线序/格式(FAT32)。 -
Wi‑Fi 连不上:确认 SSID/密码;串口是否有
CODE_WIFI_ON_GOT_IP;必要时打开 DHCP/连接日志。 -
NTP 不工作:网络未通或 DNS 失败,重试上限达成后任务退出;检查服务器可达性。
-
HTTPS 失败:
- 证书:确认
BL_VERIFY与证书字符串匹配; - SNI:
mbedtls_ssl_set_hostname()已启用; - 打印
status_code与resp_len观察错误细节。
- 证书:确认
-
无声音:确认 ES8388 供电/I²C 配置、MCLK=25 MHz、I²S 引脚连接;音量
ES8388_Set_Voice_Volume(70)可调整。 -
录音识别异常:检查
GPIO33输入与拉高/拉低;确认 chunk 大小、采样率与服务端rate/dev_pid一致。 -
BLE 收不到心率:确认目标设备名称/地址、是否支持 Heart Rate Service(0x180D)。
- 全链路 8 kHz 单声道:统一 I2S 与 STT 采样率,省去本地降采样。
- 音频并发:如录音与播放可能重叠,建议为
audio_*封装互斥(Semaphore)。 - 资源打包:将图片/音频打包为固件资源或挂载 SPI Flash,减少对 SD 依赖。
示例工程仅用于学习和评测,涉及的第三方服务/模型/字体/音频请遵循各自许可证与服务条款。
- Bouffalo Lab SDK、LVGL、mbedTLS、FatFS 等优秀开源组件。
- SiliconFlow 平台与 DeepSeek/CosyVoice2 模型支持。
- 百度语音识别(短语音、流式)接口示例。