Arduino与lu-asr01语音识别模块的串口通信

前言

今天,我将分享一次成功将Arduino与LU-ASR01语音识别模块进行通信的实验经历。这次实验不仅加深了我对语音识别技术的理解,也让我体验到了DIY项目的乐趣。希望通过这篇博客,能为同样对这方面技术感兴趣的朋友提供一些参考和帮助。

其中参考了一位博主分享的案例,动手过程中也是遇到了很多问题,但只要付出耐心,问题一定会迎刃而解。参考案例如下: https://www.toymoban.com/news/detail-446770.html

实验准备

硬件准备

  • Arduino开发板: 我使用的是Arduino Uno,因其易用性和广泛的社区支持。
  • Lu-Asr01语音识别模块: 该模块支持多种指令识别,可用图形编程烧录程序,是入门语音识别的不错选择。
  • 连接线4条: 杜邦线即可,用于连接Arduino与lu-asr01模块。

软件准备

  • Arduino IDE: 用于编写和上传代码到Arduino开发板上。官网在这:https://www.arduino.cc/en/software
  • 天问Block: 图形编程软件,内含丰富的语音识别库文件,可以简化开发过程。官网在这:http://www.twen51.com/new/twen51/index.php
  • CH340串口驱动安装: 要上传程序,需要这个驱动识别端口号。官网在这:https://www.wch.cn/downloads/CH341SER_EXE.html

实验步骤

1.编写代码

Arduino程序:

  • 打开Arduino IDE,创建一个新项目。注意项目路径中尽量不要含有中文,可能会引起报错。
  • 编写代码,通过串口接收lu-asr01模块发送的识别结果,并作出相应处理。这里需注意设置Arduino的串口波特率与lu-asr01模块相匹配(我设置的9600)。
#include <HardwareSerial.h>
#include <SoftwareSerial.h>

const int PIN_SW = 13;//这里我用的是开发板上的板载灯,没有多余LED灯展示
char TX;
char RX;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(PIN_SW, OUTPUT);

}

void loop() {
  // put your main code here, to run repeatedly:
  if(Serial.available()>0)
  {
    RX = char(Serial.read());
    if(RX == 0x21)
    {
      Serial.write(RX);
      digitalWrite(PIN_SW, HIGH);
    }
    if(RX == 0x22)
    {
      Serial.write(RX);
      digitalWrite(PIN_SW, LOW);
    }
    if(RX == 0x20)
    {
      Serial.write(RX);
      for(int i=0;i<3;i++)
      {
        digitalWrite(PIN_SW, HIGH);
        delay(100);
        digitalWrite(PIN_SW, LOW);
        delay(100);
      }
    }
    delay(2);
  }
}

  • 上述代码是通过IDE工具烧录到Arduino开发板,后面讲烧录细节。

Lu-Adr01语音识别模块程序:

  • 打开天问Block,新建项目,程序编写如下:

在这里插入图片描述

  • 可以先添加一个鹿小班的官方扩展,在页面的左下角的添加扩展里,点击进去,选择这个添加即可。
    在这里插入图片描述
  • 编写图形化代码后,先在右上角生成模型后,在进行编译下载。注意若没有自动识别端口号,需要手动选择匹配。
  • 另外,上传这个程序时,要把Arduino IDE工具的串口监视器关闭,可能会占用串口,编译下载会提示串口打开失败!

2.上传代码

  • 这里我遇到了一个恶心的上传问题,不知道是我IDE的问题(因为我升级成最新版本了)还是我串口的问题。在上传代码是会弹出这样的报错:
    经过检查,端口号和开发板已经选好了。
    在这里插入图片描述
    后来发现是需要打开串口监视器(在右上角图案打开),可能新版本的IDE监测到代码有调用串口通信函数,需要打开串口监视器吧,就可以正常上传成功。
    在这里插入图片描述

硬件连接

  • 这里使用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),连接图如下:
  • 注意:我这里用了Arduino扩展板,所以就连接到扩展版的UART通信区;若是Uno板子就按照上述连接,TX和RX需要反接。
    在这里插入图片描述

测试

  • 通过向LU-ASR01模块说出预设的指令,观察Arduino IDE的串口监视器是否输出相应的识别结果。
### 使用LU-ASR01设备上的串口进行通信 对于LU-ASR01语音识别模块而言,其默认配置下的确存在仅提供发送端(TX),而未直接配备接收端(RX)的情况。然而,这并不意味着无法实现双向通信功能。 为了克服这一局限性并建立完整的双向串口通信链路,一种可行的方法是利用该模块额外具备的I/O端口资源。具体来说,可以从总共8个可用I/O端口中选取两个重新定义用途,其中一个作为新的RX接口来补充缺失的功能[^1]。通过这种方式,配合Arduino或其他微控制器平台,借助软件模拟技术创建出虚拟串行端口,从而达成数据交换的目的。 当涉及到具体的编程实践时,在Arduino环境中可以通过调用`SoftwareSerial`库轻松设置上述提到的软串口方案。下面给出一段简单的代码片段用于展示如何初始化以及操作这个自定义的串行连接: ```cpp #include <SoftwareSerial.h> // 定义新分配给RX/TX角色的具体GPIO编号 const int rxPin = 2; // 这里假设选择了D2作为RX输入管脚 const int txPin = 3; // D3被指定为TX输出管脚 // 创建一个新的SoftSerial对象实例 SoftwareSerial mySerial(rxPin, txPin); void setup() { // 开启硬件自带UART调试打印通道 Serial.begin(9600); // 启动我们构建的新串行线路 mySerial.begin(9600); } void loop(){ if (mySerial.available()) { char c = mySerial.read(); Serial.print(c); // 将收到的数据转发到电脑监视器显示 } } ``` 值得注意的是,除了上述方法外,某些应用场景下也可能允许更简便的做法——即只关心从LU-ASR01向外部MCU传输信息的情形,则只需简单地将前者提供的TX引脚对接至后者相应的RX引脚即可满足需求[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值