|
在智能音箱、智能音响等智能家居设备中,经常使用HIFI级来形容其音频性能。这些设备通常具有高质量的音频解码器、音频放大器、高保等音频元件,能够提供更加真实、清晰、细腻的音乐表现,带给用户更好的听觉体验。在本篇帖子中,我们将使用UDA1334A立体声解码器模块还原音频信号。
所需的组件 ● ESP-WROOM-32 ESP32开发板 ● UDA1334A I2S立体声解码器模块 ● 跳线
UDA1334A I2S立体声解码器模块简介 UDA1334A是一款多功能数模转换器,以其出色的音频性能而闻名。其关键特性在于能够提供高保真声音再现,使其成为音频爱好者和专业人士的首选。DAC支持广泛的采样频率,确保准确、细致的音频播放。
UDA1334A解码器模块的引脚分布 UDA1334A模块共有14个引脚,如下图所示:
● 5V:电源输入 (5V) ● 3.3V:电源输入 (3.3V) ● GND:IC 的接地参考 ● LRC(Left/Right Clock):用于左/右声道识别的输入 ● DOUT(Data Out):用于传输转换后的模拟信号的串行数据输出 ● BCLK(Bit Clock):用于同步数据传输的输入 ● LOUT(Left Channel Output):左声道的模拟音频输出 ● AGND(Analog Ground):用于内部模拟参考的接地 ● ROUT(Right Channel Output):右声道的模拟音频输出 ● SCLK(System Clock):用于系统时钟同步的输入 ● SF0 和 SF1(Digital Filter Select):用于选择数字滤波器选项的输入。SF0 和 SF1 用于设置输入数据格式。默认情况下,两者都被拉低以用于 I2S,但您可以更改它们以获得其他格式。 ● MUTE:用于静音音频输出的输入 ● PLL(Phase-Locked Loop):用于外部时钟同步的输入 ● DEEM(De-emphasis):用于去加重控制的输入
硬件连接 将ESP32开发板连接到UDA1334A模块,如下图所示:
代码 首先,在Arduino IDE上安装ESP32-audioI2S库:https://github.com/schreibfaul1/ESP32-audioI2S。 然后将以下代码上传到您的ESP32开发板。 - //**********************************************************************************************************
- //* audioI2S-- I2S audiodecoder for ESP32, *
- //**********************************************************************************************************
- //
- // first release on 11/2018
- // Version 3 , Jul.02/2020
- //
- #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);
- }
复制代码上传后,ESP32将与广播服务器建立连接并开始播放歌曲。
|