پخش MP3 با ESP32 و استفاده از esp-idf

ممنونم از شما جناب معین عزیز. من با همون esp-idf و PCM5102 که با I2S کار میکنه فایل Wave رو پخش کردم. وقتی با سمپل ریت 41000 و استریو پخش میکنم مشکلی نداره ولی وقتی با 8000 و مونو پخش میکنم ، جاهایی که فرکانس بالایی داره مثل حرف “س” دچار اعوجاج میشه و تقریبا به “ش” تبدیل میشه . این مشکل رو اگر بتونم حل کنم فعلا کارم راه میافته. تنظیمات مربوط به i2s رو هم تغییر دادم ولی فرقی نکرده.

کدهایی که برای idf هست برای ورژن های پایینتر idf هست و با ورژن های بالا خطاهای زیااااااادی میده و اصلا کامپایل نمیشه. تمام کتابخانه adf هم برای بردهایی هست که کدک سخت افزاری دارن که نمیخوام از اونها استفاده کنم.

آیا شما کد به زبان C برای تفسیر فایل های mp3 رو دارید؟ اگر دارید، بقیش قابل انجامه. باید یک فایل رو از روی یک حافظه باز کنید که احتمالا با fatfs و کتابخانه های شبیه اون کار سختی نیست. حتی می تونید از روی sd card و یا از روی شبکه فایل رو بخونید. بعد باید فایل رو تفسیر کنید و تبدیلش کنید به آنالوگ که باید از مدارهای dac استفاده کنید. قسمت خوندن فایل به صورت ایزوله example هاش هست. قسمت پخش صوت با dac و مدار هایی که در نهایت به اسپیکر وصل میشن هم هست. تنها قسمت مهم همون کدی هست که بتونه mp3 رو تفسیر کنه. اگر دنبال کد کاملا آماده گشتید و چیزی پیدا نکردید، مرحله به مرحله سعی کنید پیادش کنید.
نکته مهم دیگه هم اینکه ریپوی esp-idf هر دفعه که ریلیز جدید میده، در قسمت release notes کاملا توضیح میده که چیا عوض شدن و شما می تونید با دنبال کردن اونها ببینید چرا کدتون روی ورژن جدید کار نمیکنه. سری به ریپوشون توی git بزنید. بعضی وقتا ارورهای خیلی خیلی زیادی میگیرید ولی از اولین ارور که شروع کنید، می بینید که خیلی از ارورهای دیگه هم رفع میشه. در واقع در کامپایلر های C وقت به ارور اول باید توجه کرد و بقیه احتمال اشتباه بودنشون هست.

سلام. کسی تونسته با esp-idf و بدون codec سخت افزاری ( یعنی از آی سی کدک استفاده نشود) یه mp3 رو پخش کنه؟
با توابع آردوینو تونستم با esp32 این کار رو انجام بدم ولی با توابع esp-idf نتونستم.

سلام، به نظرم باید یکم تنظیمات خود freeRTOS رو هم تغییر بدید. دقت کنید که rtos همیشه داره بین task ها سوییچ می کنه و هرچقدر که سریعتر بتونه سوییچ کنه، هر تسک، سریعتر اجرا میشه. علاوه بر این، شما بین core1 و core0 می تونید انتخاب کنید برای تسک ها که معمولا سر core0 خیلی شلوغ هست و یک سری اینتراپت هم روی wifi وجود داره که از همه اولویتشون بالاتر هست و باید سعی کنید اینها رو تنظیم کنید تا به بهترین کیفیت برسید.

سلام دوست عزیز، اینکه با آردوینو تونستید ولی با esp-idf نتونستید، کمی عجیب هست. امکانات و قابلیت های idf خیلی خیلی بیشتر از adruino هست و از آخرین ورژن کد های esp32 هم استفاده میکنه. چه اروری می گیرید؟ شاید یک مشکل ریز داشته باشه که بشه حلش کرد. ولی اگر با arduino تونستید، ۱۰۰٪ با idf هم میشه.