PCMFlow722: audio HD in tempo reale su ESP-NOW con codec G.722 per ESP32
Lo sviluppatore Tanaka Masayuki ha rilasciato PCMFlow722, una libreria che abilita la comunicazione audio bidirezionale (half-duplex) in tempo reale su ESP-NOW per schede ESP32, trasformandole di fatto in walkie-talkie con qualità voce HD.
Come funziona
La libreria implementa un codec G.722 come estensione per PCMFlow, la libreria lightweight di decode audio e flusso PCM per Arduino. PCM e FLAC richiedono troppa larghezza di banda su ESP-NOW, mentre MP3 non è adatto alla trasmissione in tempo reale. La scelta è caduta sul codec G.722, uno standard del 1988 con brevetti scaduti, che offre un eccellente compromesso tra qualità e risorse.
G.722 consente audio a 7 kHz con campionamento a 16 kHz utilizzando lo stesso budget di banda di G.711 (64 kbps) — stesse dimensioni dei pacchetti, ma il doppio della larghezza di banda audio.
Confronto con alternative
La tabella comparativa evidenzia i vantaggi di G.722 rispetto ad altre opzioni:
- G.711: banda stretta (8 kHz, ≤3.4 kHz), qualità da telefonia tradizionale, footprint minimo
- G.722: banda larga (16 kHz, ≤7 kHz), voce HD, compressione 4× rispetto a PCM grezzo, ~10 KB di footprint
- Opus: qualità superiore ma richiede 150-180 KB di flash e CPU non trascurabile su MCU classe M0/M3
Opus offre compressione maggiore e qualità fullband, ma G.722 è meno complesso e richiede meno risorse CPU e storage. Inoltre, ESP-NOW trasporta payload fino a 250 byte, e un frame vocale G.722 da 20 ms a 16 kHz produce 160 byte — lo stesso di G.711 ma con il doppio della larghezza di banda.
Implementazione pratica
La libreria include un encoder G.722 che comprime PCM a 16 kHz e un decoder per la decompressione. Lo sketch EspNowTransceiver.ino è il punto di partenza consigliato: implementa un ricetrasmettitore half-duplex dove lo stesso firmware funge sia da trasmettitore che da ricevitore.
I test sono stati condotti su schede M5Stack Core2 con SoC ESP32, 8 MB PSRAM, 16 MB flash SPI, display da 2 pollici, altoparlante da 1W e microfono SPM4123. Tenendo premuto il pulsante A, l’audio viene trasmesso via ESP-NOW a uno o più dispositivi Core2. In tutti gli altri casi, i dispositivi si comportano come ricevitori audio.
Disponibilità
PCMFlow722 è disponibile su GitHub di Tanaka Masayuki ed è compatibile con Arduino IDE, perfetto per progetti di comunicazione vocale embedded, sistemi di interfono, e applicazioni IoT che richiedono audio di qualità senza dipendere da connessioni internet o server centralizzati.