SEN0539 Gravity: 语音识别模块 - I2C & UART

概 述

该模块采用了全新的离线语音识别芯片。内置150条常用的固定命令词条,新增命令词自学习功能,自学习命令词可以不是一段语音,可以是一段口哨、一个响指、一声猫叫等,支持17条自学习命令词。采用双麦克风收音使模块有更好的抗噪音能力和更远的识别距离。模块自带一个喇叭和外接喇叭的接口,能实时语音反馈识别结果。模块采用I2C和UART两种通讯方式,Gravity接口,兼容Arduino Uno、Arduino leonardo、Arduino MEGA、FireBeetle 系列控制器,树莓派,ESP32等主控。

模块特点

产品参数

接口与引脚

引脚介绍

学习命令词

唤醒词

唤醒词是指将产品从待机状态切换到工作状态的词语,是用户与语音互动产品的第一个接触点。

学习唤醒词

首先用默认的唤醒词唤醒语音助手,然后说出“学习唤醒词”,根据提示来学习唤醒词(每次学习命令词前需删除前一次学习的唤醒词,请参考删除唤醒词和命令词删除)

提示:学习状态中,保持安静,请说出需要学习的唤醒词!

需学习的唤醒词(以理想同学为例):理想同学

提示:学习成功,请再说一次!

需学习的唤醒词:理想同学

提示:学习成功,请再说一次!

需学习的唤醒词:理想同学

提示:学习完成

就可以使用学习过的唤醒词来唤醒语音助手!

固定命令词条

命令词是指用户对语音互动产品发出一定的指令,以此与其进行沟通的词语。

学习命令词

用唤醒词(默认或已学习的)唤醒语音助手,然后说出“学习命令词”,根据提示来学习命令词(每次学习命令词前需删除前一次学习的命令词,请参考删除唤醒词和命令词删除)

提示:学习状态中,保持安静,请按提示学习命令词!请说出第一条要学习的指令!

需学习的命令词(以打开红灯为例):打开红灯

提示:学习成功,请再说一次!

需学习的命令词:打开红灯

提示:学习成功,请再说一次!

需学习的命令词:打开红灯

提示:恭喜你第一条指令学习成功,请说出第二条要学习的指令

………… (继续学习即可)

或者使用“退出学习”来退出当前的学习状态。

学习结束后会自动生成一个ID详情见下文命令词/唤醒词ID对照表,通过这个ID编写程序来控制即可。

删除唤醒词和命令词

用唤醒词(默认或已学习的)唤醒语音助手,然后说出“我要删除”,根据提示来学习命令词

提示:请问需要删除的是学习的唤醒词还是命令词

删除命令词:删除学习过的命令词

删除唤醒词:删除学习过的唤醒词

全部删除:删除学习过的唤醒词和命令词

退出删除

使用说明

准备

样例代码1-使用IIC通讯

接线图:

引脚介绍

演示代码:

请将通讯模式开关拨到了I2C方向,代码所需库文件DFRobot_DF2301Q库

/*!
 * @file  i2c.ino
 * @brief  通过I2C控制语音识别模块
 * @n  可以获取识别的命令ID, 通过命令ID播放其对应的答复音频;
 * @n  可以获取唤醒状态的持续周期, 也可以设置唤醒状态的持续周期
 * @copyright  Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @licence  The MIT License (MIT)
 * @author  [qsjhyy](yihuan.huang@dfrobot.com)
 * @version  V1.0
 * @date  2022-04-02
 * @url  https://github.com/DFRobot/DFRobot_DF2301Q
 */
#include "DFRobot_DF2301Q.h"

#define Led 8

//I2C communication
DFRobot_DF2301Q_I2C asr;

void setup() {
  Serial.begin(115200);

  pinMode(Led, OUTPUT);    //初始化LED引脚为输出模式
  digitalWrite(Led, LOW);  //LED引脚低电平

  // Init the sensor
  while (!(asr.begin())) {
    Serial.println("Communication with device failed, please check connection");
    delay(3000);
  }
  Serial.println("Begin ok!");

  /**
   * @brief Set voice volume
   * @param voc - Volume value(1~7)
   */
  asr.setVolume(4);

  /**
     @brief 设置静音模式
     @param mode - 静音模式; 设置值 1: mute, 0: unmute
  */
  asr.setMuteMode(0);

  /**
     @brief 设置唤醒持续时间
     @param wakeTime - 唤醒持续时间(0~255)
  */
  asr.setWakeTime(20);

  /**
     @brief 获取唤醒持续时间
     @return 当前设置的唤醒周期
  */
  uint8_t wakeTime = 0;
  wakeTime = asr.getWakeTime();
  Serial.print("wakeTime = ");
  Serial.println(wakeTime);

  // asr.playByCMDID(1);   // 唤醒指令

  /**
     @brief 根据命令词ID播放对应的答复音
     @param CMDID - 命令词ID
  */
  //asr.playByCMDID(23);  // 普通词ID
}

void loop() {
  /**
     @brief 获取命令词对应的ID
     @return 返回获取的命令词ID, 返回0表示未获取到有效id
  */
  uint8_t CMDID = asr.getCMDID();
  switch (CMDID) {
    case 117:                                                  //若是指令“打开灯光”
      digitalWrite(Led, HIGH);                                 //点亮LED
      Serial.println("received'打开灯光',command flag'117'");  //串口发送received"打开灯光",command flag"117"
      break;

    case 118:                                                  //若是指令“关闭灯光”
      digitalWrite(Led, LOW);                                  //熄灭LED
      Serial.println("received'关闭灯光',command flag'118'");  //串口发送received"关闭灯光",command flag"118"
      break;

    default:
      if (CMDID != 0) {
        Serial.print("CMDID = ");  //打印命令ID
        Serial.println(CMDID);
      }
  }
  delay(300);
}

使用固定或学习的唤醒词唤醒语音识别模块,然后使用“打开灯光”或“关闭灯光”控制发光模块。

样例代码2-使用UART通讯

接线图:

引脚介绍

演示代码:

请将通讯模式开关拨到了UART方向,代码所需库文件DFRobot_DF2301Q库

/*!
 * @file uart.ino
 * @brief  通过UART控制语音识别模块
 * @n  可以获取识别的命令ID, 通过命令ID播放其对应的答复音频;
 * @n  可以设置唤醒状态的持续周期, 设置静音模式, 设置音量, 进入唤醒状态, 复位模块
 * @copyright  Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @licence  The MIT License (MIT)
 * @author  [qsjhyy](yihuan.huang@dfrobot.com)
 * @version  V1.0
 * @date  2022-04-02
 * @url  https://github.com/DFRobot/DFRobot_DF2301Q
 */
#include "DFRobot_DF2301Q.h"

#define Led 8

/**
   @brief DFRobot_URM13_RTU constructor
   @param serial - serial ports for communication, supporting hard and soft serial ports
   @param rx - UART 接收数据的引脚
   @param tx - UART 发送数据的引脚
*/
#if (defined(ARDUINO_AVR_UNO) || defined(ESP8266))  // 使用软串口
SoftwareSerial softSerial(/*rx =*/4, /*tx =*/5);
DFRobot_DF2301Q_UART asr(/*softSerial =*/&softSerial);
#elif defined(ESP32)  // 使用 可重映射引脚的 硬串口 : Serial1
DFRobot_DF2301Q_UART asr(/*hardSerial =*/&Serial1, /*rx =*/D3, /*tx =*/D2);
#else                 // 使用硬串口 : Serial1
DFRobot_DF2301Q_UART asr(/*hardSerial =*/&Serial1);
#endif

