Turinys:

Valdykite svetainę su Alexa ir Raspberry Pi: 12 žingsnių
Valdykite svetainę su Alexa ir Raspberry Pi: 12 žingsnių

Video: Valdykite svetainę su Alexa ir Raspberry Pi: 12 žingsnių

Video: Valdykite svetainę su Alexa ir Raspberry Pi: 12 žingsnių
Video: High Density 2022 2024, Lapkritis
Anonim
Valdykite svetainę su Alexa ir Raspberry Pi
Valdykite svetainę su Alexa ir Raspberry Pi

Valdykite savo svetainės televizorių, šviesas ir ventiliatorių naudodami „Alexa“(„Amazon Echo“arba „Dot“) ir „Raspberry Pi GPIO“.

1 žingsnis: pradinė sąranka

Naudojau Raspberry Pi 2 ir Raspbian Jessie atvaizdą, atsisiųstą iš

Prisijungę įveskite šias komandas, kad įdiegtumėte reikiamus paketus ir „python“bibliotekas:

sudo apt-get update && sudo apt-get upgrade -ysudo apt-get install python2.7-dev python-dev python-pip sudo pip install Kolbinė kolba-klauskite sudo apt-get install lirc

2 veiksmas: nustatykite „Ngrok“

Nustatykite „Ngrok“
Nustatykite „Ngrok“

Apsilankykite https://ngrok.com/download ir gaukite naujausią „Linux ARM“versiją kaip ZIP ir išpakuokite namų kataloge:

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

Atidarykite naują terminalą ir įveskite šią komandą:

sudo./ngrok http 4000

Atidarykite kitą naują terminalą ir įveskite šią komandą:

sudo./ngrok http 4500

Atidarykite trečiąjį naują terminalą ir įveskite šią komandą:

sudo./ngrok http 5000

3 žingsnis: „Python“scenarijus šviesos jungikliui valdyti

Atidarykite naują terminalo sesiją ir sukurkite naują „python“failą, pavadintą light_control.py:

nano light_control.py

Nukopijuokite/įklijuokite šį kodą į naują failą:

iš kolbos importo Flaskfrom flask_ask importas Klausti, teiginys, konvertuoti_klaidos importuoti RPi. GPIO kaip GPIO importuoti registravimą importuoti os GPIO.setmode (GPIO. BCM) app = Kolba (_ vardas_) ask = Klausti (programa, '/') logging.getLogger (" setLevel (logging. DEBUG) @ask.intent ('LightControlIntent', mapping = {'status': 'status'}) def light_control (status): try: pinNum = 27, išskyrus išimtį kaip e: grąžinimo pareiškimas ('PIN kodas neteisingas.') GPIO.setup (pinNum, GPIO. OUT), jei būsena ['on', 'high']: GPIO.output (pinNum, GPIO. LOW), jei būsena ['off', ' žemas ']: GPIO.output (pinNum, GPIO. HIGH) grąžinimo pareiškimas („Įjungus {} gyvenamojo kambario šviesas“. formatas (būsena)), jei _name_ ==' _main_ ': port = 4000 app.run (host =' 0.0.0.0 ', prievadas = prievadas)

Išsaugokite ir uždarykite failą.

Įjunkite kolbos serverį:

sudo python light_control.py

Palikite veikti tiek „ngrok“, tiek „light_control.py“

4 veiksmas: ventiliatoriaus valdymo „Python“scenarijus

Atidarykite naują terminalo sesiją ir sukurkite naują „python“failą, pavadintą fan_control.py:

nano fan_control.py

Nukopijuokite/įklijuokite šį kodą į naują failą:

iš kolbos importo kolba

iš „flask_ask“importavimo Klauskite, teiginys, konvertuokite klaidas importuodami RPi. GPIO kaip GPIO importo registravimo importavimas 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, išskyrus išimtį kaip e: grąžinimo teiginys ('PIN kodas negalioja. ') GPIO.setup (pinNum, GPIO. OUT), jei būsena [' įjungta ',' aukšta ']: GPIO. išvestis (pinNum, GPIO. LOW), jei būsena yra [' išjungta ',' maža ']: GPIO.output (pinNum, GPIO. HIGH) grąžinimo pareiškimas („Įjungus {} gyvenamojo kambario šviesas“. Formatas (būsena)), jei _name_ == '_main_': port = 4500 app.run (host = '0.0.0.0 ', uostas = uostas)

Išsaugokite ir uždarykite failą.

Įjunkite kolbos serverį:

sudo python fan_control.py

Palikite veikti tiek „ngrok“, tiek „light_control.py“, tiek „fan_control.py“

5 veiksmas: LIRC paketo diegimas ir konfigūravimas

Norėdami valdyti televizorių, turite sukonfigūruoti „Raspberry Pi“kaištį, kad jis sukurtų jūsų konkrečiam televizoriui skirtus infraraudonųjų spindulių (IR) signalus. Atidarykite terminalą ir įveskite šią komandą, kad įdiegtumėte LIRC paketą, kuris imituoja daugelio nuotolinio valdymo pulto infraraudonųjų spindulių signalus.

sudo apt-get install lirc

Tada turite įjungti ir sukonfigūruoti lirc_rpi branduolio modulį. Norėdami tai padaryti, atidarykite modulius „Nano“redaktoriuje

sudo nano /etc /modules

Įtraukite toliau pateiktas eilutes į failą (įsitikinkite, kad parametras gpio_out_pin nurodo kaištį, valdantį IR šviesos diodą):

lirc_devlirc_rpi gpio_out_pin = 17

Tada atidarykite „hardware.conf“failą „Nano“, kaip ir anksčiau, naudodami „sudo“:

sudo nano /etc/lirc/hardware.conf

Prie failo pridėkite šią konfigūraciją:

LIRCD_ARGS = "-įveskite" LOAD_MODULES = tiesa

DRIVER = "numatytasis"

ĮRENGINIS = "/dev/lirc0"

MODULIAI = "lirc_rpi"

LIRCD_CONF = ""

LIRCMD_CONF = ""

Dabar iš naujo paleiskite „Raspberry Pi“:

sudo perkraukite

6 veiksmas: „Python“scenarijus TV valdymui

Atidarykite naują terminalo sesiją ir sukurkite naują „python“failą pavadinimu ir_control.py:

nano ir_control.py

Eikite į

Raskite nuotolinio valdymo pultą, suderinamą su jūsų televizoriumi. Mano atveju turiu „Sanyo“televizorių, kuris veikia su „sanyo-tv01“konfigūracijos failu. Radę failą, palaikantį jūsų televizorių, atidarykite jį ir peržiūrėkite komandų parinktis.

Nukopijuokite/įklijuokite šį kodą į naują failą ir pakeiskite „sanyo-tv01“failo pavadinimu, kuris tinka jūsų televizoriui. Taip pat įsitikinkite, kad televizoriaus komandas palaiko jūsų televizoriaus konfigūracijos failas; Kad tinkamai veiktų jūsų televizoriaus konfigūracijos failas, gali tekti keisti komandas KEY_POWER, KEY_VIDEO, KEY_VOLUMEUP, KEY_VOLUMEDOWN ir KEY_MUTE:

iš kolbos importo Flaskfrom flask_ask importas Klausti, teiginys, konvertuoti_klaidos importuoti RPi. GPIO kaip GPIO importuoti registravimo importavimą os GPIO.setmode (GPIO. BCM) app = Kolba (_ vardas_) klausti = Klausti (programa, '/') logging.getLogger (" flask_ask "). setLevel (logging. DEBUG) @ask.intent ('GPIOControlIntent', mapping = {'status': 'status'}) #'pin': 'pin'}) def tv_function (status): jei būsena ['įjungti']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER") grąžinimo pareiškimas ("Įjungiamas televizorius") elif statusas ['turn off']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER ") grąžinimo pareiškimas („ Televizoriaus išjungimas “) elifo būsena ['change input']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") return teiginys („Įvesties keitimas televizoriuje“) elifo būsena [„padidinti garsumą“]: 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 ") grąžinimo pareiškimas (" Garso didinimas televizoriuje ") elifo būsena ['sumažinti garsumą']: 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_VOLUMEDSOWN_SENSION" ") grąžinimo pareiškimas („ Sumažėja garsumas televizoriuje ") elifo būsena ['mute']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_MUTE ") grąžinimo pareiškimas ('TV nutildymas') elif statusas ['unmute ']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") grąžinimo pareiškimas ("TV įjungimas") else: return utasítás ("Nuotolinė funkcija nerasta."), jei _name_ ==' _main_ ': port = 5000 app.run (pagrindinis kompiuteris = '0.0.0.0', prievadas = prievadas)

Išsaugokite ir uždarykite failą.

Įjunkite kolbos serverį:

sudo python ir_control.py

Palikite veikti visus tris „ngrok“terminalo langus, „light_control.py“, „fan_control.py“ir „ir_control.py“

7 veiksmas: prisijunkite prie AWS paskyros

Prisijunkite prie AWS paskyros
Prisijunkite prie AWS paskyros

Pirmiausia sukurkite arba prisijunkite prie savo AWS kūrėjo paskyros ir atidarykite „Alexa Skills“sąrašą.

8 veiksmas: televizoriaus „Alexa“įgūdžių sąranka

„Alexa“įgūdžių sąranka
„Alexa“įgūdžių sąranka

Pasirinkite „Pridėti naują įgūdį“.

Nustatykite įgūdžių pavadinimą į „Trigger TV“, o užklausos pavadinimą - į žodį (-ius), kurį (-iuos) norite naudoti, kad suaktyvintumėte įgūdžius.

Norėdami tęsti, spustelėkite „Kitas“.

Nukopijuokite/įklijuokite šį laukelį „Ketinimo schema“:

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

Tada spustelėkite „Pridėti lizdo tipą“

Lauke „Įveskite tipą“įveskite TV_Function.

Lauke „Įveskite vertes“įveskite šias reikšmes:

įjungti

išjungti keisti įvestį padidinti garsumą mažinti garsumą nutildyti įjungti garsą

Tada nukopijuokite/įklijuokite šiuos elementus į langelį „Pavyzdiniai teiginiai“:

GPIOControlIntent {status}

GPIOControlIntent {status} pagal {summa}

Norėdami tęsti, spustelėkite „Kitas“.

Paslaugos pabaigos taško tipu pasirinkite „HTTPS“ir pasirinkite regioną. Įveskite ngrok URL iš 2 veiksmo ir spustelėkite „Kitas“. URL turėtų būti maždaug toks:

ed6ea04d.ngrok.io

Norėdami tęsti, spustelėkite „Kitas“ir paspauskite „Išsaugoti“.

9 veiksmas: apšviečia „Alexa“įgūdžių sąranką

Šviesos „Alexa“įgūdžių sąranka
Šviesos „Alexa“įgūdžių sąranka

Uždarykite atvirus įgūdžius ir pasirinkite „Pridėti naują įgūdį“.

Nustatykite įgūdžių pavadinimą į „Šviesos valdymas“, o kvietimo pavadinimą - į žodį (-ius), kurį (-ius) norite naudoti įgūdžiui suaktyvinti.

Norėdami tęsti, spustelėkite „Kitas“. Nukopijuokite/įklijuokite į langelį „Ketinimo schema“:

{

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

Tada spustelėkite „Pridėti lizdo tipą“.

Lauke „Įveskite tipą“įveskite „LIGHTS_CONTROL“.

Lauke „Įveskite vertes“įveskite šias reikšmes:

ant

išjungtas

Tada nukopijuokite/įklijuokite šį elementą į langelį „Pavyzdiniai teiginiai“:

LightsControlIntent posūkis {status}

Norėdami tęsti, spustelėkite „Kitas“. Paslaugos pabaigos taško tipu pasirinkite „HTTPS“ir pasirinkite regioną. Įveskite ngrok URL iš 2 veiksmo ir spustelėkite „Kitas“. URL turėtų būti maždaug toks:

ed6ea04d.ngrok.io

Norėdami tęsti, spustelėkite „Kitas“ir paspauskite „Išsaugoti“.

10 veiksmas: gerbėjo „Alexa“įgūdžių sąranka

Ventiliatoriaus Alexa įgūdžių sąranka
Ventiliatoriaus Alexa įgūdžių sąranka

Uždarykite atvirus įgūdžius ir pasirinkite „Pridėti naują įgūdį“.

Nustatykite įgūdžių pavadinimą į „Ventiliatoriaus valdymas“, o užklausos pavadinimą - į žodį (-ius), kurį (-iuos) norite naudoti įgūdžiui suaktyvinti.

Norėdami tęsti, spustelėkite „Kitas“.

Nukopijuokite/įklijuokite šį laukelį „Ketinimo schema“:

{

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

Tada spustelėkite „Pridėti lizdo tipą“.

Lauke „Įveskite tipą“įveskite „FAN_CONTROL“.

Lauke „Įveskite vertes“įveskite šias reikšmes:

ant

išjungtas

Tada nukopijuokite/įklijuokite šį elementą į langelį „Pavyzdiniai teiginiai“:

FANControlIntent posūkis {status}

Norėdami tęsti, spustelėkite „Kitas“. Paslaugos pabaigos taško tipu pasirinkite „HTTPS“ir pasirinkite regioną. Įveskite ngrok URL iš 2 veiksmo ir spustelėkite „Kitas“. URL turėtų būti maždaug toks:

ed6ea04d.ngrok.io

Norėdami tęsti, spustelėkite „Kitas“ir paspauskite „Išsaugoti“.

11 žingsnis: sukurkite grandinę

Sukurkite grandinę
Sukurkite grandinę

Prijunkite grandinę, kaip parodyta diagramoje. Aš prijungiau JBtek 8 kanalų nuolatinės srovės 5 V relės modulį, kad prisijungčiau prie savo namų kintamosios srovės 120 V linijos ir žemės.

12 žingsnis: „Alexa“komandos

Dabar su Alexa galima ištarti šias komandas, kad galėtumėte valdyti jūsų kambarį.

Rekomenduojamas: