Skip to content

he88/full_project_release

Repository files navigation

VeriMake / bouffalo_sdk 示例工程(BL616)

一套基于 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 后本地播放。
  • 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.wavwakeup.wavtimeup.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 参照时钟)。
  • 按键(录音)GPIO33(低电平按下)。

  • 夜灯 WS2812GPIO34

  • 存储卡:SD 卡(FAT/FAT32),资源放置于 /sd/...

  • 显示:240×320,LVGL 驱动参考项目 BSP;图片资源 RGB565 裸图。

若使用自定义硬件,请比照 audio/audio_init/audio_init.cnightlight/led_ws2812.c 中的引脚与时序进行适配。


🔧 软件依赖

  • Bouffalo SDK(设置环境变量 BL_SDK_BASECMakeLists.txt 查找)。
  • Toolchain:随 SDK 安装的 RISC‑V 工具链(参考 Bouffalo 官方文档)。
  • LVGL / FatFS / mbedTLS:工程已集成。

⚙️ 构建与烧录

  1. 准备 SDK:安装 Bouffalo SDK

  2. 配置工程(可选):如需修改宏开关,在 proj.confCMakeLists.txt 中调整;TLS 校验证书通过 -DBL_VERIFY 打开。

  3. 编译

     cd full_project
     make CHIP=bl616 BOARD=bl616g0
  4. 烧录:使用官方烧录工具(或 bflb-mcu-tool/命令行)将生成固件写入;串口波特率与端口请按板卡设置。

    make flash COMX=/dev/ttyACM0

工程同时提供 Makefile;如使用 IDE/官方 GUI,请按其向导选择生成的 ELF/ BIN 文件进行烧录。


🚀 运行前准备

  1. 拷贝资源到 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(倒计时到时音)
  2. Wi‑Fi 账号:编辑 wifi_manager/wifi_task.c

    wifi_sta_connect("<Your-SSID>", "<Your-PASS>", "0", "0", 0, 0, 0, 1);
  3. 云端凭据(请勿提交到仓库)

    • Chat(SiliconFlow/DeepSeek):llm_client/message_task.cAUTH_BEARER_TOKEN
    • TTS(SiliconFlow/CosyVoice2):tts/tts_task.cTOKEN
    • 百度 STT(流式):stt/baidu_stt_stream.cs_token
    • 建议:将以上密钥移到 secrets.h 或 NVS/Flash,并在 CMakeLists.txt 中排除出库。
  4. 证书certs/siliconflow_cert.c 已包含 SiliconFlow 根证书;CMake 中 -DBL_VERIFY 打开校验。


🖥 使用说明(交互)

  • 开机流程

    1. 显示启动图(2 s)→ 主界面。
    2. Wi‑Fi 连接成功后触发 NTP 校时,顶部时钟开始走动。
  • 主界面按钮

    1. 小夜灯:进入灯控界面(暖/冷/白、亮度 0~4、开/关)。

    2. AI 对话:进入聊天 UI;

      • 按住 GPIO33 录音,松手或 10 s 到达后结束;
      • 识别结果自动作为用户输入,随后调用 Chat 接口,回传文本 + TTS 播报。
    3. 语音词典:流程同上,但使用字典系统提示词与展示布局。

    4. 智能时钟:进入二级菜单:

      • 闹钟:3 组(单次/工作日/周末)。点击条目进入编辑界面(小时/分钟滚轮),右侧圆点点击启/停。
      • 倒计时:设置 HH:MM:SS,开始后每秒刷新;到时红蓝闪烁 2 s 并播放提示音。
      • 秒表:开始/结束,显示 分:秒:厘秒。
  • BLE 心率:启动后自动扫描并连接示例目标(ble/ble_hrm_client.c 中的 TARGET_NAME/TARGET_ADDR 可修改)。订阅通知后实时更新心率,超过阈值(默认 130 bpm)变红并显示 “SOS”。


🔩 模块要点

音频(audio/audio_init

  • 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():单次采集片段。

录音与识别(audio/capture + stt/baidu_stt_stream.c

  • 每次采集固定 chunk(示例 16 KB ≈ 0.25 s,立刻发送)。
  • 就地抽 左声道并降采样到 8 kHz 后送出(可按需改为全链路 16 kHz)。
  • 采用 Transfer-Encoding: chunked 持续写入;结束时写终止块并解析 JSON。

TTS(tts/tts_task.c

  • 构造 JSON 调用 /v1/audio/speech,返回 WAV;
  • 单声道 → 本地扩展成左右相同的双声道,再通过 DMA 播放。

Chat(llm_client/message_task.c + ui/chat_ui.c/ui/dict_ui.c

  • 队列解耦 UI 与网络请求;收到回复后更新 UI,并把文本投喂 TTS。

BLE 心率(ble/ble_hrm_client.c + ui/heart_rate_ui.c

  • 完整的扫描→连接→加密→发现服务→订阅通知流程;解析 Measurement Flags 与 8/16-bit 心率值。

HTTPS 基础设施(wifi_manager/https

  • 基于 mbedTLS 的轻量封装:SNI、证书校验、Content‑Length 处理、分块读写、超时控制。

文件系统/资源(fatfs/fatfs_utils.c

  • WAV 裸读(跳过 44 字节头)、图片按 RGB565 裸图读入并构造 lv_img_dsc_t

⚙️ 配置项速查

  • Wi‑Fiwifi_manager/wifi_task.cwifi_sta_connect()
  • 证书certs/siliconflow_cert.c(宏 BL_VERIFY
  • Chat Tokenllm_client/message_task.cAUTH_BEARER_TOKEN
  • TTS Tokentts/tts_task.cTOKEN
  • 百度 STT Tokenstt/baidu_stt_stream.cs_token
  • BLE 目标ble/ble_hrm_client.cTARGET_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_coderesp_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 模型支持。
  • 百度语音识别(短语音、流式)接口示例。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages