راه‌اندازی ماژول دیکدر I2S استریو UDA1334A با ESP32 و آردوینو IDE

آموزش راه اندازی UDA1334A

ویژگی‌های ماژول دیکدر I2S استریو UDA1334A

UDA1334A یک مبدل همه‌کاره دیجیتال به آنالوگ (DAC) است و در زمینه کار با فایل‌های صوتی، عملکرد فوق‌العاده‌ای دارد. ویژگی کلیدیUDA1334A ، بازتولید صوت با کیفیت بالا است. این ماژول طرفداران زیادی دارد؛ از علاقه‌مندان نوپا گرفته تا حرفه­ای­های باران‌دیده. DAC از طیف گسترده‌ای از فرکانس‌های نمونه‌برداری پشتیبانی می‌کند؛ بنابراین خیالتان از پخش بی‌نقص فایل‌های صوتی راحت باشد.

دیتاشیت ماژول ADS1015 را از اینجا دانلود کنید.

پین‌اوت ماژول دیکدر I2S استریو UDA1334A

ماژول ADS1015 ADC دارای 14 پین است:

  • 5V: ورودی منبع تغذیه (5 ولت)
  • 3.3V: ورودی منبع تغذیه (3.3 ولت)
  • GND: زمین آی‌سی
  • LRC (ساعت چپ/راست): ورودی برای شناسایی کانال چپ/راست
  • DOUT (Data Out): خروجی داده سریال برای انتقال سیگنال‌های آنالوگ تبدیل‌شده
  • BCLK (ساعت بیت): ورودی برای همگام‌سازی انتقال داده
  • LOUT (خروجی کانال چپ): خروجی صوتی آنالوگ برای کانال چپ
  • AGND (زمین آنالوگ): زمین مرجع آنالوگ داخلی
  • ROUT (خروجی کانال راست): خروجی صوتی آنالوگ برای کانال راست
  • SCLK (ساعت سیستم): ورودی برای همگام‌سازی ساعت سیستم
  • SF0 و SF1 (انتخاب فیلتر دیجیتال): ورودی برای انتخاب گزینه‌های فیلتر دیجیتال. SF0 و SF1 برای تنظیم فرمت داده‌های ورودی استفاده می‌شوند. هر دو برای I2S به‌طور پیش‌فرض در حالت LOW هستند اما می‌توانید آنها را برای فرمت‌های جایگزین تغییر دهید.
  • MUTE: ورودی برای بی‌صدا کردن خروجی صدا
  • PLL (حلقه قفل فاز): ورودی برای همگام‌سازی ساعت خارجی
  • DEEM (De-Emphasis): ورودی برای کنترل عدم تاکید

می توانید پین‌اوت این ماژول را در تصویر زیر مشاهده کنید.

لوازمی که به آن احتیاج دارید

راه‌اندازی ماژول دیکدر I2S استریو UDA1334A با آردوینو و ESP32

گام اول: مدار

در مدار زیر نشان داده‌ایم که چگونه باید ماژول UDA1334A  را به ESP32 وصل کنید.

گام دوم: نصب کتابخانه

این کتابخانه را روی آردوینو IDE نصب کنید.

گام سوم: کد

کد زیر را در ESP32 آپلود کنید.

//**********************************************************************************************************
//*    audioI2S-- I2S audiodecoder for ESP32,                                                              *
//**********************************************************************************************************
//
// first release on 11/2018
// Version 3  , Jul.02/2020
//
//
// THE SOFTWARE IS PROVIDED "AS IS" FOR PRIVATE USE ONLY, IT IS NOT FOR COMMERCIAL USE IN WHOLE OR PART OR CONCEPT.
// FOR PERSONAL USE IT IS SUPPLIED WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHOR
// OR COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
//

#include "Arduino.h"
#include "WiFiMulti.h"
#include "Audio.h"
#include "SPI.h"
#include "SD.h"
#include "FS.h"

// Digital I/O used
#define SD_CS          5
#define SPI_MOSI      23
#define SPI_MISO      19
#define SPI_SCK       18
#define I2S_DOUT      25
#define I2S_BCLK      27
#define I2S_LRC       26

Audio audio;
WiFiMulti wifiMulti;
String ssid =     "xxxxx";
String password = "xxxxx";


void setup() {
    pinMode(SD_CS, OUTPUT);      digitalWrite(SD_CS, HIGH);
    SPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI);
    SPI.setFrequency(1000000);
    Serial.begin(115200);
    SD.begin(SD_CS);
    WiFi.mode(WIFI_STA);
    wifiMulti.addAP(ssid.c_str(), password.c_str());
    wifiMulti.run();
    if(WiFi.status() != WL_CONNECTED){
        WiFi.disconnect(true);
        wifiMulti.run();
    }
    audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
    audio.setVolume(12); // 0...21

//    audio.connecttoFS(SD, "/320k_test.mp3");
//    audio.connecttoFS(SD, "test.wav");
//    audio.connecttohost("http://www.wdr.de/wdrlive/media/einslive.m3u");
//    audio.connecttohost("http://macslons-irish-pub-radio.com/media.asx");
//    audio.connecttohost("http://mp3.ffh.de/radioffh/hqlivestream.aac"); //  128k aac
      audio.connecttohost("http://mp3.ffh.de/radioffh/hqlivestream.mp3"); //  128k mp3
}

void loop()
{
    audio.loop();
    if(Serial.available()){ // put streamURL in serial monitor
        audio.stopSong();
        String r=Serial.readString(); r.trim();
        if(r.length()>5) audio.connecttohost(r.c_str());
        log_i("free heap=%i", ESP.getFreeHeap());
    }
}

// optional
void audio_info(const char *info){
    Serial.print("info        "); Serial.println(info);
}
void audio_id3data(const char *info){  //id3 metadata
    Serial.print("id3data     ");Serial.println(info);
}
void audio_eof_mp3(const char *info){  //end of file
    Serial.print("eof_mp3     ");Serial.println(info);
}
void audio_showstation(const char *info){
    Serial.print("station     ");Serial.println(info);
}
void audio_showstreamtitle(const char *info){
    Serial.print("streamtitle ");Serial.println(info);
}
void audio_bitrate(const char *info){
    Serial.print("bitrate     ");Serial.println(info);
}
void audio_commercial(const char *info){  //duration in sec
    Serial.print("commercial  ");Serial.println(info);
}
void audio_icyurl(const char *info){  //homepage
    Serial.print("icyurl      ");Serial.println(info);
}
void audio_lasthost(const char *info){  //stream URL played
    Serial.print("lasthost    ");Serial.println(info);
}
C++

پس از آپلود، ESP32 با سرور رادیو ارتباط برقرار کرده و پخش آهنگ‌ها را آغاز می‌کند.

آموزش های مشابه

Comments (6)

  • Ali Reply

    وقت بخیر، من وقتی این کد رو آپلود میکنم فقط مسیج slow stream رو میبینم و صدایی پخش نمیشه مشکل از کجا میتونه باشه؟

    جولای 6, 2024 at 10:39 ق.ظ
    • محمد دمیرچی Reply

      با سلام
      این مورد به ضعیف بودن دسترسی به اینترنت می باشد.
      از سرور های دیگر یا وصل کردن برد به سایر اینترنت ها نیز تلاش کنید.

      جولای 6, 2024 at 1:25 ب.ظ
      • Ali Reply

        این مشکل حل شد ولی صدا نویز شدیدی داره وقتی هدفون رو به ماژول وصل میکنم

        جولای 9, 2024 at 11:33 ق.ظ
      • Ali Reply

        و مشکل دیگه ای که دارم اینه که وقتی dout از میکرو رو به din وصل میکنم صدایی شنیده نمیشه ولی وقتی به lout ماژول وصل میکنم صدا شنیده میشه

        جولای 9, 2024 at 11:39 ق.ظ
        • محمد دمیرچی Reply

          با سلام
          پایه din مربوط به دیتا ورودی از سمت ماژول هست و lout به پایه های aux وصل هست. اینکه به این پایه وصل کردید و صدا را دریافت کردید عجیب می باشد.
          ویدیو های مربوط به تست ماژول درحال اضافه شدن به سایت می باشد اما میتوانید از طریق این لینک ویدیو مربوط به این محصول را دانلود کنید.

          جولای 13, 2024 at 9:09 ق.ظ
          • Ali

            من به اشتباه داشتم خروجی آنالوگ رو به ماژول میدادم که اون مشکل رو داشتم ولی وقتی خروجی دیجیتال میدم هیچ خروجی ای ندارم، اتصالاتم مثل عکسی هست که گذاشتید.

            جولای 17, 2024 at 10:35 ق.ظ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.