在該語音主動(dòng)告警系統(tǒng)中,需要語音時(shí)別模塊和網(wǎng)絡(luò)告警模塊。
XR806有豐富的外圍接口,能夠采集外部多種傳感器的數(shù)據(jù),功耗低,可以采用移動(dòng)電源供電,支持wifi和bt,體積小,可以靈活部署于房間的各個(gè)角落。語音模塊選用天問的ASRPRO模塊,該模塊集成度高,支持模塊化編程,識(shí)別率高的特點(diǎn),故非常適合本項(xiàng)目的功能需求。
硬件連接
硬件連接框圖如下所示,Speech Module支持uart通信和gpio信號(hào),本次實(shí)驗(yàn)選用gpio通信,即當(dāng)識(shí)別到特定詞匯時(shí)拉高gpio向xr806發(fā)送信后,xr806接收到信號(hào)后發(fā)送信息給mqtt client。
硬件配置
軟件實(shí)現(xiàn)
語音試別模塊上電完成初始化以后輸入語音提示信息并循壞等待語音的輸入,匹配到對(duì)應(yīng)語音后拉高gpio發(fā)送信號(hào)給x806,延遲一秒下拉gpio,并輸入提示語音,軟件整體的流程如下圖所示。
xr806完成初始化以后,連接網(wǎng)絡(luò),建立mqtt連接等待語音模塊的輸入,接收到信號(hào)后,發(fā)送mqtt信息給broken,訂閱該topic的所有client都會(huì)收到該告警信號(hào)。
天問的語音試別模塊支持類似Scratch的模塊化圖形編程,程序編寫完成后先生成模型,然后編譯下載即可,程序代碼如下:
XR806主機(jī)編程
官方SDK中提供了參考,代碼位于xr806_sdk/project/example,本次實(shí)現(xiàn)主要參考gpio和mqtt兩個(gè)文件,基于mqtt的代碼完成整體工程的開發(fā)。
官方例程是采用的阿里云的mqtt broken服務(wù),使用前需要注冊(cè),本次開發(fā)采用EMQX提供的免費(fèi)的公共MQTT服務(wù)器,相關(guān)信息如下:
按照此信息修改代碼的定義:
#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免費(fèi)的MQTTX,該工具跨平臺(tái)且提供網(wǎng)頁版。手機(jī)端可以搜到MQTT助手等類似工具。
GPIO直接套用實(shí)例中的即可,需要完成默認(rèn)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信號(hào),然后再publish信息,相關(guān)修改如下:
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 }
編譯步驟可以參考工程建立章節(jié)提供的鏈接,官方實(shí)例,mqtt的啟動(dòng)依賴于網(wǎng)絡(luò)的建立,因此系統(tǒng)啟動(dòng)后需要先建立網(wǎng)絡(luò),建立網(wǎng)絡(luò)的命令如下:
# net sta config [ssid] [password] # net sta enable
系統(tǒng)啟動(dòng)以后,說一句“救命”,XR806就會(huì)發(fā)送"SOS"信息到broken,同時(shí)語音試別模塊會(huì)發(fā)出“我來了”的提示信息。訂閱/topic/xr806-sos該topic的Client會(huì)收到sos信息,如下:
本文轉(zhuǎn)載自https://aijishu.com/a/1060000000433840
審核編輯:劉清
-
傳感器
+關(guān)注
關(guān)注
2545文章
50445瀏覽量
751063 -
GPIO
+關(guān)注
關(guān)注
16文章
1188瀏覽量
51836 -
語音模塊
+關(guān)注
關(guān)注
1文章
223瀏覽量
17327 -
uart通信
+關(guān)注
關(guān)注
0文章
19瀏覽量
6994
原文標(biāo)題:用XR806實(shí)現(xiàn)語音緊急呼叫系統(tǒng),可以離線識(shí)別語音
文章出處:【微信號(hào):gh_79acfa3aa3e3,微信公眾號(hào):全志在線】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論