赞
踩
摘要:本文介绍如何使用MAX98357A模块播放声音
本文将介绍MAX98357A模块的使用方法,这是一个采用标准的I2S作为数字音频输入,内置解码器,可将数字音频信号解码为模拟信号,并拥有内置放大器,可以直接驱动扬声器的D类放大器。因其工作效率高,可以以2.7V~5.5V的直流电压运行,因此非常适合便携式及电池供电的音频播放项目。
所谓的D类放大器,是指通过控制开关单元的ON/OFF,直接驱动扬声器的放大器。D类放大器是音频功率放大器的一种。音频功率放大器是最常使用的一种功率放大器,除此之外,还有用于射频信号传输的射频功率放大器和用来驱动电机和执行器的直流功率放大器。为了区分不同音频放大器的电路特性和行为,采用字母符号来进行标识。因此,音频功率放大器可以分为A、B、AB、C、D等,多种类型。
MAX98357A模块具有诸多的优点,其特点如下:
将ESP32与MAX98357A这两者结合起来,可以实现很多有用的功能,下面是一些简单的举例:
MAX98357A模块如下图所示:
MAX98357A模块的引脚说明如下:
MAX98357A模块引脚 | 引脚说明 |
VIN | 电源正(2.5V-5.5V) |
GND | 电源地 |
SD | 关机和频道选择。SD MODE拉低以将器件处于关断状态。 |
GAIN | 增益和频道选择。在TDM模式下,增益固定为12dB |
DIN | 数字信号输入 |
BCLK | 位时钟输入 |
LRC | I2S与LJ模式的左/右时钟。同步时钟用于TDM模式 |
接下来通过一个程序来看一下MAX98357A模块的使用方法。在这里,要实现一个播放SD卡中mp3文件的功能。也就是要通过SD卡来获取mp3声音文件,然后通过MAX98357A模块播放出来的功能,这是一个简易mp3的雏形。下面就来看一下具体的实现方法。
在这里就要用到ESP32、SD卡功能模块和MAX98357A这三个模块。具体的连接方法如下:
MAX98357A模块 | VIN | +5V | ESP32扩展板 | |
GND | GND | |||
DIN | P25 | |||
BCLK | P26 | |||
LRC | P27 | |||
SD卡模块 | VCC | +5V | ||
GND | GND | |||
CS | P5 | |||
SCK | P18 | |||
MOSI | P23 | |||
MISO | P19 |
把各个功能模块之间的导线连接好之后,就可以开始软件的开发工作了。在开发之前,先要安装一个ESP32 audioI2S库,用这个库可以方便的实现播放MP3的功能。
Arduino中自带的Audio类不支持ESP32处理器,因此需要安装这个ESP32 audioI2S库,这个库不能在线安装,需要手工的方式来进行安装。ESP32 audioI2S库的主页地址为:
https://github.com/schreibfaul1/ESP32-audioI2S/
在将整个程序包下载下来之后,需要放置到Arduino IDE的项目文件夹内的libraries目中。项目文件夹的配置是在“文件”菜单下的“首选项”功能内设置。如下图所示:
当然,也可以尝试一下zip文件直接导入的方法。接下来就来看一下使用ESP32 audioI2S库来播放音频文件的具体过程。
1. 初始化SPI对象
这个具体的初始化方法和参数以及SPI协议的相关知识在之前都已经进行了讲解,有疑问可以参考一下之前的文档。
2. 初始化SD对象
这个在之前讲述SD功能模块的时候也进行了详细的阐述。可以参考之前的文档。
3. Audio对象初始化
这个对象的初始化主要是调用setPinout()方法设置MAX98357A模块所使用的引脚。另外,还可以调用setVolumn()方法设置播放的声音大小,这个函数的参数取值范围是1~21之间的整数。
4. 设置播放的音频文件流
ESP32 audioI2S支持多种数据源,可以是互联网上的在线音频文件,也可以是SD卡中的文件,还可以是MCU本身存储空间中存储的音频文件。在这里提供了一系列connecttoXXX()方法来设置不同的音频数据源。
5. 循环播放音频文件
可以使用loop()方法循环播放音频文件。
了解了ESP32 audioI2S的整个工作过程之后,再看下面的源代码就非常的清晰了。实现简单的Mp3播放功能,只需要几行代码,如下所示:
#include "Arduino.h" #include "Audio.h" #include "SD.h" #include "FS.h" #define SS 5 #define SCK 18 #define MISO 19 #define MOSI 23 #define DOUT 25 #define BCLK 26 #define LRC 27 Audio audio; void setup() { // put your setup code here, to run once: Serial.begin(115200); SPI.begin(SCK, MISO, MOSI); SD.begin(SS); audio.setPinout(BCLK, LRC, DOUT); audio.setVolume(10); audio.connecttoFS(SD, "/hktk.mp3"); } void loop() { // put your main code here, to run repeatedly: audio.loop(); } |
ESP32 audioI2S除了支持MP3这种格式外,还提供了对m4a、aac、wav、flac、opus等多种音频文件格式的支持。
好了,MAX98357A模块的使用方法就简单介绍到这里了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。