一個夥伴傳來一個用esp8266播放mp3的架構,要我幫忙改成ESP32版本
我的ESP32實做書籍:我出書了 ESP32 物聯網專題
博客來網址:https://www.books.com.tw/products/0010901195
實做說明
一個夥伴傳來一個用esp8266播放mp3的架構,要我幫忙改成ESP32版本,原本我一直以為它是用dfplayer的,沒想到竟然是直接接在esp8266的rx腳位播放,除了SD卡外,沒有外加任何裝置,靠著的是軟體Lib dac做mp3解碼。
查了一下是採用esp8266audio這個lib(這個lib同時適用esp32),在此借花獻佛先提供8266的程式碼及接線方式。
一、材料準備
1.ESP8266任意版本皆可
2.SPI界面SD讀卡機及一片SD卡,像這款: https://goods.ruten.com.tw/item/show?21652913575950
3.內建擴大器喇叭,像是一般的電腦用喇叭即可,主要是因為rx腳位本身沒有電壓輸出,所以不能使用8歐姆那種沒有內建擴大器的speaker
4.各式杜邦線數條
二、硬體接線
1.先將SD讀卡機接在ESP8266的SPI腳位(CS, MISO, MOSI, SCK)
2.將擴大器喇叭的音源正負極同時接在rx上
3.再次提醒,要使用有擴大器的喇叭,將喇叭接上電源

三、程式設計
首先至github下載esp8266audio函式庫: https://github.com/earlephilhower/ESP8266Audio
點選右上角Clone or download/Download Zip

下載完畢後,選擇草稿碼/匯入程式庫/加入.Zip程式庫

在開啟視窗中選擇剛剛下載的ESP8266Audio-master.zip,再選開啟即可完成匯入功能。

完成程式庫匯入後,我們將一首mp3檔案複製到sd卡根目錄中進行測試,並命名為「TRACK0.mp3」,後續使用者可自行於程式中更改檔案名稱。
以下範例程式修改於範例程式,開機後會直接開啟TRACK0.mp3進行播放。
結論是:音效品質普,小聲不暴音,但偶爾會有雜音
#include "AudioFileSourceSD.h"
#include "AudioFileSourceID3.h"
#include "AudioGeneratorMP3.h"
#include "AudioOutputI2SNoDAC.h"
#include "SD.h"
#include "SPI.h"
AudioGeneratorMP3 *mp3;
AudioFileSourceSD *file;
AudioOutputI2SNoDAC *out;
AudioFileSourceID3 *id3;
uint32_t Size = ESP.getFreeHeap();
void setup() {
Serial.begin(115200);
delay(1000);
Serial.print("Initializing SD card...");
if (!SD.begin(D3))
{
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
delay(100);
file = new AudioFileSourceSD("/TRACK0.mp3");
out = new AudioOutputI2SNoDAC();
mp3 = new AudioGeneratorMP3();
mp3->begin(file, out);
}
void loop() {
if (mp3->isRunning()) {
if (!mp3->loop()) {
mp3->stop();
delete file;
delete mp3;
mp3 = new AudioGeneratorMP3();
file = new AudioFileSourceSD("/TRACK0.mp3");
mp3->begin(file, out);
Serial.println(Size);
}
} else {
Serial.printf("MP3 done\n");
delay(1000);
}
}