Innehållsförteckning:

Styr vardagsrum med Alexa och Raspberry Pi: 12 steg
Styr vardagsrum med Alexa och Raspberry Pi: 12 steg

Video: Styr vardagsrum med Alexa och Raspberry Pi: 12 steg

Video: Styr vardagsrum med Alexa och Raspberry Pi: 12 steg
Video: WeMo Led Lampor Start Kit 2024, September
Anonim
Styr vardagsrummet med Alexa och Raspberry Pi
Styr vardagsrummet med Alexa och Raspberry Pi

Styr din vardagsrums -TV, lampor och fläkt med Alexa (Amazon Echo eller Dot) och Raspberry Pi GPIO.

Steg 1: Initial installation

Jag använde en Raspberry Pi 2 och en Raspbian Jessie -bild nedladdad från

När du har loggat in anger du följande kommandon för att installera de nödvändiga paketen och pythonbiblioteken:

sudo apt-get update && sudo apt-get upgrade -ysudo apt-get install python2.7-dev python-dev python-pip sudo pip installera kolvkolv-fråga sudo apt-get install lirc

Steg 2: Konfigurera Ngrok

Konfigurera Ngrok
Konfigurera Ngrok

Besök https://ngrok.com/download och få den senaste Linux ARM -versionen som en zip och packa upp i hemkatalogen:

packa upp /home/pi/ngrok-stable-linux-arm.zip

Öppna en ny terminal och ange följande kommando:

sudo./ngrok http 4000

Öppna ytterligare en ny terminal och ange följande kommando:

sudo./ngrok http 4500

Öppna den tredje nya terminalen och ange följande kommando:

sudo./ngrok http 5000

Steg 3: Python Script för Light Switch Control

Öppna en ny terminalsession och skapa en ny pythonfil med namnet light_control.py:

nano light_control.py

Kopiera/klistra in följande kod i den nya filen:

från flaskimport Flaskfrån 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 utom Undantag som e: returseddelande ('PIN -nummer ej giltigt.') GPIO.setup (pinNum, GPIO. OUT) om status i ['on', 'high']: GPIO.output (pinNum, GPIO. LOW) om status i ['off', ' låg ']: GPIO.output (pinNum, GPIO. HIGH) returseddel (' Slår {} vardagsrumsljusen '. format (status)) om _name_ ==' _main_ ': port = 4000 app.run (host =' 0.0.0.0 ', port = port)

Spara och stäng filen.

Starta kolvservern med:

sudo python light_control.py

Låt både ngrok och light_control.py vara igång

Steg 4: Python -skript för fläktkontroll

Öppna en ny terminalsession och skapa en ny pythonfil som heter fan_control.py:

nano fan_control.py

Kopiera/klistra in följande kod i den nya filen:

från kolvimport Flask

från 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 utom Undantag som e: returseddel ('Pin -nummer') inte giltig. ') GPIO.setup (pinNum, GPIO. OUT) om status i [' on ',' high ']: GPIO.output (pinNum, GPIO. LOW) om status i [' off ',' low ']: GPIO.output (pinNum, GPIO. HIGH) returseddelande ('Turning {} the Living Room Lights'.format (status)) om _name_ ==' _main_ ': port = 4500 app.run (host =' 0.0.0.0 ', port = port)

Spara och stäng filen.

Starta kolvservern med:

sudo python fan_control.py

Låt både ngrok, light_control.py och fan_control.py vara igång

Steg 5: Installera och konfigurera LIRC -paketet

För att styra TV: n måste du konfigurera en pin på Raspberry Pi för att generera infraröda (IR) signaler för din specifika TV. Öppna terminalen och ange följande kommando för att installera ett LIRC -paket som emulerar infraröda signaler från många fjärrkontroller.

sudo apt-get install lirc

Därefter måste du aktivera och konfigurera kärnmodulen lirc_rpi. För att göra det, öppna moduler i Nano -redigeraren

sudo nano /etc /modules

Lägg till raderna nedan till filen (Se till att parametern gpio_out_pin pekar på stiftet som styr IR -lysdioden):

lirc_devlirc_rpi gpio_out_pin = 17

Öppna sedan hardware.conf -filen i Nano som tidigare med sudo:

sudo nano /etc/lirc/hardware.conf

Lägg till följande konfiguration i filen:

LIRCD_ARGS = "-uinput" LOAD_MODULES = true

DRIVER = "standard"

ENHET = "/dev/lirc0"

MODULES = "lirc_rpi"

LIRCD_CONF = ""

LIRCMD_CONF = ""

Starta om Raspberry Pi nu:

sudo starta om

Steg 6: Python -skript för TV -kontroll

Öppna en ny terminalsession och skapa en ny pythonfil med namnet ir_control.py:

nano ir_control.py

Gå till

Hitta en fjärrkontroll som är kompatibel med din TV. I mitt fall har jag en Sanyo TV som fungerar med konfigurationsfilen sanyo-tv01. När du har hittat en fil som stöder din TV öppnar du den och tittar igenom kommandon.

Kopiera/klistra in följande kod i den nya filen och ersätt sanyo-tv01 med filnamnet som fungerar med din TV. Se också till att tv -kommandona stöds av dina TV: ns konfigurationsfil; Du kan behöva ändra kommandona KEY_POWER, KEY_VIDEO, KEY_VOLUMEUP, KEY_VOLUMEDOWN och KEY_MUTE för att fungera korrekt med din TV: s konfigurationsfil:

från flaskimport Flaskfrån 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): om status i ['slå på']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER") returbesked ('Slå på TV: n') elif-status i ['stäng av']: os.system ("skicka SEND_ONCE sanyo-tv01 KEY_POWER ") returseddel ('Stäng av TV: n') elif-status i ['ändra ingång']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") retur statement ('Ändra ingång på TV: n') elif-status i ['öka volymen']: 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 ") returbesked ('Öka volymen på TV: n') elif status i ['minska volymen']: os.system (" skicka 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 (tv) KENNY_VOLUMEDOWN ") os.system () ") returseddel ('Minskande volym på TV: n') elif-status i ['mute']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_MUTE ") returseddel ('Muting the TV') elif status i ['unmute ']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") return statement (' Unmuting the TV ') else: return statement (' Remote function not found. ') if _name_ ==' _main_ ': port = 5000 app.run (host = '0.0.0.0', port = port)

Spara och stäng filen.

Starta kolvservern med:

sudo python ir_control.py

Låt alla tre ngrok -terminalfönster, light_control.py, fan_control.py och ir_control.py vara igång

Steg 7: Logga in på AWS -konto

Logga in på AWS -konto
Logga in på AWS -konto

Skapa eller logga först in på ditt AWS -utvecklarkonto och öppna din lista över Alexa Skills.

Steg 8: TV Alexa Skill Setup

TV Alexa Skill Setup
TV Alexa Skill Setup

Välj "Lägg till en ny kompetens".

Ställ in skicklighetsnamnet på 'Trigger TV' och anropsnamnet till de ord som du vill använda för att aktivera färdigheten.

Klicka på "Nästa" för att fortsätta.

Kopiera/klistra in följande i rutan "Intent Schema":

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

Klicka sedan på "Lägg till plats"

Ange TV_Function i fältet "Enter Type".

Ange följande värden i fältet "Ange värden":

sätta på

stäng av ändra ingång öka volym minska volym stäng av ljudet

Kopiera/klistra sedan in följande i rutan "Provutterances":

GPIOControlIntent {status}

GPIOControlIntent {status} med {amount}

Klicka på "Nästa" för att fortsätta.

Välj "HTTPS" som Service Endpoint Type och välj en region. Ange ngrok URL från steg 2 och klicka på "Nästa". Webbadressen ska vara ungefär så här:

ed6ea04d.ngrok.io

Klicka på "Nästa" för att fortsätta och tryck på "Spara".

Steg 9: Tänder Alexa Skill Setup

Tänder Alexa Skill Setup
Tänder Alexa Skill Setup

Stäng den öppna färdigheten och välj "Lägg till en ny kompetens".

Ställ in skicklighetsnamnet på 'Ljuskontroll' och anropsnamnet till de ord som du vill använda för att aktivera färdigheten.

Klicka på "Nästa" för att fortsätta. Kopiera/klistra in följande i rutan "Intent Schema":

{

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

Klicka sedan på "Lägg till plats för typ av plats".

Ange "LIGHTS_CONTROL" i fältet "Skriv typ".

Ange följande värden i fältet "Ange värden":

av

Kopiera/klistra sedan in följande i rutan "Provutterances":

LightsControlIntent turn {status}

Klicka på "Nästa" för att fortsätta. Välj "HTTPS" som Service Endpoint Type och välj en region. Ange ngrok URL från steg 2 och klicka på "Nästa". Webbadressen ska vara ungefär så här:

ed6ea04d.ngrok.io

Klicka på "Nästa" för att fortsätta och tryck på "Spara".

Steg 10: Fan Alexa Skill Setup

Fan Alexa Skill Setup
Fan Alexa Skill Setup

Stäng den öppna färdigheten och välj "Lägg till en ny kompetens".

Ställ in skicklighetsnamnet på 'Fan Control' och Invocation Name till de ord som du vill använda för att aktivera färdigheten.

Klicka på "Nästa" för att fortsätta.

Kopiera/klistra in följande i rutan "Intent Schema":

{

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

Klicka sedan på "Lägg till plats".

Ange "FAN_CONTROL" i fältet "Skriv typ".

Ange följande värden i fältet "Ange värden":

av

Kopiera/klistra sedan in följande i rutan "Provutterances":

FANControlIntent sväng {status}

Klicka på "Nästa" för att fortsätta. Välj "HTTPS" som Service Endpoint Type och välj en region. Ange ngrok URL från steg 2 och klicka på "Nästa". Webbadressen ska vara ungefär så här:

ed6ea04d.ngrok.io

Klicka på "Nästa" för att fortsätta och tryck på "Spara".

Steg 11: Bygg Ciruit

Bygg Ciruit
Bygg Ciruit

Anslut kretsen enligt diagrammet. Jag använde en JBtek 8 -kanalig DC 5V -relämodul för att ansluta till mitt hem AC 120v -ledning och jord.

Steg 12: Alexa -kommandon

Nu kan följande kommandon talas till Alexa för att styra ditt vardagsrum.

Rekommenderad: