2022暑期一起练 基于 M5 Stickc Plus 实现语音识别显示在LED点阵灯板上
这里参加了暑假一起练M5 StickcPlus的项目,主要使用M5 StickcPlu这块板子完成了任务一可以用语音控制的灯板,在灯板上点亮不同的字符。我这里实现的是用语音控制在LED灯板上显示数字
标签
嵌入式
网络与通信
ESP32
语音识别
wjhgbpqm
更新2022-09-02
杭州电子科技大学
1089

2022暑期一起练 用 M5 Stickc Plus 语音识别显示在LED点阵灯板上

一 .M5 Stickc Plus硬件介绍

M5StickC PLUS M5StickC的大屏幕版本,主控采用ESP32-PICO-D4模组,具备蓝牙4.2与WIFI功能,小巧的机身内部集成了丰富的硬件资源,如红外、RTC、麦克风、LED、IMU、按键、蜂鸣器、PMU等,在保留原有M5StickC功能的基础上加入了无源蜂鸣器,同时屏幕尺寸升级到1.14寸、135*240分辨率的TFT屏幕,相较之前的0.96寸屏幕增加18.7%的显示面积,电池容量达到120mAh,接口同样支持HAT与Unit系列产品。模块实物图如图1.1所示

FhRoplrT-J0Lseh0oz_VLtod7EX4

图1.1

主要特点如表1.2:

ESP32 240MHz 双核、600 DMIPS、520KB SRAM、Wi-Fi
闪速 4MB 闪存
输入电压 5V @ 500mA
接口 TypeC x 1, GROVE(I2C+I/0+UART) x 1
液晶显示屏 1.14寸,135*240彩色TFT液晶屏,ST7789v2
麦克风 SPM1423
单颗 自定义植物 x 2
引领 红色 LED x 1
实时时钟 BM8563
管理单元 AXP192
蜂鸣器 载板蜂鸣器
红外 红外线传输
微机电系统 MPU6886
天线 2.4G 3D天线
外接天线 G0、G25/G26、G36、G32、G33
电池 120 mAh @ 3.7V,vb 内
工作温度 0°C 至 60°C
净重 16克
毛重 21克
产品尺寸 48.2*25.5*13.7mm
包装尺寸 65*25*15mm
外壳材质 塑料(PC)

表1.1

二.开发环境搭建

  1. M5 Stickc Plus的开发环境主要有UIFlow  Arduino IDEMicropython我这里使用的是arduino 的开发环境,开发环境的搭建参考了官方文档。首先是驱动的安装,将设备连接至PC,打开设备管理器为设备安装 FTDI驱动 
  2. arduino官网安装arduino。
  3. 库文件的安装,打开 Arduino IDE,选择 文件->首选项->设置如图2.1所示

FjyFnUOjbBakzNVKCGLQsklvtif8图2.1

4.将https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json复制到 M5Stack 板管理网址到 附加开发板管理器

5.选择 工具->开发板:->开发板管理器...在新弹出的对话框中,输入并搜索 M5Stack,点击安装

6.选择 工具->开发板:->M5Stack Arduino, 根据我们所使用的设备(M5Stick-C-Plus)选择对应的开发板配置。

7.不同的硬件设备,有着不同的案例程序库,请根据你所使用的设备选择下载.打开 Arduino IDE, 然后选择 项目->加载库->库管理...搜索 M5StickCPlus 并安装,下载时请根据弹窗提示,安装相关依赖库。

三.任务说明

我这里选择的是任务1详细内容如下

任务1:可以用语音控制的灯板,要求在灯板上点亮不同的字符、图案,如指令“1”,则需要在灯板上显示“1”的图形

所需器件:

  • M5StickC Plus一套
  • LED灯板不限
  • 连接模块之间的杜邦线
  •  
根据题目要求,我所实现的是根据通过识别语音在LED灯板上显示相应的数字。

三.软件编写

1.由于要驱动LED灯板,查看了板子的原理图如图3.1所示,这里主要介绍一下电路的工作原理发光二极管的亮灭通过ROW与COL的电平关系决定,仅当ROW为HIGH且COL为LOW时,二极管导通。

其中第一个74HC595D的输出通过npn型三极管S9013的基级与集电极与COL耦合,第二个74HC595D的输出直接耦合ROW可知,第一个74HC595D的输出C通过三极管后反相后得到COL,即当C为1,ROW为1时,有COL为LOW,ROW为HIGH,此时发光二极管导通。根据原理图查找了74hc595的芯片手册。

74HC595 各个引脚的功能

QA~F  是并行数据输出口,即储寄存器的数据输出口

QH_2    串行输出口

SRCLK   串行输入时钟

SCLK   锁存输入时钟

OE 的非    输出使能端

SER       串数据输入端行

 

Fq3gnyl7FLGPpoJBtNI_yK0kqos7

图3.1

74hc595程序驱动部分这里主要使用了3个引脚通过宏定义与 M5 Stickc Plus引脚相关联

#define DIN    26//数据输入引脚
#define SRCLK  25//串行输入时钟
#define RCLK  32//锁存输入时钟

首先要对引脚初始化初始化部分程序如下

  

void hc_595::init()
{
	pinMode(DIN, OUTPUT);
	pinMode(SRCLK, OUTPUT);
	pinMode(RCLK, OUTPUT);
	digitalWrite(DIN, LOW);
	digitalWrite(SRCLK, LOW);
	digitalWrite(RCLK, LOW);

}

然后就是通过74hc595的手册编写控制LED的程序,这里采用的行扫描的模式,由于人眼的视觉暂存效应,看起来是都在亮,部分程序如下

void hc_595::write(byte row,byte col )
{
	int pin_state;//输出的DIN
	digitalWrite(SRCLK, LOW);
	digitalWrite(RCLK, LOW);
	for (int i = 7; i >= 0; --i)//行按照d7-d0高位到低位对应
	{
		if (row & (1 << i))
		{
			pin_state = 1;

		}
		else
		{
			pin_state = 0;
		}
    digitalWrite(SRCLK, LOW);
		digitalWrite(DIN, pin_state);
		digitalWrite(SRCLK, HIGH);
	}
  for (int i = 7; i >= 0; --i)//列按照d7-d0高位到低位对应
  {
    
    
    if (col & (1 << i))
    {
      pin_state = 1;

    }
    else
    {
      pin_state = 0;
    }
    digitalWrite(SRCLK, LOW);
    digitalWrite(DIN, pin_state);
    digitalWrite(SRCLK, HIGH);

  }
  digitalWrite(RCLK, HIGH);
  delayMicroseconds(500);//数据锁存500us
  digitalWrite(RCLK, LOW); 

}

然后对显示的数字或文字进行取模,我这里使用了一个在线取模的网站LED Matrix Editor 对数字0-9进行了取模放在了数组里,并封装了一个函数show_digital(unsigned int i,int delay_ms)//默认参数247ms,i是要显示的数字,delay_ms是要显示的时间默认247ms。

2.语音识别部分,通过官网的ATOM ECHO的教程进行程序的移植,EchoSTT是一个语音转文字服务,通过网络将本地语音发送至云服务器,并将识别结果返回至本机或是其他M5设备。无论您在UIFlow或Arduino中使用该服务都需要通过MAC地址绑定Token,以获得使用权限,示意图如图3.2,FuMEvFzBZAC1GYv8oqc5IwzAZECY

 

   图3.2

具体操作步骤如下:

在官网下载相应的M5Burner固件烧录工具.解压打开应用程序。

找到ATOM选项,选择EchoSTT点击download下载固件,根据您想识别的语言选择英文固件或中文固件.将ECHO连接电脑USB端口,选择对应的COM端口,点击burn进行烧录,等待串口监视器出现烧录完成提示,如图3.3所示

Fvbs8AjDUid7EU_fU9qMyugbli94

                  图3.3

点击Get Token获取连接STT服务器所需要的Token,记录此Token如图3,Token相当于一个授权码,填到下载好的例程相对应的位置,程序中有注释,这里还缺乏一个BaiduRest.h的库文件下载好添加到工程即可,语音识别程序主要是使用了百度云语音识别的api,进行在线语音识别,通过网络在把识别结果传到M5Stick-C-Plus上。

 

FnOjr8TAWO-GidPFAgi2hn82ID21

图3.4

 

简略介绍一下程序逻辑,首先通过M5Stick-C-Plus 的WiFi模块连接到互联网,串口会打印网络连接情况,同时如果网络连接正常会显示律师的地球标,未连接会显示红色标。等待网络连接成功后,按下M5Stick-C-Plus 正面的按键即可开始语音识别,通过在线语音识别后,通过网络在把识别结果传到M5Stick-C-Plus上,识别的结果显示显示屏上,同时LED灯板会显示相应内容,在视频中有详细介绍。

四.结果与总结

4.1结果

板子连接上电脑后,打开arduino软件,打开串口监视器串口波特率设置为115200,可以观察到识别的信息,详细的识别过程在视频中,从识别结果来看,识别比较精准,显示屏上显示了识别结果,同时LED灯板上显示了相应的数字。

4.2总结

很高兴参加硬禾学堂举办的暑假一起练的活动,学习了百度语音识别API的使用,以及74HC595驱动的编写,同时更加熟悉了arduino的使用。

附件下载
M5stack_cplus.zip
团队介绍
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号