Los días modernos se están volviendo grises debido al sobreconsumo de contenido en redes sociales y la dependencia de herramientas de IA. Especialmente para las próximas generaciones.
Crowbot surge como un contrapunto a esta tendencia: un asistente de voz IoT que reimagina la IA como una fuerza positiva para el desarrollo infantil. Al crear un compañero de aprendizaje interactivo y con voz, Crowbot ayuda a los niños a desarrollar habilidades de comunicación genuinas, fomenta la curiosidad a través de la educación conversacional y proporciona una alternativa saludable a las interacciones pasivas basadas en pantallas.
- Niños de 5-12 años curiosos.
- Educadores que buscan herramientas de enseñanza innovadoras.
- Padres que desean complementar métodos de aprendizaje tradicionales.
[Dispositivo Local / IoT] <--> Broker MQTT <--> [Servidor] <--> API HTTP <--> [Aplicación Web]
| | |
v v v
[Grabación de Audio] --> [STT] --> [LLM] --> [TTS] --> [Reproducción]
| |
+--> Prueba Local (cmd/local) |
+--> Prueba MQTT (test_mqtt.sh)
- Broker MQTT
- Backend MQTT
- Pruebas Locales
- Simulación de Flujo de Trabajo
- Configuración Esp32 con sensores (micrófono, amplificador y altavoz)
- Persistencia de Base de Datos
- API Backend HTTP ApiRest
- Visualizador de Dashboard de Aplicación Web Frontend
- Grabador Local (
internal/utils/local_recorder.go): Maneja la grabación de audio desde el micrófono, guarda en WAV y activa el procesamiento. - Orquestador Local (
internal/core/local_orchestrator.go): Coordina la canalización STT → LLM → TTS para procesamiento local. - Orquestador (
internal/core/orchestrator.go): Orquestador general para procesamiento basado en MQTT. - Cliente MQTT (
internal/mqtt/client.go): Maneja conexiones MQTT, publicación y suscripción para procesamiento distribuido. - Servicios:
- GCP STT (
internal/services/gcp_stt_service.go): Convierte audio a texto usando Google Speech-to-Text. - Gemini LLM (
internal/services/gemini_service.go): Procesa prompts de texto y genera respuestas. - GCP TTS (
internal/services/gcp_tts_service.go): Convierte respuestas de texto a audio y maneja la reproducción.
- GCP STT (
- Grabación: El usuario presiona 'R' para iniciar/detener la grabación vía PortAudio.
- Procesamiento de Audio: Los chunks PCM crudos se recopilan y guardan como
local_record.wav. - STT: El archivo WAV se envía a Google STT (español), devuelve texto transcrito.
- LLM: El texto se envía a Gemini con prompt del sistema, devuelve texto de respuesta.
- TTS: El texto de respuesta se sintetiza a audio (voz en español).
- Reproducción: El audio se reproduce vía PortAudio, y se guarda como
local_response.wavpara depuración.
- Codificación de Audio: Divide el audio grabado en chunks (ej. segmentos PCM de 1 segundo), codifica a base64.
- Publicación MQTT: Envía chunks a tópicos MQTT (
/device/audio/start,/device/audio/chunk,/device/audio/end). - Procesamiento del Servidor: El servidor MQTT se suscribe, reensambla el audio, ejecuta STT/LLM/TTS, divide la respuesta en chunks.
- Suscripción MQTT: El cliente recibe chunks de respuesta de
/device/{device_id}/audio/response_chunk, decodifica, reensambla y reproduce. - Gestión de Chunks: Usa números de secuencia y conteo total para ordenar.
- Go 1.25.1+
- Credenciales de Google Cloud
- Variables de entorno:
GEMINI_API_KEY: Tu clave de API de GeminiPROMPT: Prompt del sistema para el LLM (ej. "Eres un asistente útil.")
- Dependencias: Instala con
go mod tidy - Para MQTT: Broker Mosquitto (ver
infra/mosquitto/mosquitto.conf)
go run cmd/local/main.go- Presiona 'R' luego Enter para iniciar la grabación.
- Habla en español.
- Presiona 'R' de nuevo para detener y procesar.
- El audio de respuesta se reproduce automáticamente.
go run cmd/mqtt/main.go
``` - Inicia el servidor MQTT escuchando en `tcp://localhost:1883`. Procesa chunks de audio de dispositivos y envía respuestas de vuelta.
### Probando MQTT
Usa el script de prueba proporcionado:
```bash
./test_mqtt.sh test.wav [broker] [port]- Convierte
test.wava chunks, envía vía MQTT, recibe y reproduce respuesta.
local_record.wav: Audio grabado (modo local).local_response.wav: Respuesta sintetizada (modo local).combined.pcm: Audio de respuesta reensamblado (modo MQTT).
Esta configuración permite escalar a múltiples dispositivos IoT mientras mantiene respaldo local. README.md

