Arduino 平台下 ESP32-P4 驱动ES8311实现 MP3音频文件播放-方式2

arduino 平台下ESP32-P4 开发板驱动ES8311,从SD_MMC读取MP3文件播实验程序,方式2。
这个测试程序与之前的有所不同,直接使用了arduino-audio-drivers 库中的ES8311驱动文件。采用arduino-audio-drivers 比单独使用ES8311驱动来的更好,毕竟这个库支持ES8388,ES8311等多种芯片,程序也更简单。
程序中ES8311驱动采用 arduino-audio-drivers库
MP3文件读取与播放使用了ESP32-AudioI2S库
开发板使用斑梨电子JC1060P470_P4,板载ES8311音频解码器和四线SD卡模块。

程序环境如下、
Arduino IDE 2.3.4
Arduino IDE 中开发板使用 ESP32 P4 Dev Module
Arduino ESP32内核 3.10
ESP32-AudioI2S 版本 3.0.8(使用最新版3.0.13编译不通过)
arduino-audio-drivers库版本 0.1.0
程序代码如下:

#include "AudioBoard.h"  //https://github.com/pschatzmann/arduino-audio-driver
#include "Audio.h"       //https://github.com/schreibfaul1/ESP32-audioI2S
#include "SD_MMC.h"

Audio audio;
DriverPins my_pins;
AudioBoard board(AudioDriverES8311, my_pins);  

//SD_MMC 
#define SD_D0    39
#define SD_D1    40
#define SD_D2    41
#define SD_D3    42
#define SD_CMD   44
#define SD_CLK   43

//ES8311 I2S
#define I2S_MCK_IO 13
#define I2S_BCK_IO 12
#define I2S_DI_IO 11
#define I2S_WS_IO 10  
#define I2S_DO_IO 9
#define ES8311_PA 20  //ES8311使能

// ES8311 I2C 
#define I2C_SDA 7  
#define I2C_SCL 8 
#define ES8311_ADDRESS 0x18

void scan_i2c_device(TwoWire &i2c)  //I2C 模块地址扫描函数
{
  Serial.println("Scanning for I2C devices ...");
  Serial.print("      ");
  for (int i = 0; i < 0x10; i++) {
    Serial.printf("0x%02X|", i);
  }
  uint8_t error;
  for (int j = 0; j < 0x80; j += 0x10) {
    Serial.println();
    Serial.printf("0x%02X |", j);
    for (int i = 0; i < 0x10; i++) {
      Wire.beginTransmission(i | j);
      error = Wire.endTransmission();
      if (error == 0)
        Serial.printf("0x%02X|", i | j);
      else
        Serial.print(" -- |");
    }
  }
  Serial.println();
}

void setup() {
  Serial.begin(115200);

  //ES8311使能
  pinMode(ES8311_PA, OUTPUT);
  digitalWrite(ES8311_PA, HIGH);
 
  // add i2c codec pins: scl, sda, port
  my_pins.addI2C(PinFunction::CODEC, I2C_SCL, I2C_SDA, ES8311_ADDRESS);

  SD_MMC.setPins(SD_CLK, SD_CMD, SD_D0,SD_D1,SD_D2,SD_D3); //四线SD_MMC
   if (!SD_MMC.begin()) {    
    Serial.println("Card Mount Failed");
    return;
  }
  
  // configure codec 
  CodecConfig cfg;
  cfg.input_device = ADC_INPUT_ALL;//ADC_INPUT_LINE1; ADC_INPUT_ALL
  cfg.output_device = DAC_OUTPUT_ALL; 
  cfg.i2s.bits = BIT_LENGTH_16BITS;
  cfg.i2s.rate = RATE_44K;
  cfg.i2s.fmt = I2S_NORMAL;  
    
  //初始化ES8311
  board.begin(cfg);

  scan_i2c_device(Wire); //扫描I2C设备地址

  //调用audio库实现MP3输出
  audio.setPinout(I2S_BCK_IO, I2S_WS_IO, I2S_DO_IO,I2S_MCK_IO);
  audio.setVolume(4); // 0...21
  audio.connecttoFS(SD_MMC, "1.mp3");
  
}

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

// 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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值