之前我写了一篇《Arduino的智能语言输入实现》,讨论了Arduino与LU-ASR01之间通过串口通信实现Arduino的中文语音输入,不过那个通信是不完整的,因为LU-ASR01的串口只有一个发送端口TX,而没有接收端口RX。其实在真正的应用中,LU-ASR01通常也需要接收上位机的数据,例如为确保上位机已经收到LU-ASR01发送的数据,上位机需要返回一个已收到数据的应答,又例如上位机想让LU-ASR01发出某条语音消息或让LU-ASR01进行某个操作,都需要由上位机发送数据,然后由LU-ASR01接收数据后,进行相应的处理。

为解决LU-ASR01的串口没有接收端口RX这个问题,我们可以利用LU-ASR01的I/O端口(前文介绍过LU-ASR01共有8个I/O端口),取其中的2个端口挪作串口通信用,然后采用软串口通信的方式来实现Arduino与LU-ASR01之间的双向串口通信。

因为在网上查找不到一点LU-ASR01模块的软串口通信资料,只能通过不断地测试,因为手头连最基本检测工具示波器等都没有,只有一台电脑、一块Arduino板和一块LU-ASR01板,为检测软串口有没有发送数据,我甚至只能连接LED到串口,查看在串口发送数据时LED有没有闪烁。经历了数十次的失败,几乎已经绝望地想放弃了LU-ASR01的软串口通信实现,哈哈,最后当然成功啦,不然我就写不了这篇文章了。

闲话不说了,本次实验就是通过由LU-ASR01发送命令,Arduino收到该命令后,再返回发送该命令数据(即同样的数值)到LU-ASR01作为应答,最后LU-ASR01收到了Arduino发回的该命令数据,进行比较后(即判别发送的数据与接收到的数据是否相等),确认该命令发送成功了。

本次实验中,Arduino UNO仍然采用硬件串口通信,使用TX和RX端口,LU-ASR01则使用IO6端口作为发送数据的软TX,IO7端口作为接收数据的软RX。由Arduino提供5V电源给LU-ASR01(下图中的红黑2线),Arduino的TX连接到LU-ASR01的IO7端口(软RX),Arduino的RX连接到LU-ASR01的IO6端口(软TX),连接图如下:

LU-ASR01仍然采用“天问block”的图形化编程平台,下面是在“天问block”上的完整程序:

然后我们将下面的程序下载到Arduino UNO板,完整程序如下:

/*

Arduino与ASR01语音识别模块的串口通讯实验

为确保ASR01发送的数据能够接收到,采用应答方式,Arduino每接收到一个可识别的

命令后,都会将这个命令会送给ASR01

*/

// 定义引脚

const int LedPin =  13;      // led连接的引脚,作为LED灯的正极

char Txbyte;  //串口发送的字符数据

char Rxbyte;  //串口读取的字符数据

//初始化

void setup() {

Serial.begin(9600); //设置串口波特率9600

pinMode(LedPin, OUTPUT);  //设置LedPin

}

//主程序

void loop() {

if(Serial.available() > 0){ //当串口缓冲区有数据

Rxbyte=char(Serial.read());

if(Rxbyte==0x21) {    //当Rxbyte为0x21则LedPin置高电平,即开灯

Serial.write(Rxbyte);

digitalWrite(LedPin, HIGH);

}

if(Rxbyte==0x22) {    //当Rxbyte为0x22则LedPin置低电平,即关灯

Serial.write(Rxbyte);

digitalWrite(LedPin, LOW);

}

if(Rxbyte==0x20){     //当Rxbyte为0x20则Led灯闪3下

Serial.write(Rxbyte);

for(int i=0;i<3;i++){   //Led灯闪3下

digitalWrite(LedPin, HIGH);

delay(100);

digitalWrite(LedPin, LOW);

delay(100);

}

}

delay(2);

}

}

两边的程序下载完后,连接好4条联线,LU-ASR01首先会播报“我们正在进行实验,请呼唤我“不赦先生”唤醒我。我暂时休息了,有事请呼唤我:不赦先生”,然后我们呼叫“不赦先生”,则LU-ASR01回答“我在”后就通过软串口发送了一个字节的命令:0x20,Arduino收到0x20后,再次发送0x20到LU-ASR01;当LU-ASR01收到数据后,与之前发送的数据进行比较,如果相等,则播报:“阿杜已经收到命令了”,否则等待1秒钟,没有收到正确的数据0x20,则播报:“超时了,阿杜没有收到命令,请重新发”(这里说明下,为简化程序,程序中没有再次重新发送该数据)。接着可以测试“打开灯光”和“关闭灯光”。

Arduino与LU-ASR01语音识别模块的双向串口通信实现相关推荐

  1. arduino nano 简单实现蓝牙模块与手机进行通信

    1.背景 目前很多通信方式都需要外附手柄,控制器,接收器,体积比较大,用起来不够方便.那么,对于距离要求不高的控制小项目,蓝牙通信一定是不二之选. 2.需要预备了解的内容 基础的编程思想和基础的C语言 ...

  2. arduino与语音模块LDV7(LD3320)的串口通信实现简单语音控制

    文章目录 简述 器件 代码部分 测试结果 总结 简述 这里利用语音识别模块与arduino UNO 测试一个简单的语音控制小灯亮灭的程序.希望能给我一样的在两个东西的串口通信有困惑的小伙伴一个参考.有 ...

  3. 蓝桥杯基础模块8_1:串口通信收发

    一.模块题目 二.原理简述 1.串口重要概念概述 <1> 串行通信是指数据一位接一位地顺序发送或接收. <2> 串行通信有SPI.IIC.UART等多种,最常见最通用的是指UA ...

  4. 蓝桥杯模块学习10——串口通信(深夜学习——单片机)

    一.什么是串口通信? 51单片机--串口通信详解(STC89C51为例)_佛科院深夜学习的博客-CSDN博客 二.IAP15F2K60S2与STC89系列的区别: 1.16位自动重装载模式下波特率的计 ...

  5. 史上最强ASR非特定人声语音识别模块,完爆LD3320

    史上最强ASR非特定人声语音识别模块 请大家不要再折腾LD3320了,最近我在玩一款离线语音识别模块,性能甩LD3320一众几条街了,真得太香了.功能岂能用强大来形容,简单就是yyds了.可以自定义命 ...

  6. 免费试用HLK-V20新品智能语音识别模块套件

    HLK-V20新品智能语音识别模块套件,串口控制自定义唤醒词物联网模组: 用报告要求: 1.内容要求(包含不仅限于):软硬件功能评测.入门教程连载.项目完成流程.试用心得/经验.其他 2.试用报告在中 ...

  7. 基于Arduino IDE开发的LD3320语音识别模块

    基于Arduino的LD3320语音识别模块设计详解 文章目录 基于Arduino的LD3320语音识别模块设计详解 前言 一.LD3320驱动编写 step 1.0 使用Arduino的SPI库,通 ...

  8. 一起卷吧,arduino/mixly语音识别模块,10元,可以自定义,提供自制的mixly库

    一.效果演示 制作的语音风扇演示一起卷吧!语音识别,10元,串口通信,arduino可用,提供自制的mixly库,操作简单,可以语音播报_哔哩哔哩_bilibili 制作的语音灯演示https://w ...

  9. 来自DFRobot的中文语音识别模块

    如果哪一天你要做机器人了,是否也想让它拥有一个类似于Siri的语音识别系统呢?如果你要求不高的话,语音识别模块Voice Recognition可以帮助你打造简单的中文语音识别系统. 由国内开源硬件厂 ...

最新文章

  1. 腾讯的张小龙是一个什么样的人
  2. 第七周项目一-三个函数在一个程序中(5)
  3. ACM MM:一种基于情感脑电信号时-频-空特征的3D密集连接网络
  4. 9.文本处理(读写配置文件)
  5. python工具是什么-使用Python编写命令行工具有什么好的库?
  6. 【DIY】DIYarduino温湿度计视频图文教程
  7. windows 下 MyEclipse 逆向工程生成hiberate 对应配置文件以及 javaBean。
  8. 「前端早读君007」css进阶之彻底理解视觉格式化模型
  9. mysql数据库服务器名_mysql数据库服务器名
  10. 数据结构—链表-单链表应用-拆分链表
  11. 基于JAVA+SpringMVC+MYSQL的社区交友平台
  12. android 线程池 怎么用,android中的线程池 怎么用
  13. 计量风险系列—两大定价产品怎么计算风险损失
  14. halcon学习之阈值分割(threshold、binary_threshold、dyn_threshold、var_threshold、auto_threshold、fast_threshold、)
  15. Linux的i2c通讯协议
  16. node.js小工具--修改Xcode 'Create by'作者名称
  17. 深入理解Nginx——链接
  18. 【C语言】开平方公式,根号下x的函数使用:sqrt()
  19. 微信JS-SDK说明文档 能调用微信扫一扫 ,那能不能让浏览器支持微信支付呢
  20. android.mk 条件编译,android openSSL 的苦逼历程

热门文章

  1. 家用双wan口路由器推荐_教你如何配置双WAN口路由器
  2. python报错“ImportError: The _imagingft C module is not installed”
  3. 制作数据集(一):将视频数据剪辑为图片数据
  4. 计算机软考地址,各省市计算机软考分数查询地址
  5. 淘宝店群玩法,双十一商家自运营,淘宝店群好处,建淘宝店群门槛条件
  6. 百度地图自定义覆盖物,在手机上无法监听click事件
  7. android drawText()方法中x,y坐标值真正的 意义
  8. 个人或团队目标制定要点
  9. 20145212罗天晨 逆向及Bof基础实践
  10. 【Unity脚本】鼠标常用点击事件