首页 > 其他分享 >ESP32 使用MAX98357 播放MP3

ESP32 使用MAX98357 播放MP3

时间:2024-08-01 16:10:05浏览次数:14  
标签:info MAX98357 ESP32 I2S MP3 Serial audio

使用ESP32和MAX98357音频放大器芯片来播放音乐,效果令人惊叹!  【ESP32开发指南】

 

 

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

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

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

元件说明

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的引脚图:

 

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的接线图:

 

库安装

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连接,即可在线播放。

代码库:http://git.kfayun.com/xpstem/ESP32-audioI2S - 本文来自网络,如有侵权,请联系本站处理。

标签:info,MAX98357,ESP32,I2S,MP3,Serial,audio
From: https://www.cnblogs.com/FBsharl/p/18336848

相关文章

  • 三年级上册英语人教版电子课本新版pdf+mp3音频课件免费下载2024秋季版
    2024年秋季新版三年级上册英语人教版课件及mp3音频免费下载:新版英语PDF电子课本预览:虽然自己是老师,但不出意外的话今年应该不会教三年级。but女儿9月读三年级,并且我们在不同的学校。所以咬咬牙还是把三年级的英语给备了,自己先学会才能更好的教女儿念。由于今年是2024版新教材,......
  • 【esp32 学习笔记】(esp-idf 版本)从点灯开始——点亮LED
    【配置CMakeLists】首先配置自定义组件的CMake文件:components->led->CMakeLists.txt完整配置内容如下:file(TO_CMAKE_PATH"$ENV{IDF_PATH}"IDF_PATH) #将Windows下ESP-IDF的路径转化CMAKE路径idf_component_register(SRCS"led.c"          INCLUDE_......
  • 在 Python 中读取部分 MP3 文件时处理“对于可用位计数来说太大”错误
    我正在尝试读取MP3文件的特定部分,但遇到错误:[src/libmpg123/layer3.c:INT123_do_layer3():1771]error:part2_3_length(1376)toolargeforavailablebitcount(760)可以访问音频文件此处我的环境是使用此Docker映像设置的:pytorc......
  • 无法编译 Arduino ESP32 代码:.../python3: exec 格式错误
    昨天我使用MacOSArduinoIDE或VSCode编译Arduino草图没有任何问题。但今天什么也编译不了。我尝试在ArduinoIDE或带有Arduino扩展的VSCode中编译的任何草图都会出现此错误:fork/exec/Library/Frameworks/Python.framework/Versions/3.11/bin/python3:exec......
  • QQ音乐VIP歌曲批量下载后,一键全自动转换+ogg批量转码Mp3
    那天隔壁大妈笑眯眯地找到我,说:“阿星啊,大妈想学几首新的广场舞,你能不能帮大妈从QQ音乐里下几首歌?”我一听,这简单啊,立马答应下来。结果,一动手才发现,QQ音乐的VIP歌曲居然都是加密的,下载下来不是mgg就是mflac,根本没法直接听!于是,阿星开始了一场“解密+格式转换”的大冒险。经过......
  • ESP32S3之JTAG调试OPENOCD服务启动失败
    OpenOCDserverisnotrunning![OpenOCD]❌Error:libusb_open()failedwithLIBUSB_ERROR_NOT_FOUND[OpenOCD]❌Error:esp_usb_jtag:couldnotfindoropendevice!OpenOCD打开不成功主要是驱动程序不对修复方法使用Zadig,来修改驱动程序降级之后的驱动,是由哪里......
  • ESP32各型号模组进入下载模式的引脚配置及其自动下载电路
    1.自动下载电路 不同型号的ESP32模组的自动下载电路都相同,只是RST/EN,Boot引脚的引脚号不同,例如ESP32-C3的Boot脚为GPIO9而ESP32-Wroom-32的boot脚为GPIO0 上图为ESP32和ESP8265的自动下载电路2.进入下载模式的引脚配置 一般只有自动下载电路是不能在下载模式和运行模式来......
  • esp32在Arduino中环境的搭建
      我们找到https://dl.espressif.cn/dl/package_esp32_index.json的json文件,然后打开它。  首先是在“platforms”块中找到你的需要的esp32版本把“url”中的内容复制到迅雷中下载,这样我们就得到了esp32-1.0.6.zip, 剩下的在“tools”块中,找到你自己的平台,比如你是window......
  • ESP32-S3-IIS编译报错 ‘I2S_TIMING_REG‘ was not declared in this scope; did you m
    记录编译报错及解决方法'I2S_TIMING_REG'wasnotdeclaredinthisscope;didyoumean'I2S_TX_TIMING_REG'?1,编译串口打印的报错信息见第2项。主要是:‘I2S_TIMING_REG’wasnotdeclaredinthisscope;didyoumean‘I2S_TX_TIMING_REG’?中文意思:“I2S_......
  • 嵌入式外设 -- ESP32-Cam图像透传到公网访问做个小监控(图文讲解)
    目录一前言局域网透传和环境安装可以看这里二准备工作1.账号注册2.软件下载3.软件安装4.软件使用5.程序烧录三重点来了1.获取分配的IP地址2.软件配置隧道IP地址3.获取到公网的访问地址4.配置摄像头参数四注意事项重新链接热点需要重新去走这几步......