در این آموزش یاد میگیریم چطور پخش WAV با ESP32 را با استفاده از خروجی DAC انجام بدهیم و با یک تقویتکننده ساده مثل LM386 صدا را روی اسپیکر پخش کنیم. همچنین مراحل آمادهسازی فایل WAV و تبدیل آن به آرایه C برای استفاده در Arduino IDE را قدمبهقدم توضیح میدهیم.
در ادامه، مدار اتصال DAC به LM386 و نکات مربوط به کیفیت صدا را بررسی میکنیم تا پخش WAV با ESP32 بدون نویز و با حجم صدای مناسب انجام شود.
لوازم موردنیاز
• ESP32
• ماژول تقویتکننده صوتی LM386
• اسپیکر ۸ اهم
• سیمهای جامپر
مدار پخشکننده صوتی (Audio Player Circuit)
برای پخش صدا در ESP32 به یک اسپیکر نیاز داریم. اسپیکر از طریق ماژول تقویتکننده LM386 متصل میشود. پایههای VCC و GND ماژول به Vin و GND برد ESP32 وصل میشوند و پایه IN ماژول به GPIO25 (یکی از پایههای DAC) متصل میشود.

شکل: مدار اتصال ESP32 به ماژول تقویتکننده LM386 و اسپیکر (استفاده از DAC روی GPIO25)
مدار پخش کننده صوتی ESP32 با LM386 و اتصال به GPIO25 DAC
اماده سازی برای پخش
ESP32 در این روش فقط فایلهای WAV را پخش میکند. برای اینکه حجم و مصرف حافظه مناسب باشد، بهتر است Sample Rate را بین 8000 تا 16000 قرار دهید (در این آموزش 16000). برای تبدیل و خروجی گرفتن WAV میتوانید از Audacity استفاده کنید.

شکل: Export کردن صدا در Audacity (مسیر File > Export > Export as WAV)
بعد از تنظیم Project Rate روی 16000، فایل را با گزینههای زیر خروجی بگیرید:
– Save as type: WAV (Microsoft)
– Encoding: Unsigned 8-bit PCM

شکل: تنظیمات ذخیره WAV: انتخاب WAV (Microsoft) و Encoding = Unsigned 8-bit PCM
تنظیم Encoding فایل WAV برای پخش صدا در ESP32
تبدیل فایل WAV به کد C با Hex Editor (HxD)
فایل sound.wav را در HxD باز کنید، کل محتوا را انتخاب کنید (Ctrl + A) و از مسیر زیر کپی کنید:
Edit > Copy as > C

شکل: کپی کردن داده فایل WAV به فرمت C در HxD (Edit > Copy as > C)
کپی کردن هگز فایل WAV به فرمت C با نرم افزار HxD
نمونهای از نمایش دادههای WAV در Hex Editor:

شکل: نمونه نمایش دادههای فایل sound.wav در Hex Editor
نمایش هگز فایل WAV برای تبدیل به آرایه C
قرار دادن داده صوت در Arduino IDE
خروجی Copy as C را داخل یک فایل هدر مثل SoundData.h قرار دهید (مثلاً آرایهای به نام sample). سپس در کد اصلی، فایل SoundData.h و کتابخانه XT_DAC_Audio را اضافه میکنیم.
نمونه کد آردوینو
#include "SoundData.h"
#include "XT_DAC_Audio.h"
XT_Wav_Class Sound(sample);
XT_DAC_Audio_Class DacAudio(25,0);
uint32_t DemoCounter=0;
void setup() {
Serial.begin(115200);
}
void loop() {
DacAudio.FillBuffer();
if(Sound.Playing==false)
DacAudio.Play(&Sound);
Serial.println(DemoCounter++);
}
تست پخشکننده صوتی ESP32
بعد از آماده شدن کد، ماژول LM386 و اسپیکر را طبق مدار به GPIO25 وصل کنید، سپس کد را روی ESP32 آپلود کنید. بعد از آپلود، برد شروع به پخش صدا میکند. کیفیت/بلندی صدا را میتوانید با پتانسیومتر روی ماژول تقویتکننده تنظیم کنید.

شکل: نمونه اتصال واقعی ESP32 + LM386 + اسپیکر (نمای روبهرو)

نمونه اتصال واقعی ESP32 + LM386 + اسپیکر (نمای دیگر) پخش WAV با ESP32 از طریق DAC