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所示
图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
二.开发环境搭建
- M5 Stickc Plus的开发环境主要有UIFlow Arduino IDE和Micropython我这里使用的是arduino 的开发环境,开发环境的搭建参考了官方文档。首先是驱动的安装,将设备连接至PC,打开设备管理器为设备安装 FTDI驱动 。
- 在arduino官网安装arduino。
- 库文件的安装,打开 Arduino IDE,选择
文件
->首选项
->设置
如图2.1所示
图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灯板不限
-
连接模块之间的杜邦线
三.软件编写
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 串数据输入端行
图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,
图3.2
具体操作步骤如下:
在官网下载相应的M5Burner固件烧录工具.解压打开应用程序。
找到ATOM选项,选择EchoSTT点击download下载固件,根据您想识别的语言选择英文固件或中文固件.将ECHO连接电脑USB端口,选择对应的COM端口,点击burn进行烧录,等待串口监视器出现烧录完成提示,如图3.3所示
图3.3
点击Get Token获取连接STT服务器所需要的Token,记录此Token如图3,Token相当于一个授权码,填到下载好的例程相对应的位置,程序中有注释,这里还缺乏一个BaiduRest.h的库文件下载好添加到工程即可,语音识别程序主要是使用了百度云语音识别的api,进行在线语音识别,通过网络在把识别结果传到M5Stick-C-Plus
上。
图3.4
简略介绍一下程序逻辑,首先通过M5Stick-C-Plus
的WiFi模块连接到互联网,串口会打印网络连接情况,同时如果网络连接正常会显示律师的地球标,未连接会显示红色标。等待网络连接成功后,按下M5Stick-C-Plus
正面的按键即可开始语音识别,通过在线语音识别后,通过网络在把识别结果传到M5Stick-C-Plus
上,识别的结果显示显示屏上,同时LED灯板会显示相应内容,在视频中有详细介绍。
四.结果与总结
4.1结果
板子连接上电脑后,打开arduino软件,打开串口监视器串口波特率设置为115200,可以观察到识别的信息,详细的识别过程在视频中,从识别结果来看,识别比较精准,显示屏上显示了识别结果,同时LED灯板上显示了相应的数字。
4.2总结
很高兴参加硬禾学堂举办的暑假一起练的活动,学习了百度语音识别API的使用,以及74HC595驱动的编写,同时更加熟悉了arduino的使用。