如何用XR806实现语音紧急呼叫系统的设计呢?

在该语音主动告警系统中,需要语音时别模块和网络告警模块。
xr806有丰富的外围接口,能够采集外部多种传感器的数据,功耗低,可以采用移动电源供电,支持wifi和bt,体积小,可以灵活部署于房间的各个角落。语音模块选用天问的asrpro模块,该模块集成度高,支持模块化编程,识别率高的特点,故非常适合本项目的功能需求。
硬件连接
硬件连接框图如下所示,speech module支持uart通信和gpio信号,本次实验选用gpio通信,即当识别到特定词汇时拉高gpio向xr806发送信后,xr806接收到信号后发送信息给mqtt client。
硬件配置
软件实现
语音试别模块上电完成初始化以后输入语音提示信息并循坏等待语音的输入,匹配到对应语音后拉高gpio发送信号给x806,延迟一秒下拉gpio,并输入提示语音,软件整体的流程如下图所示。
xr806完成初始化以后,连接网络,建立mqtt连接等待语音模块的输入,接收到信号后,发送mqtt信息给broken,订阅该topic的所有client都会收到该告警信号。
天问的语音试别模块支持类似scratch的模块化图形编程,程序编写完成后先生成模型,然后编译下载即可,程序代码如下:
xr806主机编程
官方sdk中提供了参考,代码位于xr806_sdk/project/example,本次实现主要参考gpio和mqtt两个文件,基于mqtt的代码完成整体工程的开发。
官方例程是采用的阿里云的mqtt broken服务,使用前需要注册,本次开发采用emqx提供的免费的公共mqtt服务器,相关信息如下:
按照此信息修改代码的定义:
#define mqtt_demo_client_id xr806-mqtt#define mqtt_demo_host_name mqtt://broker.emqx.io#define mqtt_demo_port      1883// #define mqtt_demo_username  xr806_senor_set0&vo84hm3xbuj// #define mqtt_demo_password  4f9ebb2143f01e4489133c1ea55051fbbfc4c44e#define mqtt_demo_topic     /topic/xr806-sos  
客户端采用emqx免费的mqttx,该工具跨平台且提供网页版。手机端可以搜到mqtt助手等类似工具。
gpio直接套用实例中的即可,需要完成默认func等配置的初始化:
static void gpio_input_init(void){  gpio_initparam param;  param.driving = gpio_driving_level_1;  param.mode = gpiox_pn_f0_input;  param.pull = gpio_pull_none;  hal_gpio_init(gpio_input_port, gpio_input_pin, ¶m);}static  uint8_t gpio_input_read(void){  return (uint8_t)hal_gpio_readpin(gpio_input_port, gpio_input_pin);}  
修改mqtt_demo_fun的while(1)代码块,先判断采集到的gpio信号,然后再publish信息,相关修改如下:
while (1) {    if (gpio_input_read()) {      /* publish message to topic */      mqtt_demo_publish(mqtt_demo_topic, mqtt_demo_msg_text);      ret = mqttyield(&mqtt_demo_client, 300);      if (ret != 0) {        printf(mqtt yield err, ret:%d, ret);reconnect:        printf(mqtt reconnect);        mqtt_demo_disconnect();        ret = mqtt_demo_connect(mqtt_demo_host_name, mqtt_demo_port);        if (ret != 0) {          reconnect_times++;          if (reconnect_times > 5)            goto exit;          os_msleep(5000); //5s          goto reconnect;        }      }    }    os_msleep(10); //10ms  }  
编译步骤可以参考工程建立章节提供的链接,官方实例,mqtt的启动依赖于网络的建立,因此系统启动后需要先建立网络,建立网络的命令如下:
# net sta config [ssid] [password]# net sta enable  
系统启动以后,说一句“救命”,xr806就会发送sos信息到broken,同时语音试别模块会发出“我来了”的提示信息。订阅/topic/xr806-sos该topic的client会收到sos信息,如下:
本文转载自https://aijishu.com/a/1060000000433840


即将改变世界的MEMS设备
DP智能数字压力模块的测量技术指标和性能特点分析
如何连接数电逻辑芯片
无惧跑偏 | 微米级重复精度,纠偏传感器为精密制造赋能
Intel 11代酷睿处理器为何从十核退到八核
如何用XR806实现语音紧急呼叫系统的设计呢?
人员定位解决方案为养老院人员搭起了智慧的桥梁
MAX9614/MAX9616 低功耗高精度运算放大器
Java sctipt常用事件汇总介绍
XLNet和Bert比,有什么不同?要进行改进吗?
基于Raspberry Pi 2B实现的自动化花园设计方案
用于高阻抗电路的低失真、低噪声放大器
小米持续为用户推出更好的电视产品 让用户享受到更好的使用体验
如何让无人机实现真“无人”?
夹具刀具的选择及切削用量的确定
各品牌ARM SoC技术比较分析
电磁兼容性EMC的指令要求
关于智能汽车电子架构下的汽车线束新形态的介绍和应用分析
分库分表的21条法则速来码住(上)
永磁同步电机和交流异步电机分析