DIY 音樂播放器很有趣,我們之前使用 Arduino和 專用 MP3 模塊構建了一些音樂播放器。現在我們正在使用 ESP32 構建一個有趣的音頻播放器,您只需在 ESP32 上連接一個額外的揚聲器即可在其中播放音效。在這里,我們將使用LM386 和一個帶有 ESP32 的揚聲器來播放音樂文件。音頻輸出可能不大,但此應用程序顯示了 ESP32 板播放音頻文件的能力。
所需組件
ESP32
LM386 放大器模塊
8歐姆揚聲器
跳線
電路原理圖
ESP32音樂播放器的電路圖如下-
要在 ESP32 上播放聲音,我們需要一個揚聲器。揚聲器通過 LM386音頻放大器模塊連接。Amplifier Module 的 Vcc 和 GND 引腳連接到 ESP32 的 VIN 和 GND,而 Amplifier 模塊的 IN 引腳連接到 ESP32 的 GPIO 25 引腳。GPIO 25 是 2 個 DAC(數模轉換器)引腳之一。
ESP32 音樂播放器的完整設置如下所示:
LM386 是一款音頻放大器 IC,您可以通過以下鏈接了解更多關于 LM386 的信息。
準備好音頻文件
要在 ESP32 板上播放音頻聲音,我們需要.wav格式的音頻文件,因為 ESP32 只能播放.wav格式的音頻文件。
所以第一步是獲取你想在 ESP32 上播放的文件。之后,下載并安裝Audacity Audio Editor App。此應用程序將用于更改文件類型、采樣率和其他屬性。
安裝完成后,打開 Audacity 應用程序,然后轉到文件 》 打開并選擇要編輯的音頻文件。
首先需要改變的是采樣率。對于在 ESP32 上播放音頻文件,8000 到 16000 的采樣率會很好,因為 ESP32 沒有太多內存。因此,將 Project Rate 更改為 16000。
之后,導航到文件 》 導出 》 導出為 WAV以將音頻文件保存為.wav格式。
現在在下一個窗口中,選擇WAV (Microsoft)作為文件類型,選擇Unsigned 8-bit PCM作為編碼格式,然后單擊保存。
現在我們需要一個 Hex Editor 應用程序來為音頻文件生成 Hex 代碼。因此,從給定的鏈接下載并安裝十六進制編輯器 (HxD) 。之后,打開應用程序,然后轉到文件 》 打開 并打開.wav 文件。這將為.wav 文件生成十六進制代碼。
然后使用ctrl+A 選擇完整的代碼,然后轉到編輯 》 復制為 》 C以復制 C 語言格式的代碼。
然后將此代碼粘貼到 Arduino IDE 中。
代碼說明
非接觸式ESP32 音頻播放器的完整代碼在頁面末尾給出。在這里,我們將解釋代碼的一些重要部分。在這個程序中,我們將使用來自XTronical的XT DAC 音頻庫。XT DAC 音頻庫可以從這里下載。
因此,像往常一樣,通過包含所有必需的庫來啟動代碼。SoundData.h文件包含要播放的 .Wav 文件的十六進制代碼。
?
#include "SoundData.h" #include "XT_DAC_Audio.h"
?
在下一行中,創建一個XT_Wav_Class類型的對象, DAC 音頻類使用該對象將.wav數據作為參數傳遞。DacAudio,主要播放器類對象,其中 25 是連接放大器引腳的 DAC 引腳編號。
?
XT_Wav_Class 聲音(樣本); XT_DAC_Audio_Class DacAudio(25,0);
?
在setup()函數中,以 115200 的波特率初始化串行監視器以進行調試。
?
無效設置(){ 序列號.開始(115200);
?
在loop()函數中,用數據填充聲音緩沖區并檢查聲音是否正在播放,如果沒有,則在循環中播放聲音。
?
無效循環(){ DacAudio.FillBuffer(); 如果(聲音。播放==假) DacAudio.Play(&Sound); Serial.println(DemoCounter++); }
?
測試 ESP32 音頻播放器
代碼準備好后,通過 LM386 或任何其他放大器模塊將??揚聲器連接到 ESP32 的 GPIO 25。現在將 ESP32 連接到筆記本電腦并上傳代碼。上傳代碼后,ESP32 開始播放音頻。使用放大器模塊的電位器可以改變音質。
#include "SoundData.h"
#include "XT_DAC_Audio.h"
XT_Wav_Class 聲音(樣本);
XT_DAC_Audio_Class DacAudio(25,0);
uint32_t DemoCounter=0;
無效設置(){
序列號.開始(115200);
}
無效循環(){
DacAudio.FillBuffer();
如果(聲音。播放==假)
DacAudio.Play(&Sound);
Serial.println(DemoCounter++);
}
評論
查看更多