演示视频
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卡