1.背景介紹
老人和小孩子獨(dú)自在家的時候如果遇到緊急情況,通過撥打電話或者微信的方式通知家人存在操作不便的問題。例如,如果老人摔倒了手機(jī)很可能不在身邊,對小孩來說手機(jī)的操作又過于復(fù)雜。針對這種情況,研發(fā)一種主動語音上報(bào)的系統(tǒng),語音實(shí)時時別人的求救聲,然后通過網(wǎng)絡(luò)發(fā)送信息告知家人。
2.硬件選型
在該語音主動告警系統(tǒng)中,需要語音時別模塊和網(wǎng)絡(luò)告警模塊。xr806有豐富的外圍接口,能夠采集外部多種傳感器的數(shù)據(jù),功耗低,可以采用移動電源供電,支持wifi和bt,體積小,可以靈活部署于房間的各個角落。語音模塊選用天問的ASRPRO模塊,該模塊集成度高,支持模塊化編程,識別率高的特點(diǎn)。
硬件連接框圖如下所示,Speech Module支持uart通信和gpio信號,本次實(shí)驗(yàn)選用gpio通信,即當(dāng)識別到特定詞匯時拉高gpio向xr806發(fā)送信后,xr806接收到信號后發(fā)送信息給mqtt client。
硬件實(shí)物鏈接如下圖所示
3.軟件實(shí)現(xiàn)
3.1 軟件流程
軟件整體的流程如下圖所示。xr806完成初始化以后,連接網(wǎng)絡(luò),建立mqtt連接等待語音模塊的輸入,接收到信號后,發(fā)送mqtt信息給broken,訂閱該topic的所有client都會收到該告警信號。語音試別模塊上電完成初始化以后輸入語音提示信息并循壞等待語音的輸入,匹配到對應(yīng)語音后拉高gpio發(fā)送信號給x806,延遲一秒下拉gpio,并輸入提示語音。
3.2 語音識別(ASR)的實(shí)現(xiàn)
天問的語音試別模塊支持類似Scrach的模塊化圖形編程,程序代碼如下。
程序編寫完成后先生成模型,然后編譯下載即可。
3.3 XR806主機(jī)編程
3.3.1 工程的建立
3.3.2 代碼開發(fā)
官方SDK中提供了參考,代碼位于xr806_sdk/project/example
,本次實(shí)現(xiàn)主要參考gpio和mqtt兩個文件,基于mqtt的代碼完成整體工程的開發(fā)。
官方例程是采用的阿里云的mqtt broken服務(wù),使用前需要注冊,本次開發(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,該工具跨平臺且提供網(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信號,然后再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:%dn", ret);
reconnect:
printf("mqtt reconnectn");
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
}
3.3.3 編譯執(zhí)行
編譯步驟可以參考工程建立章節(jié)提供的鏈接,官方實(shí)例,mqtt的啟動依賴于網(wǎng)絡(luò)的建立,因此系統(tǒng)啟動后需要先建立網(wǎng)絡(luò),建立網(wǎng)絡(luò)的命令如下:
# net sta config [ssid] [password]
# net sta enable
系統(tǒng)啟動以后,說一句“救命”,XR806就會發(fā)送"SOS"信息到broken,同時語音試別模塊會發(fā)出“我來了”的提示信息。訂閱/topic/xr806-sos
該topic的Client會收到sos信息,如下:
4.總結(jié)
首先感謝極術(shù)社區(qū)和全志科技組織的這次活動,能夠有機(jī)會試用到功能如此強(qiáng)悍的芯片。通過本次試用一方面對XR806芯片本身的功能和開發(fā)流程有了更深入的了解,另一方面也接觸到了FreeRtos的開發(fā)。相對于鴻蒙liteos SDK,F(xiàn)reeRtos的SDK使用起來方便了很多,這也看出了廠商的用心。因?yàn)闀r間的原因XR806的很多功能還沒有來得及挖掘,接下來有時間會利用這顆芯片做一些更有意思的設(shè)計(jì)。
-
傳感器
+關(guān)注
關(guān)注
2561文章
52200瀏覽量
761881 -
ASR
+關(guān)注
關(guān)注
2文章
44瀏覽量
18998 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
485瀏覽量
63534 -
GPIO
+關(guān)注
關(guān)注
16文章
1238瀏覽量
53330 -
MQTT協(xié)議
+關(guān)注
關(guān)注
0文章
98瀏覽量
5742
發(fā)布評論請先 登錄
相關(guān)推薦
【XR806開發(fā)板適用】基于多源信息融合的糧食霉變檢測系統(tǒng)設(shè)計(jì)

基于全志XR806開發(fā)板的家用環(huán)境監(jiān)測傳感器設(shè)計(jì)

如何使用XR806開發(fā)板來設(shè)計(jì)一個糧食霉變檢測系統(tǒng)?

OpenHarmony南向嵌入式:【XR806開發(fā)板指導(dǎo)文檔】

用全志XR806開發(fā)板實(shí)現(xiàn)語音緊急呼叫系統(tǒng)
XR806芯片、XR806開源鴻蒙開發(fā)板簡介
XR806芯片、XR806開源鴻蒙開發(fā)板簡介
有哪位大神可以分享一下XR806開發(fā)板/模組的資料呢
簡述星辰處理器的全志XR806鴻蒙開發(fā)板上手體驗(yàn)

簡述XR806開發(fā)板與STAR-MC1處理器
【XR806開發(fā)板試用】留言板功能開發(fā)
【XR806開發(fā)板試用】FreeRTOS創(chuàng)建任務(wù)測試

XR806串口驅(qū)動CM32M對小廚寶的控制實(shí)驗(yàn)

評論