← Recursos

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.

  1. Palabra de activación (openWakeWord): la Pi escucha todo el rato, pero solo «despierta» cuando oye la palabra, por ejemplo «Alexa» o «Hey Jarvis».
  2. Transcripción (faster-whisper): convierte lo que dices en texto, en la propia Pi.
  3. Cerebro (LM Studio en tu PC): recibe el texto por la red local y responde con el modelo que tengas cargado.
  4. Voz (Piper): convierte la respuesta en audio con una voz en español, también en la Pi.
  5. 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

PiezaQué elegirNotas
PlacaRaspberry Pi 5 (4 u 8 GB)Una Pi 4 de 4 GB también sirve, pero transcribe más lento.
AlmacenamientomicroSD de 32 GB o más (clase A2)Un SSD por USB o NVMe va más rápido, pero no es obligatorio.
AlimentaciónFuente oficial de la Pi (27 W en la Pi 5)Con fuentes flojas aparecen cortes y errores raros de audio.
RefrigeraciónDisipador con ventilador (Active Cooler)La transcripción pone la CPU al 100 % unos segundos.
MicrófonoMicró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.
AltavozAltavoz USB o con BluetoothLa 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 dupontPara hablar pulsando un botón y para ver en qué estado está.
El cerebroTu PC o Mac con LM StudioCon 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

  1. Descarga Raspberry Pi Imager en tu ordenador y graba Raspberry Pi OS Lite (64-bit) en la microSD.
  2. 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.
  3. Mete la tarjeta, conecta el micro y el altavoz y enciende la Pi. Espera un par de minutos.
  4. Desde la terminal de tu ordenador, entra en la Pi:
Desde tu ordenador
ssh tu_usuario@asistente.local

Ya dentro de la Pi, actualiza el sistema e instala lo básico:

En la Raspberry Pi
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:

Prueba de audio
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

  1. 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.
  2. Ve a la pestaña Developer y carga el modelo.
  3. Arranca el servidor (Start Server). Por defecto escucha en el puerto 1234.
  4. En los ajustes del servidor, activa Serve on Local Network. Sin esto, la Pi no puede hablar con tu ordenador.
  5. 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:

En la Raspberry Pi (cambia la IP por la de tu PC)
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.

En la Raspberry Pi
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/CLAUDE.md
# 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.

Fase 0 · El plan
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.
Fase 1 · Audio
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.
Fase 2 · Palabra de activación
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.
Fase 3 · Transcripción
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.
Fase 4 · El cerebro (LM Studio)
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.
Fase 5 · La voz
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.
Fase 6 · Todo junto
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.
Fase 7 · Que arranque solo
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.
Fase 8 · Botón y luces (opcional)
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.
Fase 9 · Que haga cosas (opcional)
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».
Fase 10 · La carcasa en 3D (como en el reel)
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 -l y 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 curl desde 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.