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