STM32单片机与SU-03T联动(语音播报传感器数据)
需要用到的硬件
USB转TTL(用于烧录和测试)、杜邦线、SU-03T语音模块(配套的咪头和喇叭)、STM32F103C8T6最小系统板
浏览器直接搜索 智能公元 进行注册。
智能公元的使用
创建产品
选择SU-03T
配置GPIO
这里我们要用到语音播报传感器数据功能,所以我们只要用到串口,其他不用更改
自定义命令词
创建三条命令,选择好相应的触发方式以及相应的命令词
这里想要的效果是分别对语音模块说出三句不同的命令词,然后语音模块接收到命令词之后通过串口发送指令给单片机,单片机通过串口发数据帧给语音模块(数据帧包含传感器数据),语音模块进行播报。定义如下:
我们点击>>进入控制详情,为命令添加触发和添加控制
添加触发
这里我们定义两个参数,因为后面考虑到温度要返回小数点后一位,所以这里统一写两个参数,方便后面代码的统一编写,类型根据数据的大小去定义,这里我们用了unsigned char。
下面的数据帧解释:帧头帧尾分别是十六进制的AA 55和55 AA,第三个十六进制数是下图的消息编号,作用是语音模块读取到数据帧之后,区分要播报哪条指令。第四和第五个十六进制数分别是我们定义的两个参数,一个用来表示整数,一个用来表示小数。
添加控制
这样配置之后当我们的语音模块接收到AA 55 01 55 00 55 AA数据帧就会播报语音:测得当前的心率为85次每分钟。
特殊地,
返回有小数的传感器数据可以这么定义:
然后我们通过下面的命令来发送给单片机命令,让单片机发送数据帧给我们的语音模块。
添加控制
当我们说播报当前心率,语音模块就会通过串口给单片机发送十六进制数01,单片机接收到之后,就通过串口向语音模块发送带着传感器数据的数据帧。
配置好之后就点击右上角的发布版本
等待SDK的生成
烧录
下载烧录软件,点击官网的文档然后选择SU-03T
下载串口烧录软件
SDK生成完毕之后,下载固件,将它保存到全英语路径下,记得是全英文路径!
然后打开我们下载的串口烧录软件
选择全英文路径下这个比较长的bin文件
硬件连线
USB转TTL | SU-03T |
5V | VCC |
GND | GND |
TX | B6(RX) |
RX | B0(TX) |
重点来了重点来了重点来了
我们点击烧录后每个串口都会一个一个变成黄色,当黄色列到我们的烧录串口号,我们就拔掉SU-03T的VCC,只要拔掉VCC,其他的都不用拔,然后再接回去,这时如果显示app 0%,就说明开始烧录,如果失败了就多试几次。下面是烧录成功界面。
STM32代码
因为我们给语音模块传的数据帧都是十六进制数,而我们的传感器采集的数据是整数和浮点数,所有我们通过下面的代码就十进制数转换为十六进制数。
首先我们要初始化一个串口,然后将它设置为发送和接收模式。
然后在串口中断中设置一些标志位,区分不同指令不同操作:
然后我们再在主函数里面检测标志位,调用相应的播报任务函数: