Saltar al contenido

Cómo Construir Un Asistente Google Home Con Raspberry Pi

06 Dic, 2020
google-home-con-raspberry-pi
¡Compartelo con tus amigos!

Cómo Construir Un Asistente Google Home Con Raspberry Pi

Los asistentes controlados por voz se han convertido rápidamente en algo común. Muchos hogares tienen una Alexa o Google Home que controla todo, desde la iluminación hasta los medios, e incluso el cronometraje.

La tecnología con la que se ejecutan estos dispositivos está disponible, al menos en parte, para todos. El Asistente de SDK de Google le permite utilizar el servicio en sus propios dispositivos. Este tutorial cubre cómo configurar el Asistente de Google en su Raspberry Pi y cómo activar un LED por voz a través de los pines GPIO.

Hardware Necesario Para Un Asistente Doméstico De Raspberry Pi

google-home-con-raspberry-pi

Necesitará:

  1. Raspberry Pi con una nueva instalación de Raspbian en la tarjeta SD .
  2. Cámara web USB o micrófono.
  3. Altavoz externo.
  4. Circuito del tutorial Pi LED (opcional)
  5. Un navegador que inició sesión en su cuenta de Google.

Nota: El equipo de este tutorial puede variar un poco. Usé una cámara web USB de repuesto únicamente para su micrófono. Cualquier cámara web o micrófono compatible debería funcionar bien, y hay listas extensas de dispositivos compatibles con Pi para ayudar.

Además, estoy usando la salida de 3,5 mm para audio. HDMI y otras fuentes de salida también funcionarán, aunque requerirán modificaciones en la configuración de sonido a continuación.

Conecte la cámara web USB y el altavoz, y configure el circuito LED si lo está usando.

Configurar El Sonido

La Raspberry Pi puede aceptar comandos SSH cuando se conecta a una red local (ya sea por Ethernet o Wi-Fi), lo que le permite configurarla fácilmente. Los beneficios de SSH van más allá de alterar la proyección diaria de Los Simpson o las últimas noticias de celebridades: usar su Raspberry Pi sin una pantalla dedicada (también conocida como «sin cabeza») puede permitirle dejar el dispositivo configurado en una configuración particular sin el Preocúpese de que alguien interrumpa las cosas.

Ambas formas comienzan en el terminal, para comprobar la configuración de sonido. Utilice los comandos arecord -l y aplay -l para enumerar los dispositivos disponibles.

google-home-con-raspberry-pi

La imagen de arriba muestra la cámara web USB como tarjeta 1 y dispositivo 0 . Tome nota de los números de la tarjeta y del dispositivo para la salida del micrófono y del altavoz.

Ahora, asegurándose de estar en el directorio / home / pi , cree un nuevo archivo y ábralo en nano:

sudo nano .asoundrc

El contenido de este directorio variará según la tarjeta y los números de dispositivo que esté utilizando. Aquí es donde puede optar por favorecer la salida HDMI en lugar de 3,5 mm si lo desea.

Cuando haya ingresado su versión del código anterior, presione Ctrl + X para guardar y salir.

Pruebe su configuración grabando y reproduciendo un clip corto:

google-home-con-raspberry-pi

Paso opcional:  si desea cambiar el volumen de entrada de su micrófono, abra alsamixer y presione F6 para alternar entre dispositivos.

¡Eso es! El sonido está configurado.

Creando El Proyecto De Google

Abra el navegador de Pi; alternativamente, si está conectado a través de SSH, abra un navegador localmente. Navegue a Google Action Console y haga clic en Nuevo proyecto .

Esto puede tardar unos minutos. Cuando termine, deje la ventana activa y abra una nueva pestaña; llegaremos a esto en un momento.

Habilitando La API Del Asistente De Google

Hay algunos ajustes en línea que deberá realizar para continuar. Vaya al sitio web de la API del Asistente de Google y haga clic en Habilitar .

google-home-con-raspberry-pi

El proyecto también requiere permisos de actividad. Dirígete a tu panel de Control de actividad y asegúrate de que las siguientes actividades estén activadas:

  • Actividad web y de aplicaciones (incluida la casilla de verificación Historial de Chrome)
  • Información del dispositivo
  • Actividad de voz y audio

Ahora puede continuar con el registro del dispositivo.

Registro De Su Raspberry Pi

De vuelta en la Consola de acción, seleccione Registro de dispositivo en el panel izquierdo. En Producto, cree un nombre fácil de recordar para su dispositivo. El nombre del fabricante no es importante (pero debe estar allí) y seleccione Automático para el tipo de dispositivo.

Haga clic en Registrar modelo y, en la siguiente pantalla, haga clic en Descargar credenciales de OAuth 2.0 . Esto descarga un archivo JSON a su computadora.

La guía oficial de Google recomienda mover el archivo a / home / pi , así que abre el administrador de archivos y haz esto ahora.

Paso adicional para usuarios de SSH:

Si está utilizando SSH, habrá descargado el archivo JSON en su máquina local en lugar de Pi. Para transferirlo, abra una ventana de terminal separada sin conexión SSH. Desde esta ventana, copie el archivo JSON secreto del cliente con este comando:

scp ~/Downloads/client_secret_client-id.json pi@raspberry-pi-ip-address:/home/pi/

Reemplace «raspberry-pi-ip-address» con la dirección IP de su Pi, y no olvide los dos puntos antes de la ruta. Si descargó el archivo JSON en otra ubicación, modifique su ruta local para reflejar esto. Ingrese su contraseña cuando se le solicite, y el archivo se copiará en el directorio de inicio de Pi.

google-home-con-raspberry-pi

Vuelva a la terminal SSH y navegue hasta / home / pi . Ingrese ls -l para listar los archivos en el directorio. Debería ver el archivo JSON secreto de cliente transferido.

Instalación Del SDK

Google recomienda trabajar en un entorno virtual de Python. Cree un nuevo entorno virtual llamado env .

Si nunca ha hecho esto antes, este tutorial lo ayudará a aprender a usar entornos virtuales de Python .

Instale las últimas versiones de Pip, Setuptools y Wheel y active su entorno virtual:

env/bin/python -m pip install --upgrade pip setuptools wheel
source env/bin/activate

El Asistente de Google tiene algunas dependencias que debería instalar ahora en el entorno virtual.

sudo apt-get install portaudio19-dev libffi-dev libssl-dev libmpg123-dev

Por último, instale el SDK del Asistente de Google, las muestras y la herramienta OAuth.

python -m pip install --upgrade google-assistant-library
python -m pip install --upgrade google-assistant-sdk[samples]
python -m pip install --upgrade google-auth-oauthlib[tool]

Eso es todo lo necesario para empezar a trabajar. Si alguna de las instalaciones falla, revise la ortografía y el espaciado minuciosamente.

Autenticar La Raspberry Pi

Utilice la [herramienta] google-auth-oauthlib con el archivo JSON de credenciales descargado anteriormente para autenticar su Raspberry Pi.

google-oauthlib-tool --scope https://www.googleapis.com/auth/assistant-sdk-prototype \
--scope https://www.googleapis.com/auth/gcm \
--save --headless --client-secrets /home/pi/YOUR_CLIENT_SECRET_ID.json

Deberá reemplazar YOUR_CLIENT_SECRET_ID con el archivo descargado, por lo que vale la pena copiar el nombre del archivo primero. Esta identificación de cliente debe ser correcta. ¡No cambie el nombre del archivo!

Debería recibir un mensaje con un enlace, pidiéndole que pegue un código de autorización.

Al hacer clic en el enlace se abre el navegador. Se le pedirá que habilite el dispositivo en su cuenta de Google. Copie el código de autorización que sigue y péguelo nuevamente en la ventana de su terminal.

Debería recibir una confirmación con Credenciales guardadas: / home / pi… , lo que significa que el Pi se ha autorizado correctamente con su cuenta de Google.

Probándolo

Ahora que todo está en su lugar, es hora de probar su Pi Google Assistant. Ejecute el asistente con este comando:

googlesamples-assistant-hotword --project-id my-dev-project --device-model-id my-model

Deberá reemplazar my-dev-project con su ID de proyecto (que se encuentra en la rueda dentada Configuración de Action Console). Su ID de modelo de dispositivo aparece en la sección Registro de dispositivo de Action Console.

¡Pruébalo! Di «OK Google» y haz una pregunta. Puede ver la salida del programa en la terminal a medida que escucha la respuesta:

google-home-con-raspberry-pi

¡Eso es! El Asistente de Google ahora se está ejecutando en su Raspberry Pi. Tenga en cuenta que si el volumen de salida es un poco bajo, puede cambiarlo diciendo «Ok Google, suba el volumen al 80%».

Bono: GPIO Activado Por Voz

Es posible controlar las luces con Arduino y Siri , pero hay un método más simple. Si configura un LED, puede usar el Asistente de Google para controlarlo con su voz.

Configurar el Asistente de Google para que funcione con los pines GPIO es relativamente simple, pero requiere algunos pasos adicionales. Dirígete a Google Action Console y busca tu dispositivo en Registro del dispositivo. Haga clic en él y abra el menú de rasgos:

Active el rasgo OnOff y haga clic en Guardar.

Ahora asegurándose de estar dentro del entorno virtual env , clone una versión del SDK en su Pi usando git:

git clone https://github.com/googlesamples/assistant-sdk-python

Dado que se trata de un entorno virtual, deberá instalar RPi.GPIO antes de seguir adelante.

pip install rpi.gpio

Ahora, navegue hasta la carpeta que contiene el script hotword.py .

cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/library

Modificar El Guión

Deberá agregar algunas líneas al script hotword.py, así que ábralo en el editor nano:

nano hotword.py

Debajo de las declaraciones de importación, agregue las suyas propias para RPi.GPIO.

import RPi.GPIO as GPIO

Busque el método process_event . En la línea 66, elimine o comente la declaración de impresión y agregue una declaración if para controlar el LED.

#print('Do command', command, 'with params', str(params))
if command == "action.devices.commands.OnOff":
if params['on']:
print('---------------')
print('Led turned on')
print('---------------')
GPIO.output(18, GPIO.HIGH)
else:
print('---------------')
print('Led turned off')
print('---------------')
GPIO.output(18, GPIO.LOW)

Esta lógica controla el LED, pero hasta ahora no está configurado para emitir. Configúrelo en la función main () antes de que se llame al método process_event.

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT, initial=GPIO.LOW)

Ahora el pin GPIO está configurado para emitir y se inicializa en un estado bajo. Guardar y Salir. Puede ejecutar su secuencia de comandos modificada pasando su número de identificación de modelo (que se encuentra en la Consola de acción) como argumento.

python hotword.py --device-model-id YOUR-MODEL-ID-HERE

La salida del terminal es la misma que antes, y el asistente funcionará de serie. Sin embargo, ahora, cuando diga «OK Google, enciéndalo», verá una nueva salida:

Nota:  La imagen de arriba se ha recortado, mostrando solo al asistente que escucha la solicitud y la declaración impresa agregada al script.

¡Debería ver su LED encenderse también!

Tu Propio Asistente Casero De Google Para Tu Raspberry Pi

Este proyecto es una buena introducción al uso de los servicios API de Google. Ahora que tiene un dispositivo con el Asistente de Google, pruebe algunos de los mejores comandos de Google Home.

¡Compartelo con tus amigos!