Construí un asistente de voz portátil ESP32 con conversión de voz a texto real, respuestas de IA, emociones OLED y salida de audio PCM.
¡Hola a todos! Estoy trabajando en un pequeño proyecto DIY llamado Oracle OS, un asistente de voz portátil tipo escritorio, basado en un ESP32.
El objetivo es crear un asistente diminuto que parezca vivo: puede escuchar a través de un micrófono, enviar el audio a un servidor web, procesarlo con IA, responder mediante un altavoz y mostrar expresiones en una pequeña pantalla OLED.
La configuración actual utiliza:
- ESP32-WROOM
- Pantalla OLED I2C de 0,96 pulgadas
- Módulo de micrófono MAX4466
- Amplificador PAM8403
- Altavoz pequeño de 4 ohmios
- Botón pulsador para la función pulsar para hablar
- WiFiManager para la configuración de Wi-Fi
- Backend FastAPI alojado en el renderizador
- AssemblyAI para la conversión de voz a texto
- Modelo Groq/Llama para las respuestas de la IA
- VoiceRSS para la conversión de texto a voz
- Audio PCM de 8 bits transmitido de vuelta al ESP32
- Salida DAC del ESP32 en GPIO25
La parte más difícil hasta ahora ha sido la salida de audio. Probé con MP3, WAV, SAM (voz local) y varias librerías de audio para ESP32, pero la mayoría producían un ruido similar al de un zumbador a través del PAM8403. La solución que finalmente funcionó fue convertir el audio TTS a PCM de 8 bits sin procesar y luego transmitirlo directamente al ESP32, donde lo reproduzco con dacWrite() a través del GPIO25. Actualmente, el asistente puede:
- Grabar mi voz mientras mantengo presionado un botón
- Enviar el audio al servidor
- Transcribir el habla
- Generar una respuesta breve con IA
- Mostrar la respuesta en la pantalla OLED
- Reproducir la respuesta a través del altavoz
- Mostrar ojos y expresiones animadas
- Mostrar un reloj/modo de escritorio
- Abrir un menú sencillo en la pantalla OLED
- Ejecutar minijuegos como Dino Jump y Reflex
- Reiniciar el Wi-Fi mediante el botón al encender el dispositivo
Aún es un prototipo, pero finalmente funciona.
Me encantaría recibir comentarios de la comunidad sobre:
- Mejores maneras de reducir el ruido de audio del DAC ESP32 al PAM8403
- Mejores ideas de filtrado usando solo componentes básicos
- Mejorar las animaciones y la "personalidad" de la pantalla OLED
- Simplificar el sistema de menús con un solo botón
- Hacer que el backend sea más rápido y ligero
- Si debería migrar a ESP32-S3 con PSRAM más adelante
- Mejores ideas para una carcasa compacta para el escritorio
Intento mantener el proyecto económico y construirlo principalmente con piezas que ya tengo. Cualquier consejo, crítica o idea para futuras actualizaciones sería de gran ayuda.
Seguiré actualizando el proyecto a medida que mejore el audio, las animaciones, la carcasa y las funciones.
¡Gracias!