Programarea plăcii ESP32 WROOM 32D ca și audio player
Scopul proiectului de azi este să mă familiarizez cu placa ESP32 WROOM, și să conectez un modul audio cu amplificator. Această combinație magică mă ajută să ascult muzică de la un radio de pe internet http://macslons-irish-pub-radio.com/media.asx. Practic după conectarea celor 5 fire la placa CJMCU-1334, se pot conecta orice fel de căști sau boxe cu mufă jack de 3.5mm. Mai departe placa ESP32 face conexiunea la internet pe WIFI și configurează pinii I2S pentru pentru a trimite datele audio către CJMCU-1334. Dacă totul s-a configurat corect atunci muzica redată la Irish pub radio se poate auzi în căști.
Componente:
- Placa dezvoltare ESP32-DEVKITC compatibila ESP32 WROOM
- CJMCU-1334 UDA1334A I2S Audio Stereo Decoder Module Board
- Placa de stocare Micro SD TF Card reader Shield, SPI Arduino
Schema electronica:
Conectarea pinilor de la stânga la dreapta:
CJMCU-1334 - ESP32
- VIN - VCC (5V)
- GND - GND
- WSEL - GPIO26
- DIN - GPIO25
- BCLK - GPIO27
În sketchul de mai jos am lăsat și configurarea pentru cardul MicroSD, deci dacă ați conecta si o astfel de placă atunci ați putea asculta muzică și de pe un card microSD. Comunicația cu acest tip de card se face folosind protocolul SPI.
Pentru a putea folosi librăria Audio.h e nevoie să o instalați în ArduinoIDE, care se poate descărca de la adresa https://github.com/schreibfaul1/ESP32-audioI2S, iar apoi se importă cum arată poza de mai jos:
Sketch de test:
/* | |
Florin Simedru | |
Complete project details at https://automatic-house.blogspot.com | |
Permission is hereby granted, free of charge, to any person obtaining a copy | |
of this software and associated documentation files. | |
The above copyright notice and this permission notice shall be included in all | |
copies or substantial portions of 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 = "********"; | |
String password = "********"; | |
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(21); // 0...21 | |
audio.connecttohost("http://macslons-irish-pub-radio.com/media.asx"); | |
} | |
void loop() | |
{ | |
audio.loop(); | |
} | |
// 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_id3image(File& file, const size_t pos, const size_t size){ | |
Serial.print("id3image "); Serial.printf("at pos: %u, length: %u\n", pos, size); | |
} | |
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); | |
} | |
void audio_eof_speech(const char *info){ | |
Serial.print("eof_speech ");Serial.println(info); | |
} |
Documentatie proiect:
- https://github.com/schreibfaul1/ESP32-audioI2S
- https://diyi0t.com/i2s-sound-tutorial-for-esp32/
- https://en.wikipedia.org/wiki/I%C2%B2S
- https://en.wikipedia.org/wiki/Serial_Peripheral_Interface
Pentru întrebari și/sau consultanță tehnică vă stau la dispozitie pe blog sau pe email simedruflorin@automatic-house.ro.
O seară/zi plăcută tuturor !