La librería PCMFlow722 de Tanaka Masayuki habilita voz HD bidireccional half-duplex sobre ESP-NOW en placas ESP32 con altavoz y micrófono, transformándolas efectivamente en walkie-talkies.

La librería implementa un add-on del códec wideband G.722 sobre PCMFlow, una librería ligera de decodificación de audio y flujo PCM para Arduino que ya soporta PCM sin comprimir, MP3 y FLAC. PCM y FLAC consumen demasiado ancho de banda sobre ESP-NOW, y MP3 no es adecuado para audio en tiempo real, así que el autor eligió el viejo G.722.

¿Por qué importa "HD voice" en ESP-NOW?

La voz bidireccional sobre ESP-NOW se había implementado antes en proyectos como el esp32-walkie-talkie de Atomic14 (hace 5 años) y, más recientemente, el Walkie-Talkie ESP-NOW de Adafruit, pero típicamente con G.711 de menor calidad o audio comprimido.

La librería PCMFlowG722 eleva la vara entregando "audio de 7 kHz a 16 kHz de muestreo usando el mismo presupuesto de 64 kbps de G.711, mismo tamaño de paquete, doble ancho de banda de audio", según explica Tanaka.

Comparativa de códecs: G.711 vs G.722 vs Opus

CaracterísticaPCMFlowG711PCMFlowG722 (esta lib)PCMFlowOpus
Banda de audionarrowband (8 kHz / ≤ 3,4 kHz)wideband (16 kHz / ≤ 7 kHz)narrow / wide / fullband (8-48 kHz)
Bitrate (voz)64 kbps fijo64 kbps fijo (Modo 1)16-32 kbps típico
Compresión vs PCM 16-bit10-15×
Flash del códec< 4 KB~10 KB~150-180 KB
CPU del códecnegligiblebajono trivial en MCUs M0/M3
Patente / licencianinguna (estándar 1972 expirado)ninguna (estándar 1988 expirado, núcleo dominio público)royalty-free, BSD-3-Clause
Calidadtelefonía toll-gradeHD voice (telefonía wideband)wideband / fullband, mucho mejor

Opus ofrece menor ancho de banda y calidad full-band, pero G.722 es menos complejo y exige menos recursos (CPU y almacenamiento). También calza bien con ESP-NOW, ya que el protocolo lleva payloads de hasta 250 bytes, y un frame de voz de 20 ms en G.722 a 16 kHz produce 160 bytes, lo mismo que G.711, pero con el doble de ancho de banda. PCM crudo mono de 16 kHz a 16 bits requeriría 640 bytes, así que G.722 comprime cuatro veces.

Vista del proyecto EspNowTransceiver basado en M5Stack Core2
Vista del proyecto EspNowTransceiver basado en M5Stack Core2

¿Cómo se prueba en una placa propia?

La librería implementa un encoder G.722 que comprime PCM 16 kHz y un decoder que hace el camino inverso. Si querés probarla en tu propia placa, el sketch Arduino EspNowTransceiver.ino es probablemente lo que buscás. Es un transceptor half-duplex HD-voice sobre ESP-NOW, y el mismo firmware actúa como emisor y receptor.

Tanaka la probó en placas M5Stack Core2, con SoC ESP32, 8 MB PSRAM, 16 MB de flash SPI, una pantalla pequeña de 2 pulgadas que muestra el canal ESP-NOW, un altavoz de 1 W (1W-0928) y un micrófono SPM4123. Mientras se mantiene presionado el botón A, el audio se transmite por ESP-NOW a uno o más dispositivos Core2; en cualquier otro caso, los dispositivos quedan como receptores.

Disponibilidad para makers chilenos

Para quienes quieran replicarlo en Chile, el ESP32 y módulos como M5Stack Core2 se consiguen vía distribuidores locales o MercadoLibre con precios entre CLP 25.000 y CLP 60.000 según el formato. El micrófono SPM4123 y altavoces de 1 W están disponibles en tiendas de electrónica como MechatronicStore y similares. La librería es código abierto bajo el repositorio de GitHub de Tanaka y no requiere licencias de pago: el códec G.722 es un estándar de 1988 con patentes expiradas y su núcleo está en dominio público.

Vía Adafruit.