void setup() {
  Serial.begin(115200);

  pinMode(Led, OUTPUT);    //初始化LED引脚为输出模式
  digitalWrite(Led, LOW);  //LED引脚低电平

  // Init the sensor
  while (!(asr.begin())) {
    Serial.println("Communication with device failed, please check connection");
    delay(3000);
  }
  Serial.println("Begin ok!");

  /**
     @brief 复位模块
  */
  // asr.resetModule();

  /**
     @brief 设置模块的命令
     @param setType - 设置类型
     @n       DF2301Q_UART_MSG_CMD_SET_VOLUME : 设置音量, 设置值范围1~7
     @n       DF2301Q_UART_MSG_CMD_SET_ENTERWAKEUP : 进入唤醒状态; 设置值 0
     @n       DF2301Q_UART_MSG_CMD_SET_MUTE : 静音模式; 设置值 1: mute, 0: unmute
     @n       DF2301Q_UART_MSG_CMD_SET_WAKE_TIME : 唤醒持续时间; 设置值范围0~255秒
     @param setValue - 设置值, 范围参见上述设置类型
  */
  asr.settingCMD(DF2301Q_UART_MSG_CMD_SET_MUTE, 0);
  asr.settingCMD(DF2301Q_UART_MSG_CMD_SET_VOLUME, 7);
  asr.settingCMD(DF2301Q_UART_MSG_CMD_SET_WAKE_TIME, 20);
  //asr.settingCMD(DF2301Q_UART_MSG_CMD_SET_ENTERWAKEUP, 0);

  /**
     @brief 根据命令词ID播放对应的答复音
     @param CMDID - 命令词ID
  */
  asr.playByCMDID(23);
}

void loop() {
  /**
     @brief 获取命令词对应的ID
     @return 返回获取的命令词ID, 返回0表示未获取到有效id
  */
  uint8_t CMDID = asr.getCMDID();
  switch (CMDID) {
    case 117:                                                  //若是指令“打开灯光”
      digitalWrite(Led, HIGH);                                 //点亮LED
      Serial.println("received'打开灯光',command flag'117'");  //串口发送received"打开灯光",command flag"117"
      break;

    case 118:                                                  //若是指令“关闭灯光”
      digitalWrite(Led, LOW);                                  //熄灭LED
      Serial.println("received'关闭灯光',command flag'118'");  //串口发送received"关闭灯光",command flag"118"
      break;

    default:
      if (CMDID != 0) {
        Serial.print("CMDID = ");  //打印命令ID
        Serial.println(CMDID);
      }
  }
  delay(300);
}

使用固定或学习的唤醒词唤醒语音识别模块,然后使用“打开灯光”或“关闭灯光”控制发光模块。

命令词/唤醒词ID对照表

唤醒词 ID 固定命令词条 ID 固定命令词条 ID 固定命令词条 ID
学习的唤醒词 1 物体识别 42 关闭摄像头 84 最低色温 126
小智你好 2 巡线追踪 43 打开风扇 85 日光模式 127
小爱同学 3 颜色识别 44 关闭风扇 86 月光模式 128
学习的命令词 ID 标签识别 45 风速一档 87 采光模式 129
第一个自定义 5 物体分类 46 风速二档 88 设置为红色 130
第二个自定义 6 二维码识别 47 风速三档 89 设置为橙色 131
第三个自定义 7 条形码识别 48 开启摇头 90 设置为黄色 132
第四个自定义 8 常规设置 49 停止摇头 91 设置为绿色 133
第五个自定义 9 清屏 50 归位 92 设置为青色 134
第六个自定义 10 学习一次 51 舵机十度 93 设置为蓝色 135
第七个自定义 11 遗忘 52 舵机三十度 94 设置为紫色 136
第八个自定义 12 加载模型 53 舵机四十五度 95 设置为白色 137
第九个自定义 13 保存模型 54 舵机六十度 96 打开空调 138
第十个自定义 14 拍照并保存 55 舵机九十度 97 关闭空调 139
第十一自定义 15 保存并返回 56 舵机一百七十度 98 温度调高 140
第十二自定义 16 显示数字零 57 舵机一百八十度 99 温度调低 141
第十三自定义 17 显示数字一 58 打开蜂鸣器 100 制冷模式 142
第十四自定义 18 显示数字二 59 关闭蜂鸣器 101 制热模式 143
第十五自定义 19 显示数字三 60 打开喇叭 102 自动模式 144
第十六自定义 20 显示数字四 61 关闭喇叭 103 除湿模式 145
第十七自定义 21 显示数字五 62 播放音乐 104 通风模式 146
固定命令词条 ID 显示数字六 63 停止播放 105 打开上下扫风 147
前进 22 显示数字七 64 上一曲 106 关闭上下扫风 148
后退 23 显示数字八 65 下一曲 107 打开左右扫风 149
停车 24 显示数字九 66 单曲循环 108 关闭左右扫风 150
左转九十度 25 显示笑脸 67 列表循环 109 打开窗户 151
左转四十五度 26 显示哭脸 68 随机播放 110 关闭窗户 152
左转三十度 27 显示爱心 69 增大音量 111 打开窗帘 153
右转九十度 28 关闭所有点阵 70 减小音量 112 关闭窗帘 154
右转四十五度 29 读取当前姿态 71 最大音量 113 开门 155
右转三十度 30 读取环境光 72 最小音量 114 关门 156
增速一档 31 读取指南针 73 中等音量 115 学习词 ID
减速一档 32 读取温度 74 播放古诗 116 学习唤醒词 200
打开车灯 33 读取加速度 75 打开灯光 117 学习命令词 201
关闭车灯 34 读取声音强度 76 关闭灯光 118 重新学习 202
巡线模式 35 读取按键A 77 调高亮度 119 退出学习 203
追光模式 36 读取按键B 78 调低亮度 120 我要删除 204
蓝牙遥控模式 37 读取P0 79 最高亮度 121 删除唤醒词 205
避障模式 38 读取P1 80 最低亮度 122 删除命令词 206
固件烧录 39 读取P2 81 调高色温 123 退出删除 207
人脸识别 40 校准电子陀螺 82 调低色温 124 全部删除 208
物体追踪 41 打开摄像头 83 最高色温 125

