语音模块固件配置方法

Tutorial: 卓越工程师 Category: 嵌入式 Published: 2026-10-23 11:05:29 Views: 1 Likes: 0 Comments: 0

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/

视频通过右上角入口和微信扫码登录。平台界面、登录方式和菜单名称可能随版本更新,应以当前官网为准;不要从搜索广告或非官方镜像输入账号、扫码或下载固件。

基本流程为:

  1. 打开官方平台并登录;
  2. 进入“所有产品”或“创建产品”;
  3. 新建产品并选择场景、模组和语言;
  4. 配置引脚、串口输入触发、控制动作和语音;
  5. 执行配置检查;
  6. 发布版本,等待平台生成并下载 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 中的物理序号本项目用途
B6UART1_RX7接收 STM32 发来的语音触发帧
B7UART1_TX8UART 发送端;当前业务没有使用

串口参数为:

参数配置值
波特率115200 bit/s
数据位8
停止位1
校验无
接收帧头AA 55
接收帧尾55 AA

帧头和帧尾均为 2 字节,不是原稿所说的单字节 0x55。无参数消息的完整格式为:

AA 55 消息编号 55 AA

课程生成包的说明文件还规定:若消息带参数,参数位于消息编号与帧尾之间;整数占 4 字节、双精度小数占 8 字节、字符占 1 字节,多字节数据按低位到高位发送。本项目的四条消息都没有参数,所以每帧固定为 5 字节。

整机接线不是 SU-03T B6 接 STM32 PB6。本项目应为:

STM32F103ZESU-03T作用
PB10 / USART3_TXB6 / UART1_RXSTM32 向语音模块发送命令
GNDGND必须提供共同电位参考

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 控制详情设置

每个行为的控制详情包含两部分:

  1. 触发条件:选择 UART1_RX,填写消息编号;
  2. 控制动作:选择播放语音,填写对应文本。

最终工程的准确映射如下:

平台行为UART 端口消息编号播放文本是否延迟
LoginSuccUART1_RX01人脸录入成功否
FindSuccUART1_RX02人脸识别成功否
DelSuccUART1_RX03人脸删除成功否
TempErrUART1_RX04温度异常否

平台也允许把动作配置成 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.binSU-03T 串口升级固件,本课程用蜂鸟串口升级工具烧录
jx_su_03t_release.bin专用烧录器版本,只能配合相应烧录器
王锋人脸门锁_20231121002.json平台工程配置,用于核对或继续编辑,不是直接烧入的固件
uart/jx_uart_send.c/.h主机端协议封装模板,必须自行实现底层发送函数才会真正发数据

课程资料实际只提供 SU-03T 的 _release_update.bin,正好对应第 276 节使用串口升级工具的流程。烧录前应确认文件来自课程包或官方平台、释放被占用的 COM 口、按工具要求连接 B6/B7/GND 并使用稳定电源;不要只靠修改文件名在两种固件格式之间转换。

固件发布与整机验证的闭环是:

  1. 平台配置检查通过并生成版本;
  2. 下载并保存 JSON 与固件,记录版本号;
  3. 用正确方式把 _release_update.bin 烧入 SU-03T;
  4. 先用串口工具以 115200、8N1、HEX 模式逐条测试 01~04;
  5. 再接回 STM32 PB10,验证前三条实际业务帧;
  6. 若要启用温度异常语音,再在 STM32 中增加带状态变化或节拍限流的 04 发送逻辑,避免 100 ms 主循环连续刷屏式发送。

参考资料