ESP32 使用MAX98357 播放MP3

使用ESP32和MAX98357音频放大器芯片来播放音乐,效果令人惊叹!

 首先使用ESP32板和MAX98357芯片进行了简单的接线,下载了ArduinoI2S的库,然后用Arduino IDE并编写了一些简单的代码来实现音乐播放。

当我们启动程序并播放这首歌时,我们听到了一个令人惊叹的立体声效果,仿佛我们身临其境,整个音乐环绕着我们。这归功于MAX98357芯片的高品质音频放大和ESP32的先进处理能力。

总之,使用ESP32和MAX98357芯片播放音乐的实验效果令人惊叹。这不仅是科技和音乐的完美结合,也是一个有趣而充满创意的实验。无论您是音乐爱好者还是科技迷,都一定要尝试一下!

元件说明

ESP32 使用MAX98357 播放MP3

MAX98357是一款高品质、低功耗的立体声音频放大器芯片,由Maxim Integrated生产。该芯片具有内置的数字音频接口(I2S),可与各种数字音频设备配合使用。MAX98357能够提供高达3.2W的输出功率,并具有优秀的失真和噪声性能。此外,该芯片还支持多种电源电压,包括3.3V、5V和+/-5V等。该芯片适用于便携式音频设备、智能音箱、车载音频系统和其他需要高品质音频放大器的应用。其小尺寸和低功耗使其非常适合在空间受限或需要长时间使用的应用中。如果您正在寻找一款高性能、低功耗的立体声音频放大器芯片,那么MAX98357将是您的不二之选。

ESP32和MAX98357的应用

ESP32和MAX98357这两款芯片可以结合起来实现很多有趣的应用,下面是一些例子举例:

  1. 智能音箱:使用ESP32作为控制中心,接入互联网,可以与人工智能语音助手如Alexa、Google Home等配合使用,同时使用MAX98357作为音频输出设备,可以实现高品质的音频播放效果。
  2. 蓝牙音箱:ESP32可以配合蓝牙模块实现无线连接,将音频数据传输到MAX98357芯片进行音频放大和播放,实现一个便携式的蓝牙音箱。
  3. 录音回放设备:将麦克风接入ESP32,利用其内置的ADC模块将模拟信号转换为数字信号,并使用MAX98357芯片进行数字音频输出,可以实现录音回放功能。
  4. 游戏机:ESP32可以连接到游戏控制器,接收游戏数据并控制MAX98357芯片进行音频输出,实现一个简单的游戏机。
  5. IoT音乐应用:ESP32可以连接到各种传感器,收集环境数据,并控制MAX98357芯片进行音频输出,实现一个智能音乐应用。

这些只是ESP32和MAX98357可以实现的一些应用,您也可以发挥自己的创意和想象力,开发出更多有趣的应用。

MAX98357的特点

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

引脚说明

MAX98357A的引脚图:

ESP32 使用MAX98357 播放MP3

MAX98357A模块引脚 引脚说明
VIN 电源正(2.5V-5.5V)
GND 电源地
SD 关机和频道选择。SD MODE拉低以将器件处于关断状态。
GAIN 增益和频道选择。在TDM模式系啊,增益固定为12dB
DIN 数字信号输入
BCLK 位时钟输入
LRC I2S与LJ模式的左/右时钟。同步时钟用于TDM模式

BOM表

名称 数量
ESP32 开发板 x1
MAX98357A I2S 音频放大器模块 x1
喇叭 x1
跳线(杜邦线) 若干

接线图

ESP32与MAX98357的接线图:

ESP32 使用MAX98357 播放MP3

库安装

1,首先到GITHUB下载「ESP32-audioI2S」

仓库地址:https://github.com/schreibfaul1/ESP32-audioI2S/

2,解压。

3,把解压的文件放进Arduino IDE的libraries文件夹

代码提点

1,加载库

#include "Arduino.h"  
#include "WiFiMulti.h" // Wifi库 
#include "Audio.h" // I2S的音乐库

2,定义MAX98375A的引脚

// Digital I/O used
#define I2S_DOUT      25
#define I2S_BCLK      27
#define I2S_LRC       26

3,创建实例

Audio audio; // 创建 播放音乐的 Audio 实例
WiFiMulti wifiMulti; // ESP32 的 WIFI 实例

4,初始化音乐Audio实例

audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT); // 初始化,配置所用引脚
audio.setVolume(12); // 设置音量大小 0...21

5,播放音乐

可以播放网络上的mp3文件

audio.connecttohost("http://mp3.ffh.de/radioffh/hqlivestream.mp3"); //  128k mp3

6, 持续运行

需要在loop()中放置audio.loop();

void loop() {
  ...
  audio.loop();
  ...
}

7,从串口中获取mp3连接

if (Serial.available()){ // put streamURL in serial monitor
        audio.stopSong();
        String r=Serial.readString(); r.trim();
        if (r.length()>5) audio.connecttohost(r.c_str());
        log_i("free heap=%i", ESP.getFreeHeap());
    }

