ماژول های ESP32 به عنوان جایگزین و نسخه پیشرفته ESP8266 دارای امکانات و پریفرال بیشتری هستند . ESP32 با وجود واحد DAC امکان ایجاد سیگنال های آنالوگ را دارد لذا می توانید از این قابلیت برای ایجاد صدا و یا سیگنال های PAL استفاده کنید . در این پروژه به نحوه پخش فایل های صوتی توسط ESP32 خواهیم پرداخت . برای پخش یک فایل صوتی ابتدا لازم است تغییراتی در صدایی که می خواهیم پخش شود ایجاد کنیم . از جمله این تغییرات تبدیل صدا از استریو به منو و همچنین بادریت آن می باشد .
قبل از هر چیزی یک فایل صوتی با حجم پایین در حد حداکثر پنج ثانیه ( به دلیل محدودیت حافظه ESP32 ) و مراحل زیر را انجام دهید :
1- ابتدا از این لینک برنامه Audacity را دانلود و سپس نصب کنید . Audacity جهت ویرایش فایل های صوتی می باشد که از فرمت های زیادی را پشتیبانی می کند .
2- پس از نصب Audacity ، آن را باز کنید و از منو File و سپس Open فایل صدای مورد نظر خود را باز کنید .
3- حال Project Rate را بر روی 8000 قرار دهید .
4- از منوی File گزینه Export را انتخاب و گزینه WAV را بزنید :
5- در پایان آن را ذخیره کیند (گزینه های Encoding را همانند تصویر زیر قرار دهید ) :
تبدیل فایل صوتی به آرایه C :
پس از ساخت فایل صوتی به صورت WAV و با نرخ 8000 ، باید آن را به یک آرایه C تبدیل کنید . برای این کار از این لینک برنامه Hex Editor (HxD) را دانلود و نصب کنید .
1- پس از نصب برنامه H&D آن را باز کنید و از گزینه File و Open فایل صوتی را که ویرایش کرده بودید باز کنید :
2- حال باید فایل مورد نظر را به صورت یک آرایه C و در قابل یک هدر فایل در بیارید . برای این کار از منوی Edite گزینه Copy as را انتخاب و سپس C را بزنید و در نهایت فایل خروجی را در مکان پروژه اصلی که به آن خواهیم پرداخت ذخیره کیند .
اکنون یک پروژه جدید در آردوینو IDE بسازید . پس از ذخیه پروژه هدر فایلی را که ساخته بودین در کنار فایل پروژه اصلی قرار دهید .
کد های زیر را در پروژه کپی و سپس از منوی Sketch گزینه Add file را انتخاب و سپس هدر فایل صدا را انتخاب کنید .
سپس از لینک زیر کتابخانه XT_DAC_Audio را دانلود و آن را در آردوینو IDE نصب کیند :
https://github.com/WeekendWarrior1/XTronical_XT_DAC_Audio_Mirror
کد های زیر را بر روی برد ESP32 آپلود کنید :
#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++); }
پین GPIO25 خروجی DAC ماژول ESP32 می باشد که می توانید آن را از طریق یک آمپلی فایر به بلندگو متصل کنید :