大彩串口屏m型语音识别应用-米乐网页

演示视频


一、开发准备


1.1 适用范围

文档仅适用于m型语音识别系列的串口屏产品。






1.2 硬件平台准备

开发前用户需准备好硬件平台:

1. 支持语音识别功能的m型系列7.0寸语音串口屏样品,本文以型号为dc80480m070_1111_0c_ai为例进行讲解。

2. 语音词条下载器(需单独购买)。




二、工作原理


m系列语音识别串口屏是通过串口与语音芯片进行通讯和交互。主要工作流程为以下两种:

1) 语音芯片识别词条命令-->下发指令到屏幕串口-->串口接收指令解析-->逻辑判断-->屏幕响应;

2) 屏幕操作-->屏幕发送指令到语音芯片串口-->语音芯片接收解析指令-->语音提示。




三、开发流程


图 3-1 开发流程图






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





网站地图