PROTOTYPE

HIOS WiFi Speaker

Parlante WiFi + Bluetooth con ESP32: **2× amplificador I2S MAX98357 en estéreo**, display LCD 16×2 y batería 2S recargable por USB-C. Reproduce radios WiFi, audio de YouTube (vía Invidious) y actúa como sink Bluetooth A2DP, con control por interfaz web.
1 / 6
The Moment

"The first test tone playing through WiFi. No cables, no noise, just music."

Setting up I2S with the MAX98357 was easier than the PCM5102, but WiFi streaming has its own challenges. Buffer underrun, latency, automatic reconnection...

HIOS WiFi Speaker

Parlante WiFi + Bluetooth con ESP32: 2× amplificador I2S MAX98357 en estéreo, display LCD 16×2 y batería 2S recargable por USB-C. Reproduce radios WiFi, audio de YouTube (vía Invidious) y actúa como sink Bluetooth A2DP, con control por interfaz web.

Quick Start

cd projects/speaker
pio run -t upload             # compilar y flashear (PlatformIO)
pio device monitor -b 115200  # monitor serial

¿Qué es?

Un hub de audio de escritorio. Modos (enum Mode en src/main.ino):
  • WiFi Radio — streams de radio (presets + URL custom).
  • YouTube — audio de YouTube vía la API de Invidious.
  • Bluetooth A2DP — sink: le mandás audio desde el celu/PC.
  • Config por BT serial — seteás el WiFi desde una terminal Bluetooth, sin recompilar.
Todo sale por I2S a los dos MAX98357 (estéreo real, un ampli por canal). El LCD muestra modo, volumen y título.

Cableado

La hoja verificada contra el firmware es la guía /pinouts/speaker (se auto-verifica contra src/main.ino en cada npm run test:wiring). Resumen:
BusESP32A
I2S DINGPIO25DIN de ambos MAX98357 (bus compartido)
I2S BCLKGPIO26BCLK de ambos
I2S LRCGPIO27LRC de ambos
I2C SDA / SCLGPIO21 / GPIO22LCD 16×2 (0x27)
VBATGPIO34divisor 100k/100k del pack (IO34 es input-only)
5V / GNDVIN / GNDdel LM2596 (buck a 5.0V)
El canal L/R lo elige el pin SD de cada ampli — MEDÍ, no asumas. El bus I2S es compartido; lo único distinto entre los dos módulos es SD. Left = SD→Vin (medí >1,4V); Right = SD→Vin por ~220–330k (medí 0,77–1,4V). Ver el paso "medir SD" en la guía. El viejo dato "1MΩ→GND=Left" es datasheet-dudoso: no lo uses.

Componentes (BOM)

Estéreo, pack 2S:
ComponenteFunciónSpecs clave~USD
ESP32 DevKit (WROOM-32)Micro + WiFi + BTsolo 2.4GHz$8
MAX98357Ampli I2S (L + R)3.2W @4Ω, clase D, 2.5–5.5V, THD+N 0.015%$6
parlante 63mmSalida (L + R)4Ω, 3W, 87dB, F0 ~135Hz$6
LCD 16×2 + backpack I2CDisplay de estadoHD44780, 0x27 (a veces 0x3F), 5V$4
LM2596S c/displayBuck 5.0V1.25–37V ajust., ~3A c/disipador, ~95%$4
Cargador 2S USB-CBMS + carga8.4V full, 2.2A carga, requiere 5V/4A$5
18650 (serie/2S)Batería7.4V nom → 8.4V full$12
Resistencias2× 100k (divisor VBAT) · 1 R para SD (valor medido)
⚠️ Batería en SERIE (2S), no en paralelo. El pack es 7.4V nominal (8.4V a plena carga) y el cargador USB-C es 2S. Un portapilas en paralelo (3.7V) es de una versión vieja y no sirve acá.
Compra (AR/MercadoLibre): "esp32 devkit v1" · "max98357 i2s amplificador" (×2) · "lcd 16x2 i2c" · "fuente lm2596 step down display" · "cargador litio 2s usb-c" · "porta pila 18650 serie" · "parlante 4 ohm 3w 63mm" (×2).

Armado (el orden importa)

