SK LABS
ESP32 I2S (1): ESP32, PCM5102 i PAM8403
Mrežna muzika iz silicijuma
D. PETROVIĆ
1. maj 2023.

U pretprošlom broju (i.sk.rs/32038) pisali smo o I2S interfejsu i pojasnili kako sve to funkcioniše. Rekli smo da je u pitanju hardverski interfejs i da je potrebno da se nabavi neki mikrokontroler koji takav interfejs ima. Postoji više audio DAC integralnih kola koja mogu da se koriste da bi se napravio neki „muzički uređaj”, a mi smo se odlučili za PCM5102 u formi modula. Potrebno je još i neko stereo audio-pojačalo, a mi smo se odlučili za PAM8403, takođe u formi modula, ali bez potenciometara, što će reći bez mogućnosti dodatnog upravljanja jačinom zvuka. Uz ovaj modul smo još koristili ESP32 klasičan dev kit zvučnik i slušalice.

PCM5102

PCM5102 je 112 dB audio stereo DAC sa 32-bitnim, 384 kiloherca PCM interfejsom iza koga stoji Texas Instruments. Ovaj DAC može da se podiči sa niskim Out-of-Band šumom, mogućnošću odabira digitalnog filtera kašnjenja i performansi, internim Pop-Free kontrolom za uzimanje uzoraka i još dosta toga. Može da radi sa 16, 24 i 32-bitnim audio-podacima, koristeći I2S interfejs PCM formata podataka. Kao i velika većina integralnih kola, PCM5102 radi na 3,3 volta.

Modul dolazi sa svim neophodnim komponentama, par headera (header - skup pinova, pin - jedan fizički izvod), ali i 3,5-milimetarskim audio-priključkom na koji mogu da se povežu slušalice. Header za povezivanje sa mikrokontrolerom se sastoji iz nekoliko pinova od kojih neke ne moramo direktno da koristimo. Prvi je SCK koji određuje sistemski radni takt. Zgodno ga je povezati na GND, ili spojiti džamper do njega, te na taj način naterati PCM5102 da sam generiše sistemski radni takt koristeći interni PLL. BCK pin je Audio Data Bit Clock Input za koga smo inače rekli da je to Bit Clock i da se najčešće zapravo označava sa SCK, dok je to ovde nazvano drugačije da ne bi bilo zabune sa SCK sistemskim radnim taktom. I dalje potpuno ispravno. DIN ja Audio Data Input, to jest data line za koga smo rekli da se najčešće označava sa SD. LCK pin je zapravo world select pin za koga smo rekli da se najčešće označava sa WS. Ostaju još VIN i GND za napajanje modula, a zahvaljujući naponskim regulatorima uz otpornike na pinovima interfejsa, može da se koristi i sa petovoltnom naponskom logikom. U skeču ispod imate pinove na koje smo povezali PCM5102 sa ESP32.

Bočni header donosi nekoliko IO pinova, to jest opcija na raspolaganju, kojima možemo da upravljamo mikrokontrolerom ili direktno vezivajući ih za logička stanja. FLT pin je Filter Select i odnosi se na odabir LOW ili HIGH Latency moda. Pin DEMP je de-emphasis kontrola za uzimanje uzoraka na 44,1 kiloherc, sa opcijom uključenja ili isključenja. Soft Mute Control ima izvod na XSMT pinu. Za odabir audio-formata koristi se FMT pin između I2S i Left Justified. Modul ima izvedene A3V3 i AGND ako ugrađeni naponski regulatori ne zadovoljavaju muzičke sladokusce. Na kraju, za slušanje muzike ne moraju da se koriste slušalice. Preko ROUT, AGND i LOUT pinova mogu da se koriste i zvučnici, sa ili bez pojačala.

Ukoliko ne želite da se upetljavate u žice sa ovim IO pinovima kao delom upravljačkog interfejsa PCM5102, ispod pločice se nalaze četiri džampera sa oznakama H1L, H2L, H3L, i H4L. Da bi se ispratilo na šta se koji džamper odnosi, treba pogledati brojeve za svaki od upravljačkih pinova pored samih headera. Tako znamo da se H1L odnosi na FLT, H2L na DEMP, H3L na XSMT i H4L na FMT. Iako bi H strana asocirala na HIGH i suprotno, to ovde nije slučaj, L strana je HIGH i obrnuto. Da bi se modul koristio, nešto se mora odabrati za svaki od džampera. Vrlo mali broj audio snimaka ima pre-emphasis, ako ih uopšte i ima, I2S se podrazumeva, a i normalna kašnjenja. Mi smo sve stavili na logičku nulu, sem XSMT koji je logično morao na HIGH da bi uopšte imali zvuk. Treba voditi računa da se pinovi na headeru ne koriste, ako su polemljeni džamperi ispod, da ne bi došlo do „kurcšlusa”. Na našem modulu morali smo XSMT žicom da povežemo sa 3,3V jer na pločici očigledno nešto nije bilo spojeno kako treba i zvuk nismo mogli da dobijemo spajanjem džampera. Uz skeč o kome će biti reči ispod, dobili smo zvuk sa internet radija preko slušalica. Međutim, mi se ovim nismo zadovoljili.

PAM8403

Da bi se koristili malo jači zvučnici, poput onog o kome je bilo reči u prošlom broju, potrebno je neko pojačalo. PAM8403 stereo audio pojačalo snage tri vata, bez filtera, je „D” klase i dolazi iz Diodes Incorporated. Ovaj komad silicijuma omogućava nizak THD+N (total harmonic distortion and noise), zaštitu od kratkog spoja, zaštitu od pregrevanja i u stanju je da se izbori sa zvučnicima od tri vata, sa četiri oma, pri napajanju od pet volti. Pločica dolazi sa nekoliko manjih headera razdvojenih po nameni. LGR (Left, GND, Right) je header koji povezujemo na izlazne linije LROUT, GND i ROUT na PCM5102. Kao stereo pojačalo, tu su dva audio-izlaza jasno označeni za strane i polaritet. Da bi zvučnici radili, treba im zaseban izvor napajanja od pet volti, preko istoimenog headera. Koristili smo zvučnik od pola vata i osam oma.

ESP32

Ako je sve pospajano kako treba, dovoljno je napisati koju liniju kôda da bi smo dobili zvuk sa zvučnika. Mi smo se odlučili za namensku ESP32 audioI2S biblioteku koju možete preuzeti odavde: i.sk.rs/358983. Na GitHub stranici postoji dosta pojašnjenja, a biblioteka dolazi sa pregršt primera, uključujući i puštanje zvuka sa mikro-SD kartice i drugo. Primer koji smo koristili je direktno preuzet sa GitHuba i prenosimo ga u potpunosti.

#include "Arduino.h"

#include "WiFi.h"

#include "Audio.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       32

 

Audio audio;

 

String ssid =     "• • •• • •• • •• • •";

String password = "• • •• • •• • •• • •";

 

void setup() {

    pinMode(SD_CS, OUTPUT);   

    digitalWrite(SD_CS, HIGH);

    SPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI);

    Serial.begin(115200);

    SD.begin(SD_CS);

    WiFi.disconnect();

    WiFi.mode(WIFI_STA);

    WiFi.begin(ssid.c_str(), password.c_str());

    while (WiFi.status() != WL_CONNECTED) delay(1500);

    audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);

    audio.setVolume(6); // default 0...21

//  or alternative

//  audio.setVolumeSteps(64); // max 255

//  audio.setVolume(63); 

 

//    audio.connecttohost("http://iskatel.hostingradio.ru:8015/iskatel-320.aac"); // aac

//  audio.connecttohost("http://mcrscast.mcr.iol.pt/cidadefm"); // mp3

//  audio.connecttohost("http://www.wdr.de/wdrlive/media/einslive.m3u"); // m3u

  audio.connecttohost("https://stream.srg-ssr.ch/rsp/aacp_48.asx"); // asx

//  audio.connecttohost("http://tuner.classical102.com/listen.pls"); // pls

//  audio.connecttohost("http://stream.radioparadise.com/flac"); // flac

//  audio.connecttohost("http://stream.sing-sing-bis.org:8000/singsingFlac"); // flac (ogg)

//  audio.connecttohost("http://s1.knixx.fm:5347/dein_webradio_vbr.opus"); // opus (ogg)

//  audio.connecttohost("http://26373.live.streamtheworld.com:3690/XHQQ_FMAAC/HLSTS/playlist.m3u8"); // HLS

//  audio.connecttohost("http://eldoradolive02.akamaized.net/hls/live/2043453/eldorado/master.m3u8"); // HLS (ts)

//  audio.connecttoFS(SD, "/test.wav");    // SD

//  audio.connecttoFS(SD_MMC, "/test.wav"); // SD_MMC

//  audio.connecttoFS(SPIFFS, "/test.wav"); // SPIFFS

//  audio.connecttospeech("Wenn die Hunde schlafen, kann der Wolf gut Schafe stehlen.", "de"); // Google TTS

}

 

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_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);

}

Ovde možete da vidite da uz ovaj skeč i modul mikro-SD kartice, zvuk može da se pušta i sa nje. Mi nismo imali mikro-SD modul pri ruci, te ovaj deo preskačemo. U setup funkciji postoji nekoliko parametara koji su interesantni. Prvi je setVolume(), a zvuk na „6” (iz raspona 0-21) je najviše što smo mogli da postignemo, a da izbegnemo distorzije i krčanje. Verovatno bi ceo projekat polemljen na PCB dozvolio i više, ali kod nas su labavi spojevi žica učinili svoje. U nastavku je odabir nekoliko internet stanica, ali i puštanje zvuka sa SD kartice, SD_MMC ili sa SPIFFS-a. Kao opcione, tu je još nekoliko funkcija koje prikazuju određene informacije preko serijskog terminala, kao što su naziv stanice, bitrate, naziv pesme i drugo.

Na kraju - zvuk

U zavisnosti od same stanice, zvuk je dolazio perfektan i bez ikakvih smetnji. Neke od stanica su imale očigledno neke probleme povremeno. Zvuk je bio dobar i preko slušalica, direktno iz PCM5102 modula, i iz PAM8403 pojačala i zvučnika. Za neki konkretni projekat mi bismo predložili mikro-SD modul, jedan potenciometar ili tastere kojima bi se upravljalo jačinom zvuka direktno sa ESP32, par tastera za navigaciju kroz izvore zvuka i na kraju još par (ili jedan dvokanalni) za upravljanje jačinom zvuka na samom PAM8403 pojačalu.

Za šta upotrebiti ovakav projekat? Možemo da napravimo jedan mali internet radio, ili da puštamo muziku sa SD kartice. Naravno, to ne mora da bude muzika, mogu da budu razni zvukovi prilikom određene interakcije. Na izlaz PCM5102 može da se doda i jače pojačalo, sa jačim zvučnicima, i eto rešenja za zabave. Zapravo, uzimajući u obzir da ESP32 ima mogućnost Bluetooth povezivanja, samo je mašta granica. Mi ćemo gledati da Bluetooth pokrijemo u sledećem broju, kao i mikrofon. Do tada, do slušanja.


PRETHODNI TEKST
SLEDEĆI TEKST
Najčitanije
Igre
Telefoni
Hardver
Softver
Nauka
Aktuelno štampano izdanje
MAJ 2025
Microsoft Majorana 1
Kvantna topologija
Topološki kvantni računar otporan je na uticaj kosmičkog zračenja, ali i dalje mora da se ohladi skoro do apsolutne nule...
AMD Ryzen 9 9950X3D
Jedan, da svima vlada
Ako vam je potreban najbrži procesor, i za igranje, i za ozbiljnije zadatke, Ryzen 9 9950X3D nema konkurenciju...
Gigabyte GeForce RTX 5070 Ti Aero OC 16G i GeForce RTX 5070 Ti Gaming OC 16G
I za kreativce, i za igrače
Sasvim sposoban da se nosi sa 4K rezolucijom u svim igrama i pruži sasvim pristojne performanse, dok u 1440p apsolutno blista...
Asus ROG Strix Scar 18 (G835LX)
Fantastična zver i kako je kupiti (3)
Laptop namenjen onima koji „ne žale pare” da imaju ono što je trenutno najbolje i najbrže...
Deset najboljih Microsoft PowerToys alatki
Najbolji od najboljih
PowerToys Run je alatka kojoj treba da se okrenete ukoliko vam sistemska rutina za pretragu ne odgovara...
Apple iPhone 16e
Malo muzike za mnogo para
Problem nije samo cena i slabiji grafički podsistem, već i trajanje baterije...
Cemu 2.6
Wii U emulacija
Cemu omogućava pokretanje i privođenje kraju oko 57 procenata igara „napisanih” za Wii U...
.rs: nove usluge eUprave - novi propisi - najava 5G
Mnogo eNoviteta
U novom esDnevniku roditelji će dobijati notifikacije za ocene i izostanke...
Trgovinski rat Istoka i Zapada
Velika igra, nesagledive posledice
Kao u igri „kukavice”, dve supersile kreću se velikom brzinom jedna prema drugoj, izazivajući drugu da prva skrene...
Blue Prince
Jedinstveni dijamant i jedna od najoriginalnijih igara u poslednjih nekoliko godina...
Tempest Rising
Skupa i ambiciozna fotokopija legendarnog RTS klasika Command & Conquer...
South of Midnight
Magična igra koja izgleda kao živa bajka, animirana u stilu filmskog serijala „Spiderverse”...
© 2025 Svet kompjutera. Sva prava zadrzana.
Novi broj - Arhiva - Forum - O nama