ARDUnia Podcast Player؛ پخش کننده مستقل پادکست با ESP8266
معرفی پروژه
ARDUnia Podcast Player یک پخش کننده سخت افزاری مستقل برای جستجو و گوش دادن به پادکستها است که با میکروکنترلر ESP8266 طراحی شده است.
این دستگاه به اینترنت متصل میشود و از سرویس Podcast Index برای جستجوی پادکستها و دریافت فهرست اپیزودها استفاده میکند. کاربر میتواند از طریق یک صفحه وب محلی، پادکست موردنظر خود را پیدا کند و اپیزودهای دلخواه را برای دسترسی بعدی در حافظه دستگاه ذخیره کند.
کنترل پخش با انکودر چرخشی و نمایشگر رنگی انجام میشود و صدای اپیزود از طریق رابط I2S به ماژول MAX98357A فرستاده میشود.
این پروژه با ARDUnia Audio Hub متفاوت است و به عنوان یک دستگاه اختصاصی برای پادکست طراحی شده است.
قابلیتهای اصلی
- جستجوی پادکستها از طریق سرویس Podcast Index
- نمایش حداکثر ۶ نتیجه جستجوی پادکست
- دریافت حداکثر ۱۰ اپیزود برای هر پادکست
- مشاهده و انتخاب اپیزودها در صفحه وب محلی
- ذخیره نشانی حداکثر ۱۰ اپیزود در حافظه EEPROM
- پخش اپیزود ذخیره شده با انتخاب از منوی دستگاه
- امکان ادامه پخش آخرین اپیزود انتخاب شده، در صورت موجود بودن اطلاعات آن
- کنترل منو با انکودر چرخشی و کلید فشاری
- نمایش وضعیت دستگاه روی TFT رنگی
- پخش فایل صوتی MP3 از طریق HTTP Stream
- استفاده از رابط I2S برای انتقال صدای دیجیتال به MAX98357A
- استفاده از بافر صوتی برای پردازش جریان داده
- استفاده از NTP برای همگام سازی ساعت مورد نیاز ارتباط با Podcast Index
قطعات و تجهیزات
| قطعه | کاربرد |
|---|---|
| ESP8266 | کنترل اصلی دستگاه و ارتباط Wi-Fi |
| نمایشگر TFT مبتنی بر ST7735S | نمایش منوها و وضعیت پخش |
| انکودر چرخشی دارای کلید | حرکت در منوها و انتخاب اپیزود |
| MAX98357A | تبدیل سیگنال I2S و تقویت صدای خروجی |
| بلندگوی سازگار با ماژول MAX98357A | پخش صدا |
| منبع تغذیه پایدار | تامین انرژی مدار |
| اتصال Wi-Fi | جستجو و دریافت جریان صوتی از اینترنت |
معماری نرم افزار
نرم افزار دستگاه از چند بخش اصلی تشکیل شده است:
۱. ارتباط با Wi-Fi و همگام سازی ساعت
دستگاه به شبکه Wi-Fi متصل میشود و ساعت را از طریق سرورهای NTP همگام میکند. دریافت زمان برای ساخت امضای درخواستهای احراز هویت Podcast Index استفاده میشود.
۲. جستجوی پادکست
برنامه درخواست جستجو را به API سرویس Podcast Index ارسال میکند و اطلاعاتی مانند عنوان، نام سازنده و شناسه پادکست را دریافت میکند.
برای محدود نگه داشتن مصرف حافظه ESP8266، تعداد نتایج جستجو محدود شده است.
۳. دریافت اپیزودها
پس از انتخاب یک پادکست، برنامه فهرست اپیزودهای آن را دریافت میکند. عنوان هر اپیزود و نشانی فایل صوتی آن برای نمایش، انتخاب و پخش استفاده میشود.
۴. رابط وب محلی
دستگاه یک وب سرور محلی راه اندازی میکند. کاربر با وارد کردن نشانی IP نمایش داده شده روی TFT در مرورگر تلفن همراه یا رایانه، به صفحه مدیریت پادکستها دسترسی پیدا میکند.
از طریق این صفحه میتوان:
- پادکست جستجو کرد.
- اپیزودهای یک پادکست را مشاهده کرد.
- اپیزود را برای پخش انتخاب کرد.
- نشانی اپیزود را در فهرست ذخیره شده قرار داد.
- اپیزودهای ذخیره شده را مدیریت یا حذف کرد.
وب سرور هنگام ورود به حالت پخش متوقف میشود تا منابع دستگاه برای پخش صوت آزاد باشند.
۵. ذخیره سازی در EEPROM
نشانی اپیزودهای انتخاب شده در EEPROM ذخیره میشود. برنامه میتواند حداکثر ۱۰ نشانی اپیزود را نگه دارد و آخرین اپیزود انتخاب شده را نیز ثبت کند.
نکته مهم این است که فایل صوتی روی EEPROM ذخیره نمیشود؛ فقط نشانی اپیزود ذخیره میشود. بنابراین پخش مجدد آن همچنان به در دسترس بودن نشانی و اتصال اینترنت نیاز دارد.
۶. موتور پخش صوت
پخش صوت با کتابخانههای AudioFileSourceHTTPStream، AudioFileSourceBuffer، AudioGeneratorMP3 و AudioOutputI2S انجام میشود.
داده صوتی به صورت جریان دریافت میشود، از بافر عبور میکند و پس از رمزگشایی MP3 از رابط I2S به ماژول MAX98357A فرستاده میشود.
اتصالات سخت افزاری
جدول زیر براساس تعریف پایهها در نسخه 9.2 کد تهیه شده است.
| بخش | پایه ESP8266 |
|---|---|
| TFT - CS | GPIO5 |
| TFT - DC | GPIO4 |
| TFT - SCLK | GPIO14 |
| TFT - MOSI | GPIO13 |
| TFT - RST | بدون اتصال مجزا در کد |
| انکودر - CLK | GPIO12 |
| انکودر - DT | GPIO16 |
| انکودر - کلید | GPIO0 |
| MAX98357A - BCLK | GPIO15 |
| MAX98357A - LRC | GPIO2 |
| MAX98357A - DIN | GPIO3 |
هشدار مهم درباره اتصالات: GPIO0، GPIO2 و GPIO15 در ESP8266 روی راه اندازی اولیه تراشه تاثیر دارند. همچنین GPIO3 پایه RX سخت افزاری سریال است و در این برنامه برای خروجی I2S استفاده شده است. طراحی نهایی مدار باید این موارد را در نظر بگیرد تا دستگاه هنگام روشن شدن به مشکل نخورد.
راه اندازی نرم افزار
برای کامپایل و اجرای پروژه به محیط Arduino IDE یا محیط سازگار با هسته ESP8266 نیاز است.
کتابخانههای اصلی مورد استفاده عبارت اند از:
- Adafruit GFX Library
- Adafruit ST7735 and ST7789 Library
- ESP8266WiFi
- ESP8266WebServer
- Audio Library شامل کلاسهای AudioFileSourceHTTPStream، AudioFileSourceBuffer، AudioGeneratorMP3 و AudioOutputI2S
- EEPROM
- Hash
باید کتابخانه صوتی سازگار با نسخه مورد استفاده ESP8266 نصب شده باشد.
تنظیمات مورد نیاز
برای استفاده از دستگاه، اطلاعات شبکه Wi-Fi و مشخصات API سرویس Podcast Index باید در برنامه تنظیم شوند.
اطلاعات محرمانه مانند رمز شبکه، API Key و API Secret نباید در نسخه عمومی کد قرار بگیرند. برای انتشار عمومی پروژه بهتر است این مقادیر از کد نمونه حذف شوند و روش تنظیم آنها به صورت جداگانه توضیح داده شود.
محدودیتها
- جستجوی پادکست و دریافت اپیزودها به اتصال اینترنت نیاز دارد.
- فهرست نتایج جستجو به تعداد محدودی از پادکستها و اپیزودها محدود شده است.
- حافظه دستگاه فقط نشانی اپیزودهای ذخیره شده را نگه میدارد، نه فایل صوتی آنها را.
- پخش به قابل دسترس بودن نشانی فایل صوتی و سازگاری جریان دریافتی با رمزگشای MP3 وابسته است.
- کیفیت و پایداری پخش به شبکه، سرور میزبان فایل و منابع حافظه ESP8266 بستگی دارد.
جمع بندی
ARDUnia Podcast Player نمونهای از ترکیب یک میکروکنترلر کم هزینه با سرویسهای اینترنتی و پخش صوت آنلاین است. این پروژه جستجوی پادکست، مدیریت اپیزودها، ذخیره نشانیها و پخش صوت را در یک دستگاه مستقل گرد هم میآورد.
پروژه برای توسعه بیشتر، بهبود رابط کاربری، مدیریت خطاهای شبکه و تکمیل مستندات سخت افزاری و نرم افزاری ظرفیت دارد.
وب سایت پروژههای آردونیا:
