在該語音主動告警系統中,需要語音時別模塊和網絡告警模塊。
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
審核編輯:劉清
-
傳感器
+關注
關注
2553文章
51467瀏覽量
756953 -
GPIO
+關注
關注
16文章
1217瀏覽量
52440 -
語音模塊
+關注
關注
1文章
223瀏覽量
17457 -
uart通信
+關注
關注
0文章
19瀏覽量
7027
原文標題:用XR806實現語音緊急呼叫系統,可以離線識別語音
文章出處:【微信號:gh_79acfa3aa3e3,微信公眾號:全志在線】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論