演示視頻
1.1 適用范圍
開發(fā)前用戶需準(zhǔn)備好硬件平臺(tái):
1. 支持語(yǔ)音識(shí)別功能的M型系列7.0寸語(yǔ)音串口屏樣品,本文以型號(hào)為DC80480M070_1111_0C_AI為例進(jìn)行講解。
2. 語(yǔ)音詞條下載器(需單獨(dú)購(gòu)買)。
M系列語(yǔ)音識(shí)別串口屏是通過串口與語(yǔ)音芯片進(jìn)行通訊和交互。主要工作流程為以下兩種:
1) 語(yǔ)音芯片識(shí)別詞條命令-->下發(fā)指令到屏幕串口-->串口接收指令解析-->邏輯判斷-->屏幕響應(yīng);
2) 屏幕操作-->屏幕發(fā)送指令到語(yǔ)音芯片串口-->語(yǔ)音芯片接收解析指令-->語(yǔ)音提示。
圖 3-1 開發(fā)流程圖
首先用戶先自定義修改好語(yǔ)音詞條和提示,重新生成下載文件通過詞條下載器下載到語(yǔ)音芯片,此處主要介紹語(yǔ)音的功能介紹,不展開進(jìn)行詳細(xì)敘述,具體可參考《【M】型語(yǔ)音識(shí)別串口屏開發(fā)使用說明》文檔。
3.2 串口屏工程配置
串口屏工程的配置主要有以下 2 點(diǎn):
(1) 畫面配置
(2) LUA 腳本編輯
3.2.1 畫面配置
1. 在畫面 ID0 中,配置和語(yǔ)音芯片交互實(shí)現(xiàn)模擬燈光的控制開關(guān),此處將不針對(duì)這些基本控件的使用一一贅述,如圖3-2所示。
圖3-2 畫面配置
- ID1控件實(shí)現(xiàn)燈光的開關(guān)。
3.2.2 LUA腳本編輯
本例程中共分為四部分程序:
- 屏幕初始化:初始化串口配置,波特率設(shè)置為57600。
- 屏幕串口接收解析語(yǔ)音芯片指令。
- 屏幕串口發(fā)送指令到語(yǔ)音芯片。
- 屏幕邏輯判斷并響應(yīng)。
1. 初始化
調(diào)用系統(tǒng)函數(shù) on_init()執(zhí)行初始化串口,代碼如程序清單5所示:
程序清單5初始化
--[[********************************************************************* ** Function name: on_init ** Descriptions : 系統(tǒng)初始化時(shí),執(zhí)行此回調(diào)函數(shù)。 *************************************************************--]] function on_init() uart_set_baudrate3(57600) --初始化屏幕串口3波特率57600 Send_command_list() --初始化語(yǔ)音模塊指令集 End --[[*************************************************************************** ** Function name: Send_command_list ** Descriptions : 屏幕下發(fā)至語(yǔ)音芯片指令列表 *************************************************************--]] function Send_command_list() cmd_list["喚醒"] = 0 cmd_list["打開燈光"] = 1 cmd_list["關(guān)閉燈光"] = 2 end
核心API函數(shù):
1) uart_set_baudre3(speed)
設(shè)置串口的波特率。
- speed-通訊的波特率
2) Send_command_list()
自定義函數(shù),用戶定義好屏幕下發(fā)語(yǔ)音芯片的指令表。
2. 屏幕串口接收解析指令
屏幕串口接收并解析語(yǔ)音芯片指令并作出響應(yīng),具體程序如程序清單 6:
程序清單 6 串口接收解析指令
--[[************************************************************************ ** Function name: on_uart_recv_data3 ** Descriptions : 語(yǔ)音芯片-屏幕串口 ** @packet : 屏幕接收語(yǔ)音芯片的發(fā)送數(shù)據(jù) ** @value : 提取語(yǔ)音芯片下發(fā)的指令數(shù)據(jù) ************************************************************************--]] local cmd_head = 0 local recv_buffer2_count = 0 function on_uart_recv_data3(packet) local str ="" for i = 0,(#(packet)) do cmd_head = packet[i] str =str..string.format("%02X",packet[i]) if cmd_head==0XAA then recv_buff = {} recv_buffer2_count = 1 recv_buff[1] = 0xAA else recv_buffer2_count = recv_buffer2_count+1 recv_buff[recv_buffer2_count] = packet[i] end if recv_buffer2_count >= 4 then if recv_buff[4] == 0xBB then Instruction_operation() end recv_buff = {} end end end--[[************************************************************************ ** Function name: Instruction_operation ** Descriptions : 解析語(yǔ)音芯片下發(fā)的數(shù)據(jù)指令 ** @value : 提取指令,屏幕響應(yīng) ************************************************************************--]]function Instruction_operation() recv_buff[3] = string.format("%d",recv_buff[3]) if recv_buff[3] == "1" then --打開燈光 set_value(VoiceScreen_id,1,1) set_value(VoiceScreen_id,14,1) elseif recv_buff[3] == "2" then --關(guān)閉燈光 set_value(VoiceScreen_id,1,0) set_value(VoiceScreen_id,14,0) end end
核心API函數(shù)
1) on_uart_recv_data3(packet)
屏幕串口接收語(yǔ)音芯片下發(fā)的數(shù)據(jù)回調(diào)函數(shù)。
- packet:形參為表,字節(jié)數(shù)據(jù)。
3. 屏幕串口指令發(fā)送
屏幕串口發(fā)送對(duì)應(yīng)指令幀格式的指令到語(yǔ)音芯片,如程序清單 7:
程序清單 7 屏幕串口指令發(fā)送
--[[********************************************************************* ** Function name: Usart_send_cmdarry ** Descriptions : 串口下發(fā)指令。 ** @ cmd : 詞條列表 *************************************************************--]] function Usart_send_cmdarry(cmd) local usart_cmd = {} usart_cmd[0] = 0xAA //幀頭 usart_cmd[1] = 0x02 //功能碼:01代表語(yǔ)音芯片下發(fā)指令,02代表語(yǔ)音芯片接收指令 string.format("%X",cmd) usart_cmd[2] = cmd //詞條列表:本例程中對(duì)應(yīng)詞條列表00:大彩管家 01:打開燈光 02:關(guān)閉燈光 usart_cmd[3] = 0xBB //幀尾 uart_send_data3(usart_cmd) end
核心API函數(shù)
1) uart_send_data3(packet)
屏幕串口數(shù)據(jù)發(fā)送函數(shù)。
- packet:形參為表,字節(jié)數(shù)據(jù)。
4. 屏幕邏輯判斷
屏幕觸摸操作邏輯判斷,下發(fā)對(duì)應(yīng)指令到語(yǔ)音芯片,如程序清單 8:
程序清單 8 屏幕邏輯判斷
--[[********************************************************************* ** Function name: on_control_notify ** Descriptions : 用戶觸摸修改控件后,執(zhí)行此回調(diào)函數(shù)。 ** @ screen : 畫面ID ** @ control : 控件ID ** @ value : 控件值 *********************************************************************--]] function on_control_notify(screen,control,value) if screen == VoiceScreen_id then if control == 1 then if value == 0 then Usart_send_cmdarry(cmd_list["關(guān)閉燈光"]) set_value(VoiceScreen_id,14,0) elseif value == 1 then Usart_send_cmdarry(cmd_list["打開燈光"]) set_value(VoiceScreen_id,14,1) end end end end
核心API函數(shù)
1) on_control_notify(screen,control,value)
用戶觸摸修改控件后,執(zhí)行此回調(diào)函數(shù)。
- screen:畫面ID。
- control:控件ID。
- value:控件值。
3.2.3 下載工程
工程編譯成功后在輸出窗口會(huì)提示編譯成功,如圖3-3所示。編譯成功后點(diǎn)擊菜單欄中【工具】→【量產(chǎn)向?qū)А?,如圖3-4所示;
圖3-3 編譯成功
圖3-4 量產(chǎn)向?qū)?/span>
在菜單欄中,文件→打開工程目錄,在‘dciot_build’目錄的‘prive’拷貝到 SD 卡中,
如圖3-5所示;把 SD 卡接上串口屏后重新上電,等到提示燒錄工程成功后,拔掉 SD 卡重新上電即可。
圖3-5 拷貝到SD卡