广州大彩串口屏论坛_大彩开发者交流论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 7445|回复: 0

大彩串口屏M型语音识别应用

[复制链接]

106

主题

139

帖子

9850

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9850
发表于 2021-5-17 09:23:14 | 显示全部楼层 |阅读模式
演示视频


一、开发准备
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初始化
  1. --[[*********************************************************************
  2. ** Function name: on_init
  3. ** Descriptions : 系统初始化时,执行此回调函数。
  4. *************************************************************--]]
  5. function on_init()
  6.     uart_set_baudrate3(57600)   --初始化屏幕串口3波特率57600
  7.     Send_command_list()          --初始化语音模块指令集
  8. End
  9. --[[***************************************************************************
  10. ** Function name: Send_command_list
  11. ** Descriptions : 屏幕下发至语音芯片指令列表
  12. *************************************************************--]]
  13. function Send_command_list()
  14.     cmd_list["唤醒"]   = 0
  15.     cmd_list["打开灯光"] = 1
  16.     cmd_list["关闭灯光"] = 2
  17. end
复制代码
核心API函数:
1) uart_set_baudre3(speed)
设置串口的波特率。
speed-通讯的波特率


2) Send_command_list()
自定义函数,用户定义好屏幕下发语音芯片的指令表。

2. 屏幕串口接收解析指令
屏幕串口接收并解析语音芯片指令并作出响应,具体程序如程序清单 6:
程序清单 6 串口接收解析指令
  1. --[[************************************************************************
  2. ** Function name: on_uart_recv_data3
  3. ** Descriptions : 语音芯片-屏幕串口
  4. ** @packet : 屏幕接收语音芯片的发送数据
  5. ** @value : 提取语音芯片下发的指令数据
  6. ************************************************************************--]]
  7. local cmd_head = 0
  8. local recv_buffer2_count = 0
  9. function on_uart_recv_data3(packet)
  10.     local str =""
  11.     for i = 0,(#(packet)) do
  12.         cmd_head = packet[i]  
  13.         str =str..string.format("%02X",packet[i])
  14.         if cmd_head==0XAA then
  15.             recv_buff = {}
  16.             recv_buffer2_count = 1
  17.             recv_buff[1] = 0xAA
  18.         else
  19.             recv_buffer2_count = recv_buffer2_count+1
  20.             recv_buff[recv_buffer2_count] = packet[i]
  21.         end
  22.         if recv_buffer2_count >= 4 then
  23.             if recv_buff[4] == 0xBB then
  24.                 Instruction_operation()
  25.             end
  26.             recv_buff = {}
  27.         end
  28.     end
  29. end--[[************************************************************************
  30. ** Function name: Instruction_operation
  31. ** Descriptions : 解析语音芯片下发的数据指令
  32. ** @value : 提取指令,屏幕响应
  33. ************************************************************************--]]function Instruction_operation()
  34.     recv_buff[3] = string.format("%d",recv_buff[3])

  35.     if recv_buff[3] == "1" then                 --打开灯光
  36.         set_value(VoiceScreen_id,1,1)
  37.         set_value(VoiceScreen_id,14,1)
  38.     elseif recv_buff[3] == "2" then            --关闭灯光
  39.         set_value(VoiceScreen_id,1,0)
  40.         set_value(VoiceScreen_id,14,0)
  41.     end
  42. end
复制代码
核心API函数
1) on_uart_recv_data3(packet)
屏幕串口接收语音芯片下发的数据回调函数。
  • packet:形参为表,字节数据。

3. 屏幕串口指令发送
屏幕串口发送对应指令帧格式的指令到语音芯片,如程序清单 7:
程序清单 7 屏幕串口指令发送
  1. --[[*********************************************************************
  2. ** Function name: Usart_send_cmdarry
  3. ** Descriptions : 串口下发指令。
  4. ** @ cmd : 词条列表
  5. *************************************************************--]]
  6. function Usart_send_cmdarry(cmd)
  7.     local usart_cmd = {}
  8.     usart_cmd[0] = 0xAA        //帧头
  9.     usart_cmd[1] = 0x02        //功能码:01代表语音芯片下发指令,02代表语音芯片接收指令
  10.     string.format("%X",cmd)
  11.     usart_cmd[2] = cmd         //词条列表:本例程中对应词条列表00:大彩管家 01:打开灯光 02:关闭灯光
  12.     usart_cmd[3] = 0xBB        //帧尾
  13.     uart_send_data3(usart_cmd)
  14. end
复制代码
核心API函数
1) uart_send_data3(packet)
屏幕串口数据发送函数。
  • packet:形参为表,字节数据。

4. 屏幕逻辑判断
屏幕触摸操作逻辑判断,下发对应指令到语音芯片,如程序清单 8:
程序清单 8 屏幕逻辑判断
  1. --[[*********************************************************************
  2. ** Function name: on_control_notify
  3. ** Descriptions : 用户触摸修改控件后,执行此回调函数。
  4. ** @ screen : 画面ID
  5. ** @ control : 控件ID
  6. ** @ value : 控件值
  7. *********************************************************************--]]
  8. function on_control_notify(screen,control,value)
  9.     if screen == VoiceScreen_id then
  10.         if control == 1 then
  11.             if value == 0 then
  12.                 Usart_send_cmdarry(cmd_list["关闭灯光"])
  13.                 set_value(VoiceScreen_id,14,0)
  14.             elseif value == 1 then
  15.                 Usart_send_cmdarry(cmd_list["打开灯光"])
  16.                 set_value(VoiceScreen_id,14,1)
  17.             end
  18.         end
  19.     end
  20. 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卡

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
销售与技术支持:(020)82186683-601
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|广州大彩串口屏论坛_大彩开发者交流论坛

GMT+8, 2024-12-28 16:46 , Processed in 0.050782 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表