Tabla de contenido:
- Paso 1: Configuración inicial
- Paso 2: Configurar Ngrok
- Paso 3: secuencia de comandos de Python para el control del interruptor de luz
- Paso 4: secuencia de comandos de Python para el control de ventiladores
- Paso 5: Instalación y configuración del paquete LIRC
- Paso 6: secuencia de comandos de Python para control de TV
- Paso 7: inicie sesión en la cuenta de AWS
- Paso 8: Configuración de habilidades de TV Alexa
- Paso 9: Configuración de habilidades de Alexa de luces
- Paso 10: Configuración de habilidades de Fan Alexa
- Paso 11: construye el Ciruit
- Paso 12: comandos de Alexa
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
Controle la TV, las luces y el ventilador de su sala de estar con Alexa (Amazon Echo o Dot) y Raspberry Pi GPIO.
Paso 1: Configuración inicial
Usé una Raspberry Pi 2 y una imagen de Raspbian Jessie descargada de
Una vez que haya iniciado sesión, ingrese los siguientes comandos para instalar los paquetes requeridos y las bibliotecas de Python:
sudo apt-get update && sudo apt-get upgrade -ysudo apt-get install python2.7-dev python-dev python-pip sudo pip install Flask flask-ask sudo apt-get install lirc
Paso 2: Configurar Ngrok
Visite https://ngrok.com/download y obtenga la última versión de ARM de Linux en formato zip y descomprímalo dentro del directorio de inicio:
descomprimir /home/pi/ngrok-stable-linux-arm.zip
Abra una nueva terminal e ingrese el siguiente comando:
sudo./ngrok http 4000
Abra otra terminal nueva e ingrese el siguiente comando:
sudo./ngrok http 4500
Abra la tercera terminal nueva e ingrese el siguiente comando:
sudo./ngrok http 5000
Paso 3: secuencia de comandos de Python para el control del interruptor de luz
Abra una nueva sesión de terminal y cree un nuevo archivo de Python llamado light_control.py:
nano light_control.py
Copie / pegue el siguiente código en el nuevo archivo:
from flask import Flaskfrom flask_ask import Ask, statement, convert_errors import RPi. GPIO as GPIO import logging import os GPIO.setmode (GPIO. BCM) app = Flask (_ name_) ask = Ask (app, '/') logging.getLogger (" flask_ask "). setLevel (logging. DEBUG) @ ask.intent ('LightControlIntent', mapping = {'status': 'status'}) def light_control (status): try: pinNum = 27 excepto Exception como e: return statement ('El número de pin no es válido.') GPIO.setup (pinNum, GPIO. OUT) si el estado está en ['on', 'high']: GPIO.output (pinNum, GPIO. LOW) si el estado está en ['off', ' low ']: GPIO.output (pinNum, GPIO. HIGH) return statement (' Encendiendo {} las luces de la sala de estar '. formato (estado)) if _name_ ==' _main_ ': port = 4000 app.run (host =' 0.0.0.0 ', puerto = puerto)
Guarde y cierre el archivo.
Inicie el servidor de matraces con:
sudo python light_control.py
Deje ngrok y light_control.py en ejecución
Paso 4: secuencia de comandos de Python para el control de ventiladores
Abra una nueva sesión de terminal y cree un nuevo archivo de Python llamado fan_control.py:
nano fan_control.py
Copie / pegue el siguiente código en el nuevo archivo:
desde el matraz de importación Matraz
from flask_ask import Ask, statement, convert_errors import RPi. GPIO as GPIO import logging import os GPIO.setmode (GPIO. BCM) app = Flask (_ name_) ask = Ask (app, '/') logging.getLogger ("flask_ask").setLevel (logging. DEBUG) @ ask.intent ('FanControlIntent', mapping = {'status': 'status'}) def fan_control (status): try: pinNum = 22 excepto Exception como e: return statement ('Pin number no válido. ') GPIO.setup (pinNum, GPIO. OUT) si el estado en [' on ',' high ']: GPIO.output (pinNum, GPIO. LOW) si el estado en [' off ',' low ']: GPIO.output (pinNum, GPIO. HIGH) return statement ('Encendiendo {} las luces de la sala de estar'.format (estado)) if _name_ == '_main_': port = 4500 app.run (host = '0.0.0.0 ', puerto = puerto)
Guarde y cierre el archivo.
Inicie el servidor de matraces con:
sudo python fan_control.py
Deje ngrok, light_control.py y fan_control.py en ejecución
Paso 5: Instalación y configuración del paquete LIRC
Para controlar el televisor, debe configurar un pin en la Raspberry Pi para generar señales de infrarrojos (IR) para su televisor específico. Abra el terminal e ingrese el siguiente comando para instalar un paquete LIRC que emula las señales infrarrojas de muchos controles remotos.
sudo apt-get install lirc
A continuación, debe habilitar y configurar el módulo del kernel lirc_rpi. Para hacerlo, abra los módulos en el editor Nano
sudo nano / etc / modules
Agregue las líneas siguientes al archivo (asegúrese de que el parámetro gpio_out_pin apunte al pin que controla el LED de infrarrojos):
lirc_devlirc_rpi gpio_out_pin = 17
A continuación, abra el archivo hardware.conf en Nano como antes con sudo:
sudo nano /etc/lirc/hardware.conf
Agregue la siguiente configuración al archivo:
LIRCD_ARGS = "- uinput" LOAD_MODULES = verdadero
DRIVER = "predeterminado"
DISPOSITIVO = "/ dev / lirc0"
MÓDULOS = "lirc_rpi"
LIRCD_CONF = ""
LIRCMD_CONF = ""
Ahora, reinicia la Raspberry Pi:
sudo reiniciar
Paso 6: secuencia de comandos de Python para control de TV
Abra una nueva sesión de terminal y cree un nuevo archivo de Python llamado ir_control.py:
nano ir_control.py
Vaya a
Busque un control remoto que sea compatible con su televisor. En mi caso, tengo un televisor Sanyo que funciona con el archivo de configuración sanyo-tv01. Una vez que encuentre un archivo que admita su televisor, ábralo y observe las opciones de comando.
Copie / pegue el siguiente código en el nuevo archivo y reemplace sanyo-tv01 con el nombre de archivo que funcione con su televisor. También asegúrese de que los comandos de tv sean compatibles con el archivo de configuración de su televisor; Es posible que deba modificar los comandos KEY_POWER, KEY_VIDEO, KEY_VOLUMEUP, KEY_VOLUMEDOWN y KEY_MUTE para que funcionen correctamente con el archivo de configuración de su televisor:
from flask import Flaskfrom flask_ask import Ask, statement, convert_errors import RPi. GPIO as GPIO import logging import os GPIO.setmode (GPIO. BCM) app = Flask (_ name_) ask = Ask (app, '/') logging.getLogger (" flask_ask "). setLevel (logging. DEBUG) @ ask.intent ('GPIOControlIntent', mapping = {'status': 'status'}) # 'pin': 'pin'}) def tv_function (status): si el estado está en ['encender']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER") declaración de retorno ('Encender el televisor') estado elif en ['apagar']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER ") return declaración ('Apagando el televisor') estado elif en ['cambiar entrada']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") return declaración ('Cambio de entrada en el televisor') estado elif en ['aumentar volumen']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP ") os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP ") return statement ('Aumento del volumen en el televisor') estado elif en ['disminuir volumen']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN ") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN ") os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN ") irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") irsendyo KEY_VOLUMEDOWN "sanyo-tv01 KEY_VOLUMEDOWN") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") irsendyo KEY_VOLUMEDOWN ") ") return statement ('Disminuyendo el volumen del televisor') estado elif en ['mute']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_MUTE ") return statement ('Silenciando el TV') estado elif en ['unmute ']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") return statement (' Desactivar el sonido del televisor ') else: return statement (' Función remota no encontrada. ') if _name_ ==' _main_ ': port = 5000 app.run (host = '0.0.0.0', puerto = puerto)
Guarde y cierre el archivo.
Inicie el servidor de matraces con:
sudo python ir_control.py
Deje las tres ventanas de terminal ngrok, light_control.py, fan_control.py e ir_control.py en ejecución
Paso 7: inicie sesión en la cuenta de AWS
Primero cree o inicie sesión en su cuenta de desarrollador de AWS y abra su lista de habilidades de Alexa.
Paso 8: Configuración de habilidades de TV Alexa
Seleccione "Agregar una nueva habilidad".
Establezca el Nombre de la habilidad en 'Trigger TV' y el Nombre de invocación en la (s) palabra (s) que desea usar para activar la habilidad.
Presione siguiente para continuar.
Copie / pegue lo siguiente en el cuadro 'Esquema de intención':
"slots": [{"name": "status", "type": "TV_Function"}, {"name": "amount", "type": "AMAZON. NUMBER"}], "intent": "GPIOControlIntent "}]}
A continuación, haga clic en 'Agregar tipo de ranura'
Ingrese TV_Function en el campo 'Ingresar tipo'.
Ingrese los siguientes valores en el campo 'Ingresar valores':
encender
apagar cambiar entrada aumentar volumen disminuir volumen silenciar activar sonido
A continuación, copie / pegue lo siguiente en el cuadro 'Expresiones de muestra':
GPIOControlIntent {status}
GPIOControlIntent {status} por {amount}
Presione siguiente para continuar.
Seleccione 'HTTPS' como el tipo de punto final de servicio y seleccione una región. Ingrese la URL ngrok del paso 2 y haga clic en 'Siguiente'. La URL debería ser algo como:
ed6ea04d.ngrok.io
Haga clic en 'Siguiente' para continuar y presione 'Guardar'.
Paso 9: Configuración de habilidades de Alexa de luces
Cierre la habilidad abierta y seleccione "Agregar una nueva habilidad".
Establezca el Nombre de la habilidad en 'Control de luces' y el Nombre de invocación en la (s) palabra (s) que desea usar para activar la habilidad.
Presione siguiente para continuar. Copie / pegue lo siguiente en el cuadro 'Esquema de intención':
{
"intents": [{"slots": [{"name": "status", "type": "LIGHTS_CONTROL"}], "intent": "LightsControlIntent"}]}
A continuación, haga clic en 'Agregar tipo de ranura'.
Ingrese "LIGHTS_CONTROL" en el campo 'Ingresar tipo'.
Ingrese los siguientes valores en el campo 'Ingresar valores':
sobre
apagado
A continuación, copie / pegue lo siguiente en el cuadro 'Expresiones de muestra':
LightsControlIntent turn {status}
Presione siguiente para continuar. Seleccione 'HTTPS' como el tipo de punto final de servicio y seleccione una región. Ingrese la URL de ngrok del paso 2 y haga clic en 'Siguiente'. La URL debería ser algo como:
ed6ea04d.ngrok.io
Haga clic en 'Siguiente' para continuar y presione 'Guardar'.
Paso 10: Configuración de habilidades de Fan Alexa
Cierre la habilidad abierta y seleccione "Agregar una nueva habilidad".
Establezca el Nombre de la habilidad en 'Control de ventilador' y el Nombre de invocación en la (s) palabra (s) que desea usar para activar la habilidad.
Presione siguiente para continuar.
Copie / pegue lo siguiente en el cuadro 'Esquema de intención':
{
"intents": [{"slots": [{"name": "status", "type": "FAN_CONTROL"}], "intent": "FANControlIntent"}]}
A continuación, haga clic en 'Agregar tipo de ranura'.
Ingrese "FAN_CONTROL" en el campo 'Ingresar tipo'.
Ingrese los siguientes valores en el campo 'Ingresar valores':
sobre
apagado
A continuación, copie / pegue lo siguiente en el cuadro 'Expresiones de muestra':
FANControlIntent turn {status}
Presione siguiente para continuar. Seleccione 'HTTPS' como el tipo de punto final de servicio y seleccione una región. Ingrese la URL de ngrok del paso 2 y haga clic en 'Siguiente'. La URL debería ser algo como:
ed6ea04d.ngrok.io
Haga clic en 'Siguiente' para continuar y presione 'Guardar'.
Paso 11: construye el Ciruit
Conecte el circuito como se muestra en el diagrama. Utilicé un módulo de relé JBtek de 8 canales CC 5 V para conectarlo a la línea y tierra de CA de 120 V de mi hogar.
Paso 12: comandos de Alexa
Ahora los siguientes comandos se pueden decir a Alexa para controlar su sala de estar.