智能家居離線語音識別控制系統(tǒng)設(shè)計(SU-03T)
??想了解更多關(guān)于開源的內(nèi)容,請訪問:??
一、離線語音識別控制(SU-03T)
1、模塊介紹
語音識別模塊是在一種基于嵌入式的語音識別技術(shù)的模塊,主要包括語音識別芯片和一些其他的附屬電路,能夠方便的與主控芯片進行通訊,開發(fā)者可以方便的將該模塊嵌入到自己的產(chǎn)品中使用,實現(xiàn)語音交互的目的。
模塊實物圖如下:
2、模塊的IO口說明
這款模塊常用的IO口有7個分別為: PA25、PA26、PA27、PB2、PB3、PB6、PB7
模塊出廠內(nèi)置的固件命令詞如下: -----這些都可以進行自己定制的。
(1) 喚醒詞:你好,小智
(2) 命令詞及其控制引腳(3.3V)
(高低電平輸出)
打開空調(diào):PA25 輸出高電平
關(guān)閉空調(diào): PA25 輸出低電平
打開插座: PA26 輸出高電平
關(guān)閉插座: PA26 輸出低電平
打開開關(guān):PA27 輸出高電平
關(guān)閉開關(guān):PA27 輸出低電平
(PWM輸出)
打開風(fēng)扇:PB2高電平有效起始檔位50%
關(guān)閉風(fēng)扇:PB2輸出低電平﹐檔位0%
調(diào)高一檔:PB2檔位增加30%
調(diào)低一檔:PB2檔位減小30%
(PWM輸出)
打開燈光:PB3高電平有效亮度檔位50%
關(guān)閉燈光:PB3輸出低電平,亮度0%
調(diào)亮一點:PB2亮度增加30%
調(diào)暗一點:PB3亮度減小30%
3、語音模塊與STM32接線
為方便擴展更加靈活的語音控制,可以把B2(UART1_TX)和B3(UART1_RX)做為與其他MCU的通信的接口。
(0) 語音控制模塊與STM32單片機接線的方式
GND--------GND 地
VCC--------VCC 電源(3.3V)
STM32的PA10(RX)---語音模塊SU-03T的PB2(UART1_TX)
STM32的代碼里接收語音模塊串口返回的響應(yīng)指令進行對應(yīng)的處理:
OneNet云端控制界面:
4、STM32的串口處理代碼
//實時接收語音模塊返回的數(shù)據(jù)
if(USART1_RX_FLAG)
{
printf("語音模塊響應(yīng):%d\r\n",USART1_RX_CNT);
//向串口打印服務(wù)器返回的數(shù)據(jù)
for(i=0;i<USART1_RX_CNT;i++)
{
printf("%#X ",USART1_RX_BUFFER[i]);
}
printf("\r\n");
//手動模式
if(mode==0)
{
//說明: 這里的cmd_x_on 和 cmd_x_off 與語音模塊匹配的。
//具體可以根據(jù)自己情況修改命令詞語
//正常情況下,語音模塊返回的十六進制
//空調(diào)開
if(USART1_RX_BUFFER[0]==0xA0)
{
printf("語音-空調(diào)已打開.\r\n");
ON_AirConditioner();
sw3=1;
}
//空調(diào)關(guān)
else if(USART1_RX_BUFFER[0]==0xA1)
{
printf("語音-空調(diào)已關(guān)閉.\r\n");
OFF_AirConditioner();
sw3=0;
}
//臥室燈開
if(USART1_RX_BUFFER[0]==0xB0)
{
printf("語音-臥室燈已打開.\r\n");
sw1=1;
}
//臥室燈關(guān)
else if(USART1_RX_BUFFER[0]==0xB1)
{
printf("語音-臥室燈已關(guān)閉.\r\n");
sw1=0;
}
//客廳燈開
if(USART1_RX_BUFFER[0]==0xC0)
{
printf("語音-客廳燈已打開.\r\n");
sw2=1;
}
//客廳燈關(guān)
else if(USART1_RX_BUFFER[0]==0xC1)
{
printf("語音-客廳燈已關(guān)閉.\r\n");
sw2=0;
}
//如需要其他指令,接著增加即可
}
memset(USART1_RX_BUFFER,0,sizeof(USART1_RX_BUFFER));
USART1_RX_CNT=0;
USART1_RX_FLAG=0;
}
STM32串口收到語音模塊的指令如下:
5、在線定制語音模塊代碼
網(wǎng)站: http://www.smartpi.cn/#/。
(1)登錄賬號
(2)登錄后,進行創(chuàng)建產(chǎn)品。
(3)選擇離線方案
(4)配置語音識別與引腳功能
這些引腳可以配置為普通的輸出引腳,直接連接外部電路,或者單片機的輸入引腳配合完成一些邏輯控制。
SU-03T語音模塊引出的GPIO口數(shù)量有限,為了擴展更加靈活的控制方式,可以配置串口引腳,通過串口與單片機進行通信,完成更靈活更多的語音控制。
(5)定制喚醒詞
喚醒詞自定義規(guī)則
~只支持中文,3-6個字,4個字為最佳;
~避免使用敏感詞:包含政治,偉人名字、臟話,黃賭毒等;
~避免使用口語化的詞匯,口語詞匯日常使用頻率很高,容易導(dǎo)致誤喚醒,如“你好啊”;
~喚醒詞發(fā)音應(yīng)選擇易開口,響度大,發(fā)音清晰易分辨的詞;
~避免使用多音字,喚醒詞的音節(jié)覆蓋應(yīng)盡量多,差異大;
~避免使用疊字,避免連續(xù)使用零聲母的詞,如“安”;
~如因使用市面上已存在的喚醒詞而產(chǎn)生糾紛,由開發(fā)者自行承擔(dān),請慎重選擇。
~喚醒詞加上免喚醒的命令詞,總數(shù)不能超過10條。
(5)離線命令詞與應(yīng)答語自定義
命令詞和回復(fù)語自定義規(guī)則
~命令詞是想要定義的語音話術(shù),用戶必須按照定義的話術(shù)說出才有效。如用戶可以使用“設(shè)置十五度”“十五度”來實現(xiàn)同一個設(shè)置溫度15度的控制。
~一個行為的命令詞允許填多條,多條命令詞之間用“|”隔開。當(dāng)設(shè)置多條命令詞時,說每個命令詞都能觸發(fā)該行為。
~回復(fù)語是針對該條控制指令的設(shè)備回復(fù)播報。
~單條回復(fù)語不得超過500個字符,支持中英文、逗號、句號、問號,不要使用阿拉伯?dāng)?shù)字,可以用中文數(shù)字來代替。
~回復(fù)語中支持標(biāo)簽<py></py>,來指定某些多音字播報時的讀音。
~例:已調(diào)<py>tiao2</py>至中<py>zhong1</py>風(fēng)檔,
~注:拼音聲調(diào)范圍為 1 - 5,1 - 4 對應(yīng)一聲到四聲,5對應(yīng)輕聲。
~播報為:已調(diào)(tiao2)至中(zhong1)風(fēng)檔。
~一個行為的回復(fù)語允許填多條,多條回復(fù)語之間用“|”隔開。當(dāng)設(shè)置多條回復(fù)語時,行為被觸發(fā)后,系統(tǒng)會隨機選擇一條回復(fù)語進行播報。
下面是我定制的幾個命令詞。
模塊識別到命令詞之后可以做出一些響應(yīng),點擊后面的 >> 圖標(biāo)進行設(shè)置。
點擊 《添加控制》按鈕,配置響應(yīng)的方式。
設(shè)置 控制類型為串口輸出,輸出的參數(shù)我填的A0,主要是為了方便區(qū)分而已。這里可以自己定義的。
也就是當(dāng)語音模塊識別到 《打開空調(diào)》 指令之后,會通過串口1發(fā)送一個串指令出去,單片機收到這條指令就可以進行判斷,完成對應(yīng)的邏輯控制。
發(fā)出的指令是這樣的: (十六進制的指令)。
A0
下面的其他命令依次配置即可。
(6)還可以配置免喚醒詞的命令
非重點,根據(jù)自己習(xí)慣愛好配置即可。
(7)發(fā)音人配置
非重點,根據(jù)自己習(xí)慣愛好配置即可。
(8)檢查配置
(9)生成新版本
(10)生成SDK。
生成需要等待一段時間,生成成功會有手機短信提醒的,生成之后就可以下載了。
(11)編譯固件
SDK生成之后,點擊后面 《編譯固件》按鈕,添加固件進行編譯。
編譯成功后,點擊下載固件。
(12)下載SDK包
SDK包里包含了燒錄工具套裝。
6、固件燒錄
下載的SDK解壓后的文件夾為 uni_hb_m_solution。
注意: 解壓的目錄不能出現(xiàn)中文。
解壓后打開燒錄工具:UniOneUpdateTool.exe
準(zhǔn)備一個USB-TTL模塊,將模塊與電腦的USB口連接,準(zhǔn)備燒錄程序。
連線如下:
VCC--->5V
GND--->USB轉(zhuǎn)TTL的模塊
B6(UART1_RX)--->USB-TTL模塊的TXD
B7(UART1_TX)--->USB-TTL模塊的RXD
待升級的固件選擇:uni_app_release_update.bin。
SDK包里也帶了PDF說明文檔,詳情看文檔即可。