Tabla de contenido:

Controle la sala de estar con Alexa y Raspberry Pi: 12 pasos
Controle la sala de estar con Alexa y Raspberry Pi: 12 pasos

Video: Controle la sala de estar con Alexa y Raspberry Pi: 12 pasos

Video: Controle la sala de estar con Alexa y Raspberry Pi: 12 pasos
Video: C9 Amazon Alexa Raspberry Pi Broadlink Openhab Combinación Poderosa 2024, Septiembre
Anonim
Controle la sala de estar con Alexa y Raspberry Pi
Controle la sala de estar con Alexa y Raspberry Pi

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

Configurar Ngrok
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

Inicie sesión en la cuenta de AWS
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

Configuración de habilidades de TV Alexa
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

Configuración de habilidades de Alexa de luces
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

Configuración de habilidades de Fan Alexa
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

Construye el Ciruit
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.

Recomendado: