语音模块固件配置方法
282.8语音模块固件配置方法
本节在“智能公元”网页平台中配置并发布 SU-03T 固件,没有新建或修改 STM32/K210 业务源码,因此标题下不添加源码代码块。课程压缩包中的
jx_uart_send.c/.h是平台生成的主机端串口发送模板,并未在视频中编写,也没有被当前 STM32 工程调用;下文只用它和平台工程 JSON 核对协议。
一、语音模块配置方法
本节的目标不是让 SU-03T 通过麦克风控制门锁,而是把它配置成一个由 STM32 串口触发的语音播报器。模块收到指定的 5 字节帧后,分别播放“人脸录入成功”“人脸识别成功”“人脸删除成功”和“温度异常”。
课程资料中的最终平台工程为:
- 工程文件:
语音模块固件/jx_firm/王锋人脸门锁_20231121002.json; - 模组:SU-03T;
- 最终版本:
20231121002; - 固件:
语音模块固件/jx_firm/jx_su_03t_release_update.bin; - 运行方式:纯离线,串口触发播放预先生成到固件中的语音。
这里的“纯离线”是指固件烧入后,识别与播报不依赖云端网络;创建产品、云端生成 SDK/固件和下载文件仍然需要联网。
1.1 语音模块官网访问
课程思维导图中的“语音模块配置官网”链接是智能公元零代码平台:
https://smartpi.cn/
视频通过右上角入口和微信扫码登录。平台界面、登录方式和菜单名称可能随版本更新,应以当前官网为准;不要从搜索广告或非官方镜像输入账号、扫码或下载固件。
基本流程为:
- 打开官方平台并登录;
- 进入“所有产品”或“创建产品”;
- 新建产品并选择场景、模组和语言;
- 配置引脚、串口输入触发、控制动作和语音;
- 执行配置检查;
- 发布版本,等待平台生成并下载 SDK/固件包。
课程 JSON 中含有平台项目标识、下载地址以及鉴权字段。分享工程文件前应删除或替换敏感字段,不要把完整 JSON 直接提交到公开仓库;若凭据已经公开,应在平台侧重新生成或停用。
1.2 产品类型选择
视频选择“智能门禁”作为产品类型,也说明可以选 RGB 灯等其他分类。在本课程中,产品类型主要用于平台项目的分类和模板入口;但不同平台版本可能根据类型提供不同默认行为,不能一概断言它永远不影响配置。
真正决定本项目技术路径的选项是:
- 应用场景选择“纯离线方案”;
- 模组选择 SU-03T;
- 产品语言选择中文;
- 串口输入行为和播报动作按本项目协议配置。
1.3 纯离线方案选择
选择纯离线方案后,再从可用模组中选择 SU-03T。课程最终 JSON 明确记录 _module_name_ 为 SU-03T,不能把相近的 SU-11T、SU-13T 或其他平台模组当作完全相同的目标。
课程将产品命名为“王锋人脸门锁”。产品名称只是平台项目标识;STM32 发送给模块的是二进制消息帧,不会在串口中传输这个中文产品名。
1.4 产品信息配置
课程选择中文语言。语言选项影响语音识别模型、唤醒词和文本转语音资源,必须在生成固件前确定;它不是烧录完成后由 STM32 串口临时切换的参数。
保存产品信息后进入详细配置。平台可能先填入一套默认唤醒词、命令词、引脚和回复,不能因为页面已有内容就认为符合当前门禁协议,仍应逐项核对。
1.5 前端信号处理配置
SU-03T 是单麦模组,课程不能勾选双麦配置。课程最终 JSON 中的信号配置为:
| 配置项 | 最终保存值 | 说明 |
|---|---|---|
| 麦克风数量 | 1 | 单麦 |
| 拾音场景 | near | 平台近场选项;不应机械等同于固定的实际距离 |
| 降噪 | 0 | 最终归档配置未启用该选项 |
视频建议在嘈杂环境使用稳态降噪,但也说明当前项目没有接入麦克风,所以这一设置不影响四条串口触发播报。是否启用降噪应根据模组能力、噪声类型和实测识别率决定,不是任何场景都必须打开。
页面显示的“0~1 米”“1~5 米”等档位是算法场景选择或参考范围,不是对所有声源、咪头、外壳和噪声条件都成立的保证。当前项目只用 UART 输入,距离和唤醒灵敏度不是主链路参数。
1.6 引脚配置方法
原稿把模块引脚写成“PP6、PP7”或“PB6、PB7”,容易与 STM32 的 PB6/PB7 混淆。这里指的是 SU-03T 模组的 B6、B7:
| SU-03T 引脚 | 平台功能 | JSON 中的物理序号 | 本项目用途 |
|---|---|---|---|
| B6 | UART1_RX | 7 | 接收 STM32 发来的语音触发帧 |
| B7 | UART1_TX | 8 | UART 发送端;当前业务没有使用 |
串口参数为:
| 参数 | 配置值 |
|---|---|
| 波特率 | 115200 bit/s |
| 数据位 | 8 |
| 停止位 | 1 |
| 校验 | 无 |
| 接收帧头 | AA 55 |
| 接收帧尾 | 55 AA |
帧头和帧尾均为 2 字节,不是原稿所说的单字节 0x55。无参数消息的完整格式为:
AA 55 消息编号 55 AA
课程生成包的说明文件还规定:若消息带参数,参数位于消息编号与帧尾之间;整数占 4 字节、双精度小数占 8 字节、字符占 1 字节,多字节数据按低位到高位发送。本项目的四条消息都没有参数,所以每帧固定为 5 字节。
整机接线不是 SU-03T B6 接 STM32 PB6。本项目应为:
| STM32F103ZE | SU-03T | 作用 |
|---|---|---|
| PB10 / USART3_TX | B6 / UART1_RX | STM32 向语音模块发送命令 |
| GND | GND | 必须提供共同电位参考 |
SU-03T 的 B7/UART1_TX 在当前单向播报业务中可以不接。STM32 的 PB6/PB7 已用于 OLED 与 GY-906 总线,与这里不是同一组信号。
1.7 唤醒词自定义
平台允许按规则修改唤醒词。视频临时演示了“你好小爱”,并触发了对重复、相近发音的提示;这类提示是为了提高离线识别区分度,不应简单写成“任何叠词都绝对禁止”。选词时应遵循页面给出的字数、发音和重复度检查结果,并在目标噪声环境中实测。
课程最终 JSON 保存的唤醒词实际是“哆啦咪”,没有唤醒回复;并非视频演示输入的“你好小爱”。这再次说明操作演示中的临时值不一定就是发布版本的最终值。
当前整机没有连接或使用麦克风,正常业务完全由 UART1_RX 触发。保留唤醒词是平台项目的基础配置,不表示门锁运行时必须先说唤醒词才能接收串口帧。
1.8 命令词配置
四个门禁行为都应把触发方式设为“串口输入”,而不是语音命令词:
LoginSucc:人脸录入成功;FindSucc:人脸识别成功;DelSucc:人脸删除成功;TempErr:温度异常。
视频删除默认命令词后,平台配置检查提示命令词不能为空。这不是说四个 UART 行为还必须用麦克风触发,而是项目中仍存在一个“命令词”类型的占位项,不能为空。课程最终 JSON 使用“空白占用”作为该占位命令词,动作是 NULL,四个实际业务行为仍全部由 uart_in 触发。
因此,“至少保留一个命令词”是当前平台配置校验和该工程模板的约束,不应误解为串口收到帧后还要同时识别一句语音。
1.9 控制详情设置
每个行为的控制详情包含两部分:
- 触发条件:选择
UART1_RX,填写消息编号; - 控制动作:选择播放语音,填写对应文本。
最终工程的准确映射如下:
| 平台行为 | UART 端口 | 消息编号 | 播放文本 | 是否延迟 |
|---|---|---|---|---|
LoginSucc | UART1_RX | 01 | 人脸录入成功 | 否 |
FindSucc | UART1_RX | 02 | 人脸识别成功 | 否 |
DelSucc | UART1_RX | 03 | 人脸删除成功 | 否 |
TempErr | UART1_RX | 04 | 温度异常 | 否 |
平台也允许把动作配置成 GPIO 输出或延迟执行,但本项目四个动作都只是立即播放一次语音,JSON 中 is_delayed 为 0。STM32 上一节使用系统 tick 做的 5 秒门控,与语音平台的“延迟输出”不是同一种机制。
1.10 语音播报内容设置
四条完整串口帧如下:
| STM32 → SU-03T | 模块动作 |
|---|---|
AA 55 01 55 AA | 播放“人脸录入成功” |
AA 55 02 55 AA | 播放“人脸识别成功” |
AA 55 03 55 AA | 播放“人脸删除成功” |
AA 55 04 55 AA | 播放“温度异常” |
必须使用十六进制原始字节发送。若串口助手以文本模式发送字符 AA 55 01 55 AA,线上出现的是字符 A、空格、数字等 ASCII 字节,模块不会把它当作上述 5 字节协议帧。
原稿将“串口二接收 K210、串口三输出”与 SU-03T 平台中的“串口一”混在了一起。准确链路是:
K210 UART2 → STM32 USART2 → STM32 解析事件 → STM32 USART3/PB10 → SU-03T UART1_RX/B6 → 播放语音
三处“UART2/USART2、USART3、UART1”属于不同芯片上的外设编号,编号没有必要相同,只要物理接线、方向和通信参数匹配即可。
课程生成包中的 jx_uart_send.c/.h 为四个动作生成了 _uart_LoginSucc()、_uart_FindSucc()、_uart_DelSucc()、_uart_TempErr() 封装,但底层 _uart_send_impl() 仍是 TODO,不会自动连接到 STM32 UART。当前课程的 STM32 工程没有使用这些函数,而是在各分支中直接用 rt_device_write() 发送 5 字节数组,因此不能把生成模板误写成已参与运行的业务源码。
还要区分“固件支持”和“整机已调用”:SU-03T 固件已经配置 04 的温度异常语音,但第 281 节 STM32 最终源码只用蜂鸣器报警,没有发送 AA 55 04 55 AA,所以当前整机不会触发这条播报。
1.11 灵敏度设置
课程将唤醒词和命令词灵敏度设为“中”。灵敏度越高通常越容易触发,也可能增加误唤醒;越低则可能漏识别,最终应在实际外壳、麦克风和噪声环境中权衡。
“免唤醒词”允许某些命令无需先说唤醒词,但本项目不使用麦克风,所以没有勾选相关业务项。UART 触发本来就不依赖唤醒状态,不需要为了接收串口帧配置免唤醒词。
视频用“你好”演示了命令词回复流程;课程最终工程的占位词是“空白占用”,且没有控制动作或回复。这部分只为通过平台配置校验,不属于门禁功能。
1.12 发音人配置
最终 JSON 保存的语音参数为:
| 项目 | 最终值 |
|---|---|
| 发音人 | 糖糖 |
| 音量 | 50 |
| 语速 | 50 |
| 音色亮度 | 50 |
| 开机播报 | 关闭(none) |
| 唤醒退出时间 | 10 秒 |
| 超时/主动退出回复 | 未配置 |
视频所说“可以设为 60 秒”只是可选示例,课程归档最终值是 10 秒。由于项目不使用麦克风唤醒,退出时间和退出回复不会影响 UART 触发的四条播报。
平台支持把文本合成为语音,也可按平台限制导入个性化音频。导入 MP3 前应核对文件格式、大小、采样要求和使用授权;“平台允许上传”不等于任何音频都可合法用于发布。
1.13 优化配置
课程没有使用优化配置,最终 JSON 中 optimize_config 为空数组。该区域面向更复杂的算法或二次开发需求;没有明确目标时不应随意修改,以免生成的固件行为与当前串口协议不一致。
“二次开发”也不等于网页配置:网页平台用于生成固件和动作逻辑,真正修改底层 SDK、驱动或算法则需要相应开发资料、工具链和许可。
1.14 配置检查
发布前应执行平台的“查看配置”或配置检查。视频第一次失败的原因是仍存在命令词触发项,但内容为空。补上一个占位命令词后,检查通过。
完整检查清单如下:
- 模组确为 SU-03T,语言为中文;
- 单麦配置与硬件一致;
- B6/B7 被配置为 UART1_RX/UART1_TX;
- 波特率为 115200,数据格式为 8N1、无校验;
- 帧头为
AA 55,帧尾为55 AA; - 01~04 各自只对应一个预期动作和正确文本;
- 串口行为选的是
UART1_RX; - 不需要的延迟、GPIO 动作、开机播报和退出回复已经关闭;
- 必填的唤醒词/占位命令词满足平台校验;
- 保存后重新打开或导出 JSON,确认配置没有只停留在未保存的页面状态。
配置检查通过只证明平台字段满足生成规则,不证明 STM32 接线、波特率、语音模块供电、扬声器和固件烧录都正确。生成后仍需逐帧测试。
1.15 版本发布
版本描述可以自定义,视频举例“1.0 版本”;课程最终 JSON 的版本号实际为 20231121002,版本描述为空。点击发布后由平台生成 SDK/固件,视频中约需 10 分钟,但实际耗时取决于排队、网络和平台状态,应以页面或公众号通知为准。
下载包中要区分不同用途的固件:
| 文件 | 用途 |
|---|---|
jx_su_03t_release_update.bin | SU-03T 串口升级固件,本课程用蜂鸟串口升级工具烧录 |
jx_su_03t_release.bin | 专用烧录器版本,只能配合相应烧录器 |
王锋人脸门锁_20231121002.json | 平台工程配置,用于核对或继续编辑,不是直接烧入的固件 |
uart/jx_uart_send.c/.h | 主机端协议封装模板,必须自行实现底层发送函数才会真正发数据 |
课程资料实际只提供 SU-03T 的 _release_update.bin,正好对应第 276 节使用串口升级工具的流程。烧录前应确认文件来自课程包或官方平台、释放被占用的 COM 口、按工具要求连接 B6/B7/GND 并使用稳定电源;不要只靠修改文件名在两种固件格式之间转换。
固件发布与整机验证的闭环是:
- 平台配置检查通过并生成版本;
- 下载并保存 JSON 与固件,记录版本号;
- 用正确方式把
_release_update.bin烧入 SU-03T; - 先用串口工具以 115200、8N1、HEX 模式逐条测试 01~04;
- 再接回 STM32 PB10,验证前三条实际业务帧;
- 若要启用温度异常语音,再在 STM32 中增加带状态变化或节拍限流的 04 发送逻辑,避免 100 ms 主循环连续刷屏式发送。