演示视频
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("x",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卡