Cada fase se prueba antes de pasar a la siguiente:
  1. Energía primero. Cargá el pack 2S, conectá al LM2596 y ajustá el buck a 5.0V con el multímetro. NO conectes nada más hasta tener 5V estables.
  2. ESP32 — OUT+ del buck → VIN, OUT− → GND. Probá un Blink por USB.
  3. Amplis (×2) — Vin→5V, GND→masa común, bus I2S (25/26/27) a los dos. Parlante 4–8Ω directo a la salida de cada ampli (class-D filterless, sin filtro).
  4. LCD — VCC→5V, GND, SDA=21 / SCL=22.
  5. Firmwaretests/test_basic.ino (debe dar un tono) → después src/main.ino.
Soldadura: 350–380°C con plomo (380–400 sin), contacto 2–3s, estañá puntas y pads primero. Antes de encender: continuidad de GND (0Ω entre todas las masas), sin corto VIN↔GND (∞), buck a 5.0V. Fotos de referencia en pics/build/ y pics/modules/.

Troubleshooting (aprendido a los golpes)

  • Se reinicia al usar WiFi: los picos de TX piden ~500mA → cap 470µF en la entrada del ESP32 (y ojo con cable USB fino / fuente floja = brownout).
  • Zumbido / ruido: una sola masa (no cablees el GND del ESP32 y del ampli por separado = ground loop); 100nF cerámico + 100µF electrolítico cerca de cada MAX98357; alejá el ampli de la antena; ferrita en los cables de audio; I2S corto (<10cm) y trenzado.
  • Distorsión: buck a 5V estables; bajá el volumen (el MAX98357 satura con señal muy fuerte).
  • Sale un solo canal: SD mal seteado en un ampli → medí SD, no asumas la R.
  • WiFi no conecta: el ESP32 es solo 2.4GHz. El voltaje del display del LM2596 es la salida (5V), no la batería.
Consumo típico: idle ~80mA · reproduciendo ~150mA · volumen máx ~300mA. La autonomía depende de la capacidad de las celdas.

Estado

En desarrollo — prototipo funcional. Firmware andando: WiFi radio, YouTube/Invidious, BT A2DP, config por BT serial, LCD y lectura de VBAT. Pendiente: PCB custom.

Licencia

Open Hardware — usá, modificá y compartí libremente.

HIOS — HI Open Systems · openhios.dev/projects/speaker

Specifications

AudioI2S digital, 44.1kHz 16-bit
AmplifierMAX98357A, 3.2W @ 4Ω
ConnectivityWiFi 802.11 b/g/n
Battery7.4V 5000mAh (2x18650)
Battery Life8-16 hours estimated
ControlWeb interface, mDNS

Bill of Materials (BOM)

ComponenteCant.PrecioNotas
ESP32 DevKit V11$8WiFi + Bluetooth
MAX98357 I2S Amp2$63W Amplifier x2 (stereo)
LM2596S w/Display1$4Adjustable 5V supply
18650 Battery2$12Li-Ion 3500mAh
USB-C Charger 2S1$5BMS with protection
Speaker 63mm 4Ω 3W1$3Full range speaker
Approximate Total$56 USDShipping not included
Coming Soon
Real audio streaming (HTTP/WebSocket)
Spotify Connect
AirPlay compatible
Multi-room sync
Android control app
Web equalizer
OTA updates
What Works
  • I2S Audio — digital quality, no noise
  • Web control — from any device
  • USB-C battery — fast charging
  • Voltage display — always visible
  • mDNS — access by name, not IP
What Needs Improvement
  • Real streaming — only test tone for now
  • No case — exposed electronics
  • WiFi range — depends on router

Want one?

Build it yourself. It's yours now.<br/>All code, schematics, and instructions are available.

Project Toolbox

Archivos técnicos listos para flujo embebido diario: abrir, descargar o visualizar por tipo.
Documentación
ASSEMBLY.md
public
COMPONENTS.md
public
HIOS_Speaker_Soldering_Guide.md
public
HIOS_Speaker_Soldering_Guide.pdf
source
HIOS_Speaker_Soldering_Guide.pdf
public
PINOUT.md
public
README.md
source
README.md
public
TROUBLESHOOTING.md
public
Firmware / Config
platformio.ini
source
src/main.ino
source
tests/test_basic.ino
source
Functional prototype. Build your own.
Want me to build it for you? Email me