El maker jayesh_nawani armó un asistente de voz con IA completo sobre una placa ESP32 estándar, sin hardware adicional complejo. El sistema escucha con un micrófono I2S, graba la voz, la transcribe con la API Whisper de OpenAI, genera una respuesta con GPT y la reproduce por un amplificador y un parlante. Mientras tanto, una pantalla OLED anima dos ojos expresivos que siguen el estado de la conversación, según la reseña que publicó Open Electronics el 30 de septiembre.
Todos los detalles están en la página del proyecto en Hackster.io. Los componentes son comunes, una placa de desarrollo ESP32, un amplificador MAX98357A, una pantalla OLED de 0,96 pulgadas, un micrófono I2S y un parlante de 3 W. Open Electronics sugiere la placa ESP32-C6-Zero como alternativa compacta para quien quiera partir de una base más moderna, aunque el proyecto original usa la Development Board clásica.
Cómo funciona el ciclo principal
El ciclo principal escucha de forma continua el micrófono I2S. Cuando detecta un pico de volumen sostenido sobre el umbral de 1.000, empieza a grabar. La grabación sigue hasta que detecta silencio (umbral de 200 con una espera de 1.000 ms) o hasta un máximo de 2 segundos. Luego el audio se empaqueta como archivo WAV y se envía a la API Whisper para transcribirlo.
La transcripción pasa a la API Chat Completions de GPT, que genera una respuesta conversacional. Ese texto va a la API de síntesis de voz (TTS), y el audio PCM que devuelve se envía al amplificador I2S a medida que llega. El muestreo del micrófono corre a 16.000 Hz y la síntesis de voz a 24.000 Hz, con bloques de 512 bytes y una velocidad de habla de 0,85.
La pantalla OLED corre en una tarea aparte de FreeRTOS en el núcleo 0, dedicada a animar los ojos y mostrar el estado del sistema. El resto del proceso corre en el núcleo 1. Esa separación evita que las llamadas HTTP bloqueantes frenen la animación, así que los ojos se mueven con fluidez mientras el asistente escucha y responde.
Los problemas técnicos que resolvió
La fragmentación del heap es de los más difíciles. Cada llamada a las API de OpenAI necesita memoria contigua, así que el código libera un bloque de 32 KB antes de cada petición para que las bibliotecas HTTP tengan espacio. Sin esa precaución, las llamadas fallan al azar.
Otro es el manejo de las llamadas HTTP bloqueantes. En un ESP32, una petición a una API puede detener el ciclo principal durante segundos. La solución fue usar los dos núcleos, uno para la lógica y otro para la animación.
La depuración del hardware fue sistemática. Cada componente se probó por separado antes de integrarlo todo, y el micrófono, por ejemplo, se verificó con un osciloscopio antes de conectarlo al amplificador.
¿Qué se necesita para replicarlo?
Para reconstruir el proyecto, la protoboard es el punto de partida. Las conexiones son simples:
- Micrófono I2S en los GPIO 14, 15 y 32
- Amplificador MAX98357A en los GPIO 26, 25 y 22
- Pantalla OLED en los GPIO 21 y 19
Una pantalla OLED de 0,96 pulgadas y 128 x 64 píxeles como la del proyecto sirve para los ojos animados por su resolución y su contraste.
El código usa el Arduino IDE con las bibliotecas ArduinoJson, Adafruit_GFX y Adafruit_SSD1306. Estos son los parámetros de audio que trae configurados:
- Umbral de activación de 1.000, umbral de silencio de 200 y espera de 1.000 ms
- Tres bloques consecutivos para validar una muestra mínima de 0,6 segundos
- Grabación máxima de 2 segundos, en bloques de 512 bytes
- Muestreo a 16.000 Hz y síntesis de voz a 24.000 Hz
Los valores están ajustados para un ambiente doméstico y se pueden cambiar sin dificultad.
Sin Raspberry Pi ni computador aparte
El proyecto muestra que un asistente de voz con IA completo puede correr sobre un ESP32 simple, sin una Raspberry Pi ni un computador dedicado. La combinación de Whisper, GPT y TTS funciona en tiempo real con una latencia aceptable, según Open Electronics. Todo el procesamiento de lenguaje ocurre en los servidores de OpenAI, así que la placa necesita WiFi y una clave de la API.
Los ojos animados en la OLED le dan personalidad al dispositivo, y la tarea dedicada de FreeRTOS muestra cómo aprovechar los dos núcleos del ESP32. El proyecto es de código abierto.
Variantes posibles
Para el audio, un amplificador de código abierto como ANGELO puede reemplazar al MAX98357A con un diseño modular. Un amplificador estéreo TDA7297 sirve si se quiere pasar a dos canales. La elección depende de la potencia necesaria y del espacio disponible.
Open Electronics propone además agregar reconocimiento de órdenes personalizadas, una pantalla más grande o sensores ambientales.