Mind+使用教程

说明

使用Mind+1.7.3及以上版本,打开扩展,在用户库中搜索SEN0539语音识别模块

Mind+添加库 Mind+添加库

程序示例

MakeCode模块使用教程

MakeCode简介

MakeCode 是一个免费开源平台,旨在打造有吸引力的计算机科学学习体验,为实际编程奠定基础。网页版可以在线编程和下载固件。点击进入专为micro:bit打造的makecode网页版。

MakeCode加载voiceRecognition插件

  1. MakeCode网页版中新建一个项目,然后,点击右上方的“更多”按钮(齿轮图标),在其下拉菜单中选择“扩展”,打开扩展界面。

  1. 在搜索框中输入"https://github.com/DFRobot/pxt-DFRobot_voiceRecognition.git " ,然后点击搜索按钮(搜索框右边的放大镜按钮),就能看到voiceRecognition插件(如下图),然后点击它,就能把voiceRecognition的插件加载进来了。
MakeCode插件搜索
  1. 编程界面中,你就能看到语音识别(SEN0539)模块,点击它,就会弹出指令积木块。

makecode案例:控制micro:bit点阵屏

本案例演示如何把语音识别模块连接到micro:bit主板,然后micro:bit主板从语音识别模块读取语音识别结果。micro:bit控制点阵屏显示笑脸、哭脸、爱心。

语音识别(SEN0539)与micro:bit的通信接口采用I2C接口。

准备材料

硬件连线图

将micro:bit主板与IO扩展板正确连接,将语音识别模块通讯方式选择开关拨至I2C端按下图与扩展板连接。

样例代码

预期结果

说出固定唤醒词或学习的唤醒词唤醒语音识别模块,说出“显示笑脸”micro:bit上的点阵将显示笑脸,说出“显示哭脸”micro:bit上的点阵将显示哭脸,说出“显示爱心”micro:bit上的点阵将显示爱心,说出“关闭所有点阵”micro:bit上的点阵将全部关闭。

MakeCode模块说明

模块 说明
初始化。只需要执行一次,放在主程序开始位置。需将语音识别模块通讯方式选择开关拨至I2C端。
设置模块音量,范围0~7,数值越大音量越高
设置模块是否为静音模式
设置模块唤醒后重新进入休眠的时间,单位是秒,每成功识别一次命令时间都会刷新
获取唤醒后重新进入休眠的时间
播放命令词对应的回答语
选择唤醒词ID
获取语音识别的识别结果并保存至识别结果模块中
判断语音识别是否识别到命令
选择学习的命令词ID
选择固定命令词ID
选择学习词ID

常见问题

还没有客户对此产品有任何问题,欢迎通过 qq 或者论坛联系我们! 更多问题及有趣的应用,可以访问论坛进行查阅或发帖

社区案例

[项目]语音识别小助手——小鼓同学 hnyzcj

更多

DFRobot 商城购买链接