完整代码

// Welcome to www.LingShunLAB.com

#include "Arduino.h"
#include "WiFiMulti.h"
#include "Audio.h"

// Digital I/O used
#define I2S_DOUT      25
#define I2S_BCLK      27
#define I2S_LRC       26

Audio audio;
WiFiMulti wifiMulti;

// config your wifi
String ssid =     "xxxxx";
String password = "xxxxx";

void setup() {

    Serial.begin(115200);

    WiFi.mode(WIFI_STA);
    wifiMulti.addAP(ssid.c_str(), password.c_str());
    wifiMulti.run();
    if(WiFi.status() != WL_CONNECTED){
        WiFi.disconnect(true);
        wifiMulti.run();
    }
    audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
    audio.setVolume(12); // 0...21

    audio.connecttohost("http://mp3.ffh.de/radioffh/hqlivestream.mp3"); //  128k mp3
}

void loop()
{
    audio.loop();
    if(Serial.available()){ // put streamURL in serial monitor
        audio.stopSong();
        String r=Serial.readString(); r.trim();
        if(r.length()>5) audio.connecttohost(r.c_str());
        log_i("free heap=%i", ESP.getFreeHeap());
    }
}

// optional
void audio_info(const char *info){
    Serial.print("info        "); Serial.println(info);
}
void audio_id3data(const char *info){  //id3 metadata
    Serial.print("id3data     ");Serial.println(info);
}
void audio_eof_mp3(const char *info){  //end of file
    Serial.print("eof_mp3     ");Serial.println(info);
}
void audio_showstation(const char *info){
    Serial.print("station     ");Serial.println(info);
}
void audio_showstreamtitle(const char *info){
    Serial.print("streamtitle ");Serial.println(info);
}
void audio_bitrate(const char *info){
    Serial.print("bitrate     ");Serial.println(info);
}
void audio_commercial(const char *info){  //duration in sec
    Serial.print("commercial  ");Serial.println(info);
}
void audio_icyurl(const char *info){  //homepage
    Serial.print("icyurl      ");Serial.println(info);
}
void audio_lasthost(const char *info){  //stream URL played
    Serial.print("lasthost    ");Serial.println(info);
}

上传代码后,程序会自动播放一首歌曲,然后可以在串口中发送MP3连接,即可在线播放。

- 本文内容来自网络,如有侵权,请联系本站处理。

2023-10   阅读(2431)   评论(0)
 标签: 创客 ESP32 I2S 音频

涨知识
结构化编程

结构化程序设计是采用顺序结构、选择结构(IF语句)、循环结构(FOR,WHILE语句)、子程序等来进行程序设计的一种编程典范。

评论:
相关文章
ESP-Hosted 入门介绍 &使用指南

ESP-Hosted 解决方案提供了将 ESP 板用作 Wi-Fi 和 Bluetooth/BLE 连接的通信处理器的方法。


设备上云太麻烦?ESP-Hosted一站触达!

ESP-Hosted 提供了一种将ESP芯片和模组用作通信协处理器的解决方案,该解决方案为主机微处理器或微控制器提供无线连接,使主机能够与其他设备通信。简单来说为网卡方案。


ESP32 + Arduino使用TFT_eSPI库

Arduino+ESP32上使用TFT_eSPI库快速点亮这个屏幕,驱动芯片ST7789


ESP32 利用 SPI 连通 TFT 彩屏

本文给出了一个ESP32与SPI 接口TFT显示屏接线的详细说明,供大家参考。


在Micropython下使用ESPNow功能进行数据传输

本文讲解如何在Micropython环境下使用ESP32的ESPNow功能进行数据传输。


用 ESP32-S3 打造多功能 USB Dongle

ESP-Dongle 是一款基于 ESP32-S3 芯片开发的多功能 USB Device 解决方案。它不仅外形小巧,功能齐全,更集成了无线 U 盘、SD 卡读取以及 USB 无线网卡等多项功能。


利用 ESP32-S3 和 CSI 技术打造智能家居

ESP32 系列芯片可以利用 CSI 数据实现动作检测和存在检测。无论是自动调节灯光、风扇,还是节能控制,CSI 技术为智能家居带来了新的可能性。随着 CSI 技术的发展,未来的智能家居将能够更精确地感知和响应我们的行为,实现更高效、更人性化的控制。


ESP32-FreeRTOS:大量FreeRTOS实例,供参考学习

ESP32-FreeRTOS项目提供了丰富的示例,帮助开发者快速掌握ESP32的硬件功能和FreeRTOS实时操作系统。


物联网项目开发实战-第3章-自动浇花项目迭代3

本节我们在迭代二的基础上使用四位数码管和OLED显示屏显示相关交互信息。


物联网项目开发实战-第3章-自动浇花项目迭代2

本节我们在迭代一的基础上增加采集土壤湿度数据,并根据湿度数据来决定是否自动进行浇水动作。