Cuprins:

Controlează camera de zi cu Alexa și Raspberry Pi: 12 pași
Controlează camera de zi cu Alexa și Raspberry Pi: 12 pași

Video: Controlează camera de zi cu Alexa și Raspberry Pi: 12 pași

Video: Controlează camera de zi cu Alexa și Raspberry Pi: 12 pași
Video: Dacă râzi ajungi în iad 🤣 georgecgf #shorts #romania 2024, Decembrie
Anonim
Controlează camera de zi cu Alexa și Raspberry Pi
Controlează camera de zi cu Alexa și Raspberry Pi

Controlează-ți televizorul din cameră, luminile și ventilatorul cu Alexa (Amazon Echo sau Dot) și Raspberry Pi GPIO.

Pasul 1: Configurare inițială

Am folosit un Raspberry Pi 2 și o imagine Raspbian Jessie descărcată de pe

Odată conectat, introduceți următoarele comenzi pentru a instala pachetele necesare și bibliotecile 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

Pasul 2: Configurați Ngrok

Configurați Ngrok
Configurați Ngrok

Accesați https://ngrok.com/download și obțineți cea mai recentă versiune Linux ARM sub formă de zip și dezarhivați în directorul principal:

dezarhivați /home/pi/ngrok-stable-linux-arm.zip

Deschideți un terminal nou și introduceți următoarea comandă:

sudo./ngrok http 4000

Deschideți un alt terminal nou și introduceți următoarea comandă:

sudo./ngrok http 4500

Deschideți al treilea terminal nou și introduceți următoarea comandă:

sudo./ngrok http 5000

Pasul 3: Script Python pentru controlul comutatorului de lumină

Deschideți o nouă sesiune de terminal și creați un nou fișier python numit light_control.py:

nano light_control.py

Copiați / lipiți următorul cod în noul fișier:

din flask import Flaskde la flask_ask import Ask, statement, convert_errors import RPi. GPIO ca 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 cu excepția Exception ca e: return statement („Numărul pinului nu este valid.”) GPIO.setup (pinNum, GPIO. OUT) dacă starea în ['on', 'high']: GPIO.output (pinNum, GPIO. LOW) dacă starea în ['off', ' low ']: instrucțiune de returnare 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)

Salvați și închideți fișierul.

Porniți serverul balon cu:

sudo python light_control.py

Lăsați ngrok și light_control.py să ruleze

Pasul 4: Script Python pentru controlul fanilor

Deschideți o nouă sesiune de terminal și creați un nou fișier python numit fan_control.py:

nano fan_control.py

Copiați / lipiți următorul cod în noul fișier:

din flacon import Flacon

din flask_ask import Ask, statement, convert_errors import RPi. GPIO ca 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 cu excepția Exception as e: return statement ('Pin number nu este valid. ') GPIO.setup (pinNum, GPIO. OUT) if status in [' on ',' high ']: GPIO.output (pinNum, GPIO. LOW) if status in [' off ',' low ']: Instrucțiunea de returnare GPIO.output (pinNum, GPIO. HIGH) („Întoarcerea {} luminilor din camera de zi”. Format (stare)) dacă _name_ == '_main_': port = 4500 app.run (host = '0.0.0.0 ', port = port)

Salvați și închideți fișierul.

Porniți serverul balon cu:

sudo python fan_control.py

Lăsați ngrok, light_control.py și fan_control.py să ruleze

Pasul 5: Instalarea și configurarea pachetului LIRC

Pentru a controla televizorul, trebuie să configurați un pin pe Raspberry Pi pentru a genera semnale în infraroșu (IR) pentru televizorul dvs. specific. Deschideți terminalul și introduceți următoarea comandă pentru a instala un pachet LIRC care emulează semnalele în infraroșu ale multor telecomenzi.

sudo apt-get install lirc

Apoi, trebuie să activați și să configurați modulul kernel lirc_rpi. Pentru aceasta, deschideți module în editorul Nano

sudo nano / etc / modules

Adăugați liniile de mai jos în fișier (asigurați-vă că parametrul gpio_out_pin indică pinul care controlează LED-ul IR):

lirc_devlirc_rpi gpio_out_pin = 17

Apoi, deschideți fișierul hardware.conf în Nano ca înainte cu sudo:

sudo nano /etc/lirc/hardware.conf

Adăugați următoarea configurație în fișier:

LIRCD_ARGS = "- uinput" LOAD_MODULES = adevărat

DRIVER = "implicit"

DEVICE = "/ dev / lirc0"

MODULES = "lirc_rpi"

LIRCD_CONF = ""

LIRCMD_CONF = ""

Acum, reporniți Raspberry Pi:

sudo reboot

Pasul 6: Script Python pentru control TV

Deschideți o nouă sesiune de terminal și creați un nou fișier python numit ir_control.py:

nano ir_control.py

Accesați

Găsiți o telecomandă care este compatibilă cu televizorul dvs. În cazul meu, am un televizor Sanyo care funcționează cu fișierul de configurare sanyo-tv01. Odată ce ați găsit un fișier care acceptă televizorul dvs., deschideți-l și consultați opțiunile de comandă.

Copiați / lipiți următorul cod în noul fișier și înlocuiți sanyo-tv01 cu numele fișierului care funcționează cu televizorul dvs. De asemenea, asigurați-vă că comenzile TV sunt acceptate de fișierul de configurare al televizoarelor; Este posibil să trebuiască să modificați comenzile KEY_POWER, KEY_VIDEO, KEY_VOLUMEUP, KEY_VOLUMEDOWN și KEY_MUTE pentru a funcționa corect cu fișierul de configurare al televizorului:

din flask import Flaskde la flask_ask import Ask, statement, convert_errors import RPi. GPIO ca 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): if status in ['turn on']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER") return statement ('Turning the TV') elif status in ['turn off']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER ") return statement ('Turning the TV') elif status in ['change input']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") return statement ('Schimbarea intrării pe televizor') starea elif în ['crește volumul']: 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 ('Volumul crescător la televizor') starea elif în ['reduce volumul']: 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 ") declarație de returnare ('Volumul scăzut la televizor') starea elif în ['mute']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_MUTE ") declarație de returnare ('Muting the TV') status elif în ['unmute ']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") instrucțiune return (' Unmuting the TV ') else: return statement (' Remote function not found. ') if _name_ ==' _main_ ': port = 5000 app.run (gazdă = '0.0.0.0', port = port)

Salvați și închideți fișierul.

Porniți serverul balon cu:

sudo python ir_control.py

Lăsați toate cele trei ferestre terminale ngrok, light_control.py, fan_control.py și ir_control.py în funcțiune

Pasul 7: conectați-vă la contul AWS

Conectați-vă la contul AWS
Conectați-vă la contul AWS

Mai întâi creați sau conectați-vă la contul dvs. de dezvoltator AWS și deschideți lista de abilități Alexa.

Pasul 8: Configurare abilități TV Alexa

Configurare abilități TV Alexa
Configurare abilități TV Alexa

Selectați „Adăugați o abilitate nouă”.

Setați Numele abilității la „Trigger TV” și Numele invocării la cuvântul (cuvintele) pe care doriți să îl utilizați pentru a activa abilitatea.

Faceți clic pe „Următorul” pentru a continua.

Copiați / lipiți următoarele în caseta „Schemă de intenție”:

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

Apoi, faceți clic pe „Adăugați un tip de slot”

Introduceți funcția TV_ în câmpul „Introduceți tipul”.

Introduceți următoarele valori în câmpul „Introduceți valori”:

aprinde

opri schimbare intrare creștere volum scădere volum dezactivare dezactivare

Apoi, copiați / lipiți următoarele în caseta „Exemple de enunțuri”:

GPIOControlIntent {status}

GPIOControlIntent {status} după {amount}

Faceți clic pe „Următorul” pentru a continua.

Selectați „HTTPS” ca tip de punct final al serviciului și selectați o regiune. Introduceți adresa URL ngrok de la pasul 2 și faceți clic pe „Următorul”. Adresa URL ar trebui să fie ceva de genul:

ed6ea04d.ngrok.io

Faceți clic pe „Următorul” pentru a continua și apăsați „Salvare”.

Pasul 9: Lights Alexa Skill Setup

Lights Alexa Skill Setup
Lights Alexa Skill Setup

Închideți abilitatea deschisă și selectați „Adăugați o abilitate nouă”.

Setați Numele abilității la „Controlul luminilor” și Numele invocării la cuvântul (cuvintele) pe care doriți să îl utilizați pentru a activa abilitatea.

Faceți clic pe „Următorul” pentru a continua. Copiați / lipiți următoarele în caseta „Schemă de intenție”:

{

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

Apoi, faceți clic pe „Adăugați un tip de slot”.

Introduceți „LIGHTS_CONTROL” în câmpul „Enter Type”.

Introduceți următoarele valori în câmpul „Introduceți valori”:

pe

oprit

Apoi, copiați / lipiți următoarele în caseta „Exemple de enunțuri”:

LightsControlIntent turn {status}

Faceți clic pe „Următorul” pentru a continua. Selectați „HTTPS” ca tip de punct final al serviciului și selectați o regiune. Introduceți adresa URL ngrok de la pasul 2 și faceți clic pe „Următorul”. Adresa URL ar trebui să fie ceva de genul:

ed6ea04d.ngrok.io

Faceți clic pe „Următorul” pentru a continua și apăsați „Salvare”.

Pasul 10: Configurarea abilităților Alexa Fan

Configurarea abilităților Alexa Alexa
Configurarea abilităților Alexa Alexa

Închideți abilitatea deschisă și selectați „Adăugați o abilitate nouă”.

Setați Numele abilității la „Control fan” și Numele invocării la cuvântul (cuvintele) pe care doriți să îl utilizați pentru a activa abilitatea.

Faceți clic pe „Următorul” pentru a continua.

Copiați / lipiți următoarele în caseta „Schemă de intenție”:

{

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

Apoi, faceți clic pe „Adăugați un tip de slot”.

Introduceți „FAN_CONTROL” în câmpul „Introduceți tipul”.

Introduceți următoarele valori în câmpul „Introduceți valori”:

pe

oprit

Apoi, copiați / lipiți următoarele în caseta „Exemple de enunțuri”:

FANControlIntent turn {status}

Faceți clic pe „Următorul” pentru a continua. Selectați „HTTPS” ca tip de punct final al serviciului și selectați o regiune. Introduceți adresa URL ngrok de la pasul 2 și faceți clic pe „Următorul”. Adresa URL ar trebui să fie ceva de genul:

ed6ea04d.ngrok.io

Faceți clic pe „Următorul” pentru a continua și apăsați „Salvare”.

Pasul 11: Construiește Ciruit

Construiește Ciruit
Construiește Ciruit

Conectați circuitul așa cum se arată în diagramă. Am folosit un modul de releu JBtek 8 canale DC 5V pentru a mă conecta la casele mele, la linia 120v și la masă.

Pasul 12: Comenzi Alexa

Acum, următoarele comenzi pot fi comunicate lui Alexa pentru a vă controla camera de zi.

Recomandat: