Taula de continguts:

Sala de control amb Alexa i Raspberry Pi: 12 passos
Sala de control amb Alexa i Raspberry Pi: 12 passos

Vídeo: Sala de control amb Alexa i Raspberry Pi: 12 passos

Vídeo: Sala de control amb Alexa i Raspberry Pi: 12 passos
Vídeo: ПОЧЕМУ Я ЖДУ L4D3 2024, Desembre
Anonim
Sala de control amb Alexa i Raspberry Pi
Sala de control amb Alexa i Raspberry Pi

Controleu el televisor de la sala, els llums i el ventilador amb Alexa (Amazon Echo o Dot) i Raspberry Pi GPIO.

Pas 1: configuració inicial

He utilitzat una imatge de Raspberry Pi 2 i una imatge de Raspbian Jessie descarregada de

Un cop hàgiu iniciat la sessió, introduïu les ordres següents per instal·lar els paquets necessaris i les biblioteques 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

Pas 2: configureu Ngrok

Configuració de Ngrok
Configuració de Ngrok

Visiteu https://ngrok.com/download i obteniu la versió més recent de Linux ARM com a zip i descomprimiu-la al directori inicial:

descomprimiu /home/pi/ngrok-stable-linux-arm.zip

Obriu un terminal nou i introduïu l'ordre següent:

sudo./ngrok http 4000

Obriu un altre terminal nou i introduïu l'ordre següent:

sudo./ngrok http 4500

Obriu el tercer terminal nou i introduïu l'ordre següent:

sudo./ngrok http 5000

Pas 3: Script Python per al control de commutadors de llum

Obriu una nova sessió de terminal i creeu un fitxer python nou anomenat light_control.py:

nano light_control.py

Copieu / enganxeu el codi següent al fitxer nou:

des de la importació del flascó Flask des de la importació de flask_ask Ask, declaració, convert_errors import RPi. GPIO com a importació de registres d'importació GPIO 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 excepte Excepció com a e: return statement ('El número de pin no és vàlid.') GPIO.setup (pinNum, GPIO. OUT) si l'estat a ['on', 'high']: GPIO.output (pinNum, GPIO. LOW) si l'estat a ['off', ' baix ']: declaració de retorn GPIO.output (pinNum, GPIO. HIGH) (' Turning {} the Living Room Lights'.format (status)) if _name_ == '_main_': port = 4000 app.run (host = ' 0.0.0.0 ', port = port)

Deseu i tanqueu el fitxer.

Inicieu el servidor de matràs amb:

sudo python light_control.py

Deixeu funcionar tant ngrok com light_control.py

Pas 4: Python Script per al control de ventiladors

Obriu una nova sessió de terminal i creeu un nou fitxer python anomenat fan_control.py:

nano fan_control.py

Copieu / enganxeu el codi següent al fitxer nou:

d'importació de matràs Matràs

de flask_ask import Ask, statement, convert_errors import RPi. GPIO com a importació de registres d'importació GPIO 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 except Exception as e: return statement ('Pin number no vàlid. ') GPIO.setup (pinNum, GPIO. OUT) si l'estat a [' on ',' high ']: GPIO.output (pinNum, GPIO. LOW) si l'estat a [' off ',' low ']: Declaració de retorn GPIO.output (pinNum, GPIO. HIGH) ("Turning {} the Living Room Lights". Format (status)) if _name_ == '_main_': port = 4500 app.run (host = '0.0.0.0 ', port = port)

Deseu i tanqueu el fitxer.

Inicieu el servidor de matràs amb:

sudo python fan_control.py

Deixeu en funcionament ngrok, light_control.py i fan_control.py

Pas 5: Instal·lació i configuració del paquet LIRC

Per controlar el televisor, heu de configurar un pin al Raspberry Pi per generar senyals infrarojos (IR) per al vostre televisor específic. Obriu el terminal i introduïu l'ordre següent per instal·lar un paquet LIRC que emuli els senyals infrarojos de molts comandaments a distància.

sudo apt-get install lirc

A continuació, heu d’habilitar i configurar el mòdul del nucli lirc_rpi. Per fer-ho, obriu mòduls a l'editor Nano

sudo nano / etc / modules

Afegiu les línies següents al fitxer (assegureu-vos que el paràmetre gpio_out_pin apunti al pin que controla el LED IR):

lirc_devlirc_rpi gpio_out_pin = 17

A continuació, obriu el fitxer hardware.conf a Nano com abans amb sudo:

sudo nano /etc/lirc/hardware.conf

Afegiu la configuració següent al fitxer:

LIRCD_ARGS = "- uinput" LOAD_MODULES = cert

DRIVER = "predeterminat"

DEVICE = "/ dev / lirc0"

MODULES = "lirc_rpi"

LIRCD_CONF = ""

LIRCMD_CONF = ""

Ara, reinicieu el Raspberry Pi:

sudo reiniciar

Pas 6: Python Script per al control de TV

Obriu una nova sessió de terminal i creeu un nou fitxer python anomenat ir_control.py:

nano ir_control.py

Aneu a

Cerqueu un comandament a distància que sigui compatible amb el vostre televisor. En el meu cas, tinc un televisor Sanyo que funciona amb el fitxer de configuració sanyo-tv01. Un cop trobeu un fitxer que admeti el vostre televisor, obriu-lo i mireu a través de les opcions d’ordres.

Copieu / enganxeu el següent codi al fitxer nou i substituïu sanyo-tv01 pel nom del fitxer que funciona amb el vostre televisor. Assegureu-vos també que el fitxer de configuració dels televisors admeti les ordres de TV; És possible que hagueu de modificar les ordres KEY_POWER, KEY_VIDEO, KEY_VOLUMEUP, KEY_VOLUMEDOWN i KEY_MUTE perquè funcionin correctament amb el fitxer de configuració del televisor:

des de la importació del flascó Flask des de la importació de flask_ask Preguntar, declaració, convertir_errors importar RPi. GPIO com a importació de registres d'importació GPIO 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): if status in ['activar']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER") declaració de retorn ('Encendre el televisor') estat elif a ['apagar']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER ") declaració de retorn ('Apagar el televisor') estat elif a ['canvia l'entrada']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") return statement ('Canviant l'entrada al televisor') estat elif a ['augmentar el volum']: 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 ") declaració de retorn ('Augment de volum al televisor') estat elif a ['disminuir volum']: 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") os.system ") declaració de retorn (" Disminució del volum al televisor ") estat elif a ['silenciar']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_MUTE ") declaració de retorn ('Silenciar la TV') estat elif a ['unmute ']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") declaració de retorn (' Unmuting the TV ') else: return statement (' Remote function not found. ') if _name_ ==' _main_ ': port = 5000 app.run (host = '0.0.0.0', port = port)

Deseu i tanqueu el fitxer.

Inicieu el servidor de matràs amb:

sudo python ir_control.py

Deixeu en funcionament les tres finestres del terminal ngrok, light_control.py, fan_control.py i ir_control.py

Pas 7: inicieu la sessió al compte d'AWS

Inicieu la sessió al compte d'AWS
Inicieu la sessió al compte d'AWS

Primer creeu o inicieu la sessió al vostre compte de desenvolupador d’AWS i obriu la llista d’Alexa Skills.

Pas 8: Configuració de l'habilitat Alexa de TV

Configuració d'habilitats Alexa de televisió
Configuració d'habilitats Alexa de televisió

Seleccioneu "Afegeix una habilitat nova".

Establiu el nom de l'habilitat a "Trigger TV" i el nom d'invocació a les paraules que vulgueu utilitzar per activar l'habilitat.

Feu clic a "Següent" per continuar.

Copieu / enganxeu el següent al quadre "Esquema d'intencions":

"slots": [{"name": "status", "type": "TV_Function"}, {"name": "import", "type": "AMAZON. NUMBER"}], "intent": "GPIOControlIntent "}]}

A continuació, feu clic a "Afegeix un tipus de ranura"

Introduïu TV_Function al camp "Tipus d'introducció".

Introduïu els valors següents al camp "Introduïu valors":

encendre

apagar canviar entrada augmentar volum disminuir volum silenciar activar silenciar

A continuació, copieu / enganxeu el següent al quadre "Utilitats de mostra":

GPIOControlIntent {status}

GPIOControlIntent {status} per {quantitat}

Feu clic a "Següent" per continuar.

Seleccioneu "HTTPS" com a Tipus de punt final del servei i seleccioneu una regió. Introduïu l'URL ngrok des del pas 2 i feu clic a "Següent". L'URL hauria de ser semblant a:

ed6ea04d.ngrok.io

Feu clic a "Següent" per continuar i premeu "Desa".

Pas 9: Configuració de l'habilitat d'Alexa

Configuració d'habilitats d'Alexa de Lights
Configuració d'habilitats d'Alexa de Lights

Tanqueu l'habilitat oberta i seleccioneu "Afegeix una habilitat nova".

Establiu el nom de l'habilitat a "Control de llums" i el nom d'invocació a les paraules que vulgueu utilitzar per activar l'habilitat.

Feu clic a "Següent" per continuar. Copieu / enganxeu el següent al quadre "Esquema d'intencions":

{

"intents": [{"slots": [{"name": "status", "type": "LIGHTS_CONTROL"}], "intent": "LightsControlIntent"}]}

A continuació, feu clic a "Afegeix un tipus de ranura".

Introduïu "LIGHTS_CONTROL" al camp "Tipus d'introducció".

Introduïu els valors següents al camp "Introduïu valors":

encès

apagat

A continuació, copieu / enganxeu el següent al quadre "Utilitats de mostra":

LightsControlIntent turn {status}

Feu clic a "Següent" per continuar. Seleccioneu "HTTPS" com a Tipus de punt final del servei i seleccioneu una regió. Introduïu l'URL ngrok des del pas 2 i feu clic a "Següent". L'URL hauria de ser semblant a:

ed6ea04d.ngrok.io

Feu clic a "Següent" per continuar i premeu "Desa".

Pas 10: Configuració de l'habilitat d'Alexa Fan

Configuració d'habilitats d'Alexa Fan
Configuració d'habilitats d'Alexa Fan

Tanqueu l'habilitat oberta i seleccioneu "Afegeix una habilitat nova".

Establiu el nom de l'habilitat a "Control del ventilador" i el nom d'invocació a les paraules que vulgueu utilitzar per activar l'habilitat.

Feu clic a "Següent" per continuar.

Copieu / enganxeu el següent al quadre "Esquema d'intencions":

{

"intents": [{"slots": [{"name": "status", "type": "FAN_CONTROL"}], "intent": "FANControlIntent"}]}

A continuació, feu clic a "Afegeix un tipus de ranura".

Introduïu "FAN_CONTROL" al camp "Tipus d'introducció".

Introduïu els valors següents al camp "Introduïu valors":

encès

apagat

A continuació, copieu / enganxeu el següent al quadre "Utilitats de mostra":

FANControlIntent turn {status}

Feu clic a "Següent" per continuar. Seleccioneu "HTTPS" com a Tipus de punt final del servei i seleccioneu una regió. Introduïu l'URL ngrok des del pas 2 i feu clic a "Següent". L'URL hauria de ser semblant a:

ed6ea04d.ngrok.io

Feu clic a "Següent" per continuar i premeu "Desa".

Pas 11: Construeix el Ciruit

Construeix el Ciruit
Construeix el Ciruit

Connecteu el circuit tal com es mostra a l'esquema. Vaig utilitzar un mòdul de relé DC 5V JBtek de 8 canals per connectar-me a la línia i terra de 120 AC de casa meva.

Pas 12: ordres d'Alexa

Ara es poden comunicar les ordres següents a Alexa per controlar el saló.

Recomanat: