Palabra clave: HARDWARE
Construye tu Alexa casera con Raspberry Pi, LM Studio y Claude Code
Un asistente de voz que se despierta con una palabra y responde con un modelo que corre en tu ordenador. Material, CLAUDE.md y los prompts fase a fase.
En el reel viste cómo Claude Fable 5.2 diseñó aparatos reales, desde la placa hasta el firmware. Aquí haces tú lo mismo a escala de casa: un asistente de voz que se despierta con una palabra, entiende lo que le dices y te contesta con un modelo que corre en tu propio ordenador, sin nube. Claude Code escribe y prueba el código contigo, paso a paso.
Nivel: no hace falta saber electrónica ni Python. Hace falta paciencia para ir fase a fase y probar cada pieza antes de pasar a la siguiente. Tiempo orientativo: una tarde para tenerlo hablando y otra para dejarlo fino.
1. Qué vas a construir
La Raspberry Pi hace de oído y boca, y tu ordenador con LM Studio hace de cerebro. Así la Pi no tiene que mover un modelo grande y las respuestas salen rápidas.
- Palabra de activación (openWakeWord): la Pi escucha todo el rato, pero solo «despierta» cuando oye la palabra, por ejemplo «Alexa» o «Hey Jarvis».
- Transcripción (faster-whisper): convierte lo que dices en texto, en la propia Pi.
- Cerebro (LM Studio en tu PC): recibe el texto por la red local y responde con el modelo que tengas cargado.
- Voz (Piper): convierte la respuesta en audio con una voz en español, también en la Pi.
- Altavoz: reproduce la respuesta y vuelve a esperar la palabra.
Nada sale de tu casa: el audio, el texto y las respuestas se quedan entre la Pi y tu ordenador.
2. Material
| Pieza | Qué elegir | Notas |
|---|---|---|
| Placa | Raspberry Pi 5 (4 u 8 GB) | Una Pi 4 de 4 GB también sirve, pero transcribe más lento. |
| Almacenamiento | microSD de 32 GB o más (clase A2) | Un SSD por USB o NVMe va más rápido, pero no es obligatorio. |
| Alimentación | Fuente oficial de la Pi (27 W en la Pi 5) | Con fuentes flojas aparecen cortes y errores raros de audio. |
| Refrigeración | Disipador con ventilador (Active Cooler) | La transcripción pone la CPU al 100 % unos segundos. |
| Micrófono | Micrófono USB, o un altavoz de conferencias USB (micro + altavoz en uno) | El altavoz de conferencias es la opción más sencilla: un solo cable y suele traer cancelación de eco. |
| Altavoz | Altavoz USB o con Bluetooth | La Pi 5 no tiene salida de audio de 3,5 mm; la Pi 4 sí. |
| Extras (opcional) | Un pulsador, un LED o una tira de LEDs y unos cables dupont | Para hablar pulsando un botón y para ver en qué estado está. |
| El cerebro | Tu PC o Mac con LM Studio | Con una GPU de 8 GB o más irá fluido. Sin GPU funciona con modelos pequeños, pero más lento. |
3. Prepara la Raspberry Pi
- Descarga Raspberry Pi Imager en tu ordenador y graba Raspberry Pi OS Lite (64-bit) en la microSD.
- Antes de grabar, abre los ajustes del Imager y configura: nombre del equipo (por ejemplo
asistente), usuario y contraseña, tu WiFi y activar SSH. - Mete la tarjeta, conecta el micro y el altavoz y enciende la Pi. Espera un par de minutos.
- Desde la terminal de tu ordenador, entra en la Pi:
ssh tu_usuario@asistente.local
Ya dentro de la Pi, actualiza el sistema e instala lo básico:
sudo apt update && sudo apt full-upgrade -y sudo apt install -y git python3-venv python3-dev portaudio19-dev alsa-utils
Comprueba que la Pi ve tu micro y tu altavoz, y haz una grabación de prueba:
arecord -l # lista los micrófonos aplay -l # lista los altavoces arecord -f S16_LE -r 16000 -c 1 -d 5 prueba.wav aplay prueba.wav
Si no oyes nada, no sigas todavía: el resto depende de que esto funcione. En el paso 6, el primer prompt le pide a Claude Code que lo resuelva contigo.
4. Prepara LM Studio en tu ordenador
- Instala LM Studio y descarga un modelo «instruct» de entre 4 y 8 B de parámetros que quepa en tu GPU (Qwen, Llama, Gemma o Mistral). LM Studio te avisa de si cabe.
- Ve a la pestaña Developer y carga el modelo.
- Arranca el servidor (Start Server). Por defecto escucha en el puerto
1234. - En los ajustes del servidor, activa Serve on Local Network. Sin esto, la Pi no puede hablar con tu ordenador.
- Apunta la IP de tu ordenador en la red local (en Windows,
ipconfig; en Mac, Ajustes → Red). Lo ideal es fijarla en el router para que no cambie.
Desde la Pi, comprueba que llega:
curl http://192.168.1.50:1234/v1/models
Si devuelve una lista con tu modelo, el cerebro está listo. Si se queda colgado, casi siempre es el cortafuegos de Windows: permite LM Studio en redes privadas.
5. Instala Claude Code en la Pi
Vas a trabajar con Claude Code dentro de la propia Pi, conectado por SSH. Así puede ejecutar el código, escuchar el micro y probar cada pieza de verdad, no solo escribirla. Necesitas una cuenta de Claude (Pro o superior) o una API key.
curl -fsSL https://claude.ai/install.sh | bash mkdir -p ~/asistente && cd ~/asistente claude
La primera vez te pedirá iniciar sesión: te da un enlace que abres en el navegador de tu ordenador.
6. El CLAUDE.md del proyecto
Antes del primer prompt, crea este archivo en ~/asistente/CLAUDE.md. Es la memoria del proyecto: Claude Code lo lee en cada sesión y así no tienes que repetirle las reglas. Cambia la IP y el micro por los tuyos.
# Asistente de voz casero Asistente de voz en español que corre en una Raspberry Pi 5 y usa como cerebro un modelo local servido por LM Studio en otro ordenador de la red. ## Hardware - Raspberry Pi 5, Raspberry Pi OS Lite 64-bit, acceso por SSH. - Micrófono: [modelo, p. ej. altavoz de conferencias USB]. Altavoz: [modelo]. - Opcional: pulsador en GPIO 17 y LED en GPIO 27. ## Arquitectura (en este orden) 1. Palabra de activación: openWakeWord (modelo preentrenado "hey_jarvis" o "alexa"). 2. Grabación hasta silencio (VAD) a 16 kHz mono. 3. Transcripción: faster-whisper en la Pi, modelo "base" o "small", compute_type int8, idioma "es". 4. Cerebro: LM Studio, API compatible con OpenAI en LMSTUDIO_URL (/v1/chat/completions), con streaming. 5. Voz: Piper con una voz en español (es_ES-davefx-medium por defecto). 6. Reproducción por el altavoz y vuelta a esperar la palabra. ## Reglas - Python 3 en un entorno virtual en ./.venv. Nada de pip con sudo. - Configuración en .env (LMSTUDIO_URL, LMSTUDIO_MODEL, WAKE_WORD, MIC_DEVICE, VOICE). Nunca subas .env a git. - Todo local: no uses servicios en la nube ni APIs de pago. - Un módulo por pieza (wake.py, stt.py, llm.py, tts.py, main.py) y un script de prueba por módulo en tests_manual/. - Prueba cada pieza por separado antes de unirla. Ejecuta las pruebas tú mismo y dime qué has oído o medido. - Mide y muestra el tiempo de cada tramo (activación, transcripción, primera palabra del modelo, voz). - Mientras el asistente habla, el micrófono no escucha (para que no se responda a sí mismo). - Respuestas del asistente: en español, cortas (1-3 frases), sin listas ni emojis, pensadas para oírse. - Antes de instalar paquetes del sistema con apt, pregúntame.
7. Los prompts, fase a fase
Pégalos de uno en uno. No pases al siguiente hasta que el anterior funcione y lo hayas oído tú. Si algo falla, cuéntale a Claude Code qué ha pasado con tus palabras: «no se oye nada», «se corta la primera palabra»…
Truco: pulsa Shift+Tab para entrar en modo plan antes del primer prompt. Claude te propondrá el plan completo sin tocar nada y tú lo apruebas.
Lee el CLAUDE.md. Quiero construir este asistente de voz paso a paso. Antes de escribir código, hazme un plan por fases: qué instalarás, qué archivos crearás y cómo probaremos cada fase por separado. Dime también qué datos te faltan de mi hardware.
Crea el entorno virtual e instala lo necesario para el audio. Luego crea tests_manual/audio.py que: 1) liste los dispositivos de entrada y salida, 2) grabe 5 segundos de mi micrófono a 16 kHz mono, 3) los reproduzca por el altavoz y muestre el volumen medio. Ejecútalo y ayúdame a elegir el MIC_DEVICE correcto. Si mi micro no admite 16 kHz, graba a su frecuencia nativa y remuestrea. Guarda el dispositivo elegido en .env.
Implementa wake.py con openWakeWord usando el modelo preentrenado indicado en WAKE_WORD. Crea tests_manual/wake.py que escuche sin parar y muestre la puntuación en tiempo real y un aviso claro cuando detecte la palabra. Haz el umbral configurable en .env y ayúdame a ajustarlo: que se active a 2-3 metros, pero no con la tele ni con conversaciones normales.
Implementa stt.py: después de la palabra de activación, graba hasta que yo deje de hablar (detección de silencio, con un máximo de 10 segundos) y transcribe con faster-whisper en español (modelo base, int8). Crea tests_manual/stt.py que me pida hablar, muestre el texto y el tiempo que ha tardado. Prueba también el modelo small y dime cuál compensa en esta Pi.
Implementa llm.py contra LM Studio (API compatible con OpenAI en LMSTUDIO_URL) con streaming. System prompt: asistente de voz en español, respuestas de 1 a 3 frases, sin listas ni emojis, pensadas para oírse. Guarda los últimos 6 turnos de conversación. Si el ordenador está apagado o no responde en 5 segundos, devuelve una frase del tipo «Ahora mismo no llego a mi cerebro». Crea tests_manual/llm.py para chatear por texto y mide el tiempo hasta la primera palabra.
Implementa tts.py con Piper y la voz de VOICE (descarga el modelo de voz en ./voices). Para que no tarde, ve diciendo la respuesta frase a frase según llega del modelo, sin esperar al final. Crea tests_manual/tts.py que lea una frase de prueba y ayúdame a comparar 2 o 3 voces en español.
Crea main.py uniendo todas las piezas como una máquina de estados: ESPERANDO → ESCUCHANDO → PENSANDO → HABLANDO → ESPERANDO. Reproduce un sonido corto al despertar. Mientras habla, el micro no escucha. Si digo la palabra de activación mientras habla, que se calle y me escuche. Muestra en consola el tiempo de cada tramo. Ejecútalo y vamos probando conversaciones reales.
Crea un servicio de systemd para que el asistente arranque al encender la Pi y se reinicie si falla. Enséñame a ver los logs con journalctl y a pararlo o reiniciarlo. Antes de activarlo, explícame qué vas a instalar en el sistema.
Tengo un pulsador en GPIO 17 y un LED en GPIO 27. Añade el modo pulsar para hablar (mientras mantengo pulsado, graba) y que el LED indique el estado: apagado esperando, fijo escuchando, parpadeando pensando. Usa gpiozero. Dime exactamente cómo conectar los cables antes de probar.
Añade herramientas al asistente usando function calling de la API de LM Studio: decir la hora y la fecha, poner un temporizador con aviso sonoro y apuntar notas en un archivo. Si el modelo que tengo cargado no soporta herramientas, detecta las intenciones con reglas simples. Pruébalo con frases naturales: «pon un temporizador de diez minutos».
Diseña en OpenSCAD una carcasa imprimible para una Raspberry Pi 5 con su ventilador, mi micrófono y mi altavoz [pon medidas]. Con ventilación, hueco para el USB-C y el pulsador, y tornillos M2.5. Exporta el STL y dime qué parámetros cambiar si no encaja a la primera.
8. Problemas típicos
- No detecta el micrófono
- Revisa
arecord -ly el MIC_DEVICE del .env. Muchos micros USB solo graban a 44,1 o 48 kHz: hay que grabar así y remuestrear a 16 kHz. - Se responde a sí mismo
- El micro está oyendo al altavoz. Silencia la escucha mientras habla, separa el altavoz del micro o usa un altavoz de conferencias con cancelación de eco.
- Se activa solo
- Sube el umbral de la palabra de activación o cambia de palabra. «Hey Jarvis» da menos falsos positivos que palabras cortas.
- La Pi no llega a LM Studio
- Activa «Serve on Local Network», permite LM Studio en el cortafuegos y fija la IP del ordenador en el router. Prueba con
curldesde la Pi. - Tarda mucho en contestar
- Mide cada tramo. Si es la transcripción, baja al modelo tiny o base. Si es el modelo, usa uno más pequeño en LM Studio o baja max_tokens.
- Respuestas larguísimas
- Endurece el system prompt («máximo dos frases») y limita max_tokens a 150–200.
- La voz suena robótica
- Prueba otras voces de Piper en español (es_ES-sharvard-medium, es_MX-ald-medium…) y la velocidad de habla (length_scale).
- Cortes o reinicios
- Casi siempre es la fuente de alimentación o la temperatura. Usa la fuente oficial y el ventilador.
9. Para ir más lejos
- Transcribir en el PC: si tu ordenador tiene GPU, mover faster-whisper allí lo hace mucho más rápido. Pídele a Claude Code un pequeño servidor de transcripción en el PC.
- Tu propia palabra: openWakeWord permite entrenar una palabra personalizada, por ejemplo «Oye Logic».
- Domótica: conéctalo a Home Assistant por su API para encender luces o leer sensores.
- Memoria: que recuerde datos sobre ti entre conversaciones, guardados en un archivo local.
Seguridad: el servidor de LM Studio queda abierto a tu red local. Úsalo solo en tu red de casa, nunca en una WiFi pública, y no lo expongas a internet.
Cuando lo tengas hablando, mándame un vídeo por Instagram (@logicaigency): me encantará verlo.