Passthrough PCM1808 → PCM5102A
Questa versione funziona: i test hanno dato esiti positivi, ma ci sono ancora alcune migliorie da fare.
Il firmware è un passthrough audio: il PCM1808 legge l'ingresso analogico, l'ESP32 lo inoltra via I²S al PCM5102A e stampa i livelli sulla seriale.
src/main.cpp
- Due driver I²S indipendenti, entrambi master a 48 kHz, 32 bit, stereo, formato I²S standard:
- INPUT (
I2S_NUM_0, RX) dal PCM1808: BCK GPIO 2, LRCK GPIO 15, dati GPIO 16, MCLK GPIO 0. - OUTPUT (
I2S_NUM_1, TX) verso il PCM5102A: BCK GPIO 26, LRCK GPIO 33, DIN GPIO 21 (nessun MCLK, il PCM5102A lo ricava dal BCK).
- INPUT (
loop()legge 512 campioni dal PCM1808, applica un volume digitale fisso del 50% (audioBuffer[i] /= 2) e scrive il buffer sul PCM5102A, gestendo le scritture parziali.- Ogni 300 ms calcola il valore RMS in dBFS per canale (campioni portati a 24 bit) e stampa sulla seriale (115200 baud) una barra di livello a 30 caratteri.
checkError()ferma il firmware con un messaggio se l'installazione di un driver I²S o la configurazione dei pin fallisce.- Non sono presenti Bluetooth A2DP, display OLED e spettro.
platformio.ini
- Piattaforma
espressif326.10.0, framework Arduino, nessuna libreria esterna: il firmware usa solo il driverdriver/i2s.hdi ESP-IDF. upload_portemonitor_portsono su/dev/cu.SLAB_USBtoUART(porta macOS): su altre macchine vanno adattate.
File rimossi
lib/ESP32-A2DP-main/: copia locale della libreria Bluetooth, non usata dal firmware. Reintegrando A2DP si potrà riaggiungere come dipendenza diplatformio.ini.include/README,lib/README,test/README: testi standard di PlatformIO, non servono.src/._main.cpp: metadato macOS, già ignorato da git.
Schema elettrico
Le specifiche delle schede, ricevute il 21/10/2026, sono nello schema elettrico. Il PCM5102A è già collegato come previsto (GPIO 26, 33, 21); il PCM1808 invece nello schema condivide BCK (GPIO 26) e LRCK (GPIO 33) con il DAC e ha DOUT su GPIO 35, mentre il firmware usa GPIO 2, 15 e 16 su una porta I²S separata. Lo schema aggiunge anche il display (DC GPIO 19, RST GPIO 4) e un relè di selezione dell'uscita su GPIO 27.
Test
- Il segnale in ingresso al PCM1808 arriva sull'uscita del PCM5102A.
- I livelli stampati sulla seriale seguono il segnale.
- Esiti positivi.
Migliorie da fare
- Il volume è fisso al 50% e fatto con una divisione intera: renderlo configurabile.
- Il passthrough è bloccante nel
loop(): valutare un task dedicato su un core. - Misurare con più calma latenza, rumore di fondo e risposta in frequenza.
upload_port/monitor_portsono specifici di macOS.- Aggiungere un controllo sul rilevamento di clipping in ingresso.
Prossimi passi
- Applicare le migliorie sopra.
- Adattare il firmware allo schema elettrico: I²S condiviso tra ADC e DAC, PCM1808 su GPIO 26/33/35, comando del relè.
- Reintegrare Bluetooth A2DP come seconda sorgente.
- Reintegrare lo spettro su display OLED.