演示视频
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卡
总 部 地 址:广州市增城区宁西街新耀北路56号
公司邮箱:hmi@gz-dc.com
公司传真:(020)82187676