介绍

亲爱的创客伙伴们,本期要给大家分享的是语音控制开关灯,将会使用三种单片机来展示(stm32、esp32以及mega2560,除mega2560为8位外,另外两个为32位单片机)。我们只需要掌握一个知识点,串口通信,就可以完成本demo。

对于语音,我们采用快速开发的方法,直接使用模块化编程,也就是说语音识别用一个模块,在来一个单片机控制灯光。

使用到的模块,LU-ASR01和3W 8欧姆的喇叭,需要的单片机:esp32/esp8266、stm32、mega2560/uno中单片机任一个,或者啥单片机都没有,看我文章了解下也可以呀。

模块喇叭如下,因为我们使用的是串口通信,需要RX、TX两个引脚,模块没有引出RX引脚,需要手动焊接一下。

 

mega2560

1、库文件下载

关于mega2560 的软串口通信,我之前写过一篇。(140条消息) esp8266与mega2560开发板串口通信_哆啦哆小魔仙的博客-CSDN博客_mega2560串口通信https://blog.csdn.net/weixin_58125062/article/details/124763604

 本次继续使用软串口,我这里使用了ws2812灯条,效果会更炫一点,也可以用普通led代替。

首先,我们要下载ws2812的驱动库,Adafruit_NeoPixel。点击管理库,搜索进行安装。

2、mega2560接线及代码

rx、tx接mega2560的10、11引脚,ws2812灯光接7引脚。

//mega2560软串口代码,语音识别炫彩灯部分
#include <SoftwareSerial.h>
#include <Adafruit_NeoPixel.h>
SoftwareSerial arduinoSerial = SoftwareSerial(10, 11);
String  message = "";//定义字符串接收串口消息
#define PIN        7
#define NUMPIXELS  12  //灯个数
Adafruit_NeoPixel strip(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
uint32_t red = strip.Color(255, 0, 0);
uint32_t green = strip.Color(0, 255, 0);
uint32_t off_close = strip.Color(0, 0, 0);
uint32_t yellow = strip.Color(255, 255, 0);
uint32_t orange = strip.Color(255, 97, 0);
uint32_t blue = strip.Color(0, 0, 255);
uint32_t white = strip.Color(255, 192, 203);
void Light_up(uint32_t mess)//只亮灯
{
  for (int i = 0; i < NUMPIXELS; i++) {

    strip.setPixelColor(i, mess);
    strip.show();
    delay(30);
  }
}

void openp() {
  Light_up(orange);
  delay(300);
  Light_up(blue);
  delay(300);
  Light_up(yellow);
}
void closee() {
  Light_up(off_close);
}
void setup() {
  Serial.begin(9600);
  arduinoSerial.begin(9600);
  arduinoSerial.flush();
    strip.begin();
  strip.setBrightness(50); //设置亮度 (0~255)
}

void loop()
{
  if (arduinoSerial.available() > 0) {
  
      message = message + char(arduinoSerial.read());
    
    Serial.println(message);
      if (message == "a") {
        openp();
   
      }
 if (message == "b") {
        closee();
   
      }
    message = "";
  }
  


}

3、语音识别模块代码

语音识别这个模块有自己的开发软件,有图形化编程,也可以直接写代码,十分方便。

 

波特率一定要保持一致。

#include "asr.h"
#include "setup.h"
#include "myLib/asr_event.h"

uint32_t snid;

//{ID:250,keyword:"命令词",ASR:"最大音量",ASRTO:"音量调整到最大"}
//{ID:251,keyword:"命令词",ASR:"中等音量",ASRTO:"音量调整到中等"}
//{ID:252,keyword:"命令词",ASR:"最小音量",ASRTO:"音量调整到最小"}
void ASR_CODE()
{
  //{ID:29,keyword:"唤醒词",ASR:"小杜小杜",ASRTO:"我在呢"}
  if(snid == 29){
    Serial.println("hello");

  }

  //{ID:30,keyword:"命令词",ASR:"打开炫彩灯",ASRTO:"灯光已打开"}
  if(snid == 30){
    set_RGB(1,1);
    Serial.println("a");

  }

  //{ID:31,keyword:"命令词",ASR:"关闭灯光",ASRTO:"灯光已关闭"}
  if(snid == 31){
    Serial.println("b");
    set_RGB(1,0);

  }
}

void setup()
{
  //播报音设置为快速版TTS生成模型时间可以1分钟内完成
  //{speak:小蝶-清新女声,vol:10,speed:10,platform:haohaodada}
  //{playid:10001,voice:请用小杜唤醒我}
  //{ID:0,keyword:"唤醒词",ASR:"小爱同学",ASRTO:"我在呢哦"}
  Serial.begin(9600);
  Serial.setTimeout(10);
}


4、效果

语音识别mega2560

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