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