0


一起玩儿物联网人工智能小车(ESP32)——68 使用MAX98357A模块播放声音

摘要:本文介绍如何使用MAX98357A模块播放声音

本文将介绍MAX98357A模块的使用方法,这是一个采用标准的I2S作为数字音频输入,内置解码器,可将数字音频信号解码为模拟信号,并拥有内置放大器,可以直接驱动扬声器的D类放大器。因其工作效率高,可以以2.7V~5.5V的直流电压运行,因此非常适合便携式及电池供电的音频播放项目。

所谓的D类放大器,是指通过控制开关单元的ON/OFF,直接驱动扬声器的放大器。D类放大器是音频功率放大器的一种。音频功率放大器是最常使用的一种功率放大器,除此之外,还有用于射频信号传输的射频功率放大器和用来驱动电机和执行器的直流功率放大器。为了区分不同音频放大器的电路特性和行为,采用字母符号来进行标识。因此,音频功率放大器可以分为A、B、AB、C、D等,多种类型。

MAX98357A模块具有诸多的优点,其特点如下:

  1. 输出功率:4欧时为3.2W,THD为10% 8欧时为1.8W,THD为10%
  2. I2S采样率:8KHz-96kHz
  3. D类放大器增益可选:3dB/6dB/9dB/12dB/15dB
  4. 无需主控时钟(MCLK)
  5. 即插即用:只需单电源供电,即可自动配置35种不同的时钟和128种数字音频格式。
  6. 适用于蓝莓派、Arduino以及ESP32等具有I2S音频输出的微控制器或开发板系统

将ESP32与MAX98357A这两者结合起来,可以实现很多有用的功能,下面是一些简单的举例:

  1. 智能音箱:ESP32具有Wifi联网的功能,因此可以作为控制中心,保持设备时刻都可以接入互联网。配合语音助手服务,利用MAX98357A的音频输出能力,就可以很轻易的实现智能音箱的功能。
  2. 蓝牙音箱:ESP32芯片具有蓝牙功能,因此可以方便的利用蓝牙获取音频数据,并使用MAX98357A模块播放出来,这就是一个最简单的蓝牙音箱。
  3. 语音提醒: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协议的相关知识在之前都已经进行了讲解,有疑问可以参考一下之前的文档。

  1. 初始化SD对象

这个在之前讲述SD功能模块的时候也进行了详细的阐述。可以参考之前的文档。

  1. Audio对象初始化

这个对象的初始化主要是调用setPinout()方法设置MAX98357A模块所使用的引脚。另外,还可以调用setVolumn()方法设置播放的声音大小,这个函数的参数取值范围是1~21之间的整数。

  1. 设置播放的音频文件流

ESP32 audioI2S支持多种数据源,可以是互联网上的在线音频文件,也可以是SD卡中的文件,还可以是MCU本身存储空间中存储的音频文件。在这里提供了一系列connecttoXXX()方法来设置不同的音频数据源。

  1. 循环播放音频文件

可以使用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模块的使用方法就简单介绍到这里了。


本文转载自: https://blog.csdn.net/qq_16601363/article/details/136263937
版权归原作者 一起玩儿科技 所有, 如有侵权,请联系我们删除。

“一起玩儿物联网人工智能小车(ESP32)——68 使用MAX98357A模块播放声音”的评论:

还没有评论