Sommario:
- Passaggio 1: configurazione iniziale
- Passaggio 2: configurazione di Ngrok
- Passaggio 3: script Python per il controllo dell'interruttore della luce
- Passaggio 4: script Python per il controllo della ventola
- Passaggio 5: installazione e configurazione del pacchetto LIRC
- Passaggio 6: script Python per il controllo della TV
- Passaggio 7: accesso all'account AWS
- Passaggio 8: configurazione delle abilità di Alexa TV
- Passaggio 9: accende la configurazione delle abilità di Alexa
- Passaggio 10: configurazione delle abilità di Alexa dei fan
- Passaggio 11: costruisci il circuito
- Passaggio 12: comandi di Alexa
2025 Autore: John Day | [email protected]. Ultima modifica: 2025-01-13 06:57
Controlla la TV, le luci e la ventola del tuo soggiorno con Alexa (Amazon Echo o Dot) e Raspberry Pi GPIO.
Passaggio 1: configurazione iniziale
Ho usato un Raspberry Pi 2 e un'immagine Raspbian Jessie scaricata da
Una volta effettuato l'accesso, inserisci i seguenti comandi per installare i pacchetti richiesti e le librerie 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
Passaggio 2: configurazione di Ngrok
Visita https://ngrok.com/download e ottieni l'ultima versione di Linux ARM come zip e decomprimi nella home directory:
unzip /home/pi/ngrok-stable-linux-arm.zip
Apri un nuovo terminale e inserisci il seguente comando:
sudo./ngrok http 4000
Apri un altro nuovo terminale e inserisci il seguente comando:
sudo./ngrok http 4500
Apri il terzo nuovo terminale e inserisci il seguente comando:
sudo./ngrok http 5000
Passaggio 3: script Python per il controllo dell'interruttore della luce
Apri una nuova sessione di terminale e crea un nuovo file python chiamato light_control.py:
nano light_control.py
Copia/incolla il seguente codice nel nuovo file:
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 tranne Eccezione come e: return statement('Numero pin non valido.') GPIO.setup(pinNum, GPIO. OUT) se lo stato in ['on', 'high']: GPIO.output(pinNum, GPIO. LOW) se lo stato in ['off', ' low']: GPIO.output(pinNum, GPIO. HIGH) return statement('Turning {} the Living Room Lights'.format(status)) if _name_ == '_main_': port = 4000 app.run(host=' 0.0.0.0', porta=porta)
Salva e chiudi il file.
Avvia il server flask con:
sudo python light_control.py
Lascia in esecuzione sia ngrok che light_control.py
Passaggio 4: script Python per il controllo della ventola
Apri una nuova sessione di terminale e crea un nuovo file python chiamato fan_control.py:
nano fan_control.py
Copia/incolla il seguente codice nel nuovo file:
from flask import Flask
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 tranne Eccezione come e: return statement('Pin number non valido.') GPIO.setup(pinNum, GPIO. OUT) se lo stato in ['on', 'high']: GPIO.output(pinNum, GPIO. LOW) se lo stato in ['off', 'low']: GPIO.output(pinNum, GPIO. HIGH) return statement('Turning {} the Living Room Lights'.format(status)) if _name_ == '_main_': port = 4500 app.run(host='0.0.0.0 ', porta=porta)
Salva e chiudi il file.
Avvia il server flask con:
sudo python fan_control.py
Lascia entrambi ngrok, light_control.py e fan_control.py in esecuzione
Passaggio 5: installazione e configurazione del pacchetto LIRC
Per controllare la TV devi configurare un pin sul Raspberry Pi per generare segnali a infrarossi (IR) per la tua TV specifica. Apri il terminale e digita il seguente comando per installare un pacchetto LIRC che emuli i segnali infrarossi di molti telecomandi.
sudo apt-get install lirc
Successivamente, è necessario abilitare e configurare il modulo del kernel lirc_rpi. Per farlo, apri i moduli nell'editor Nano
sudo nano /etc/modules
Aggiungi le righe sottostanti al file (assicurati che il parametro gpio_out_pin punti al pin che controlla il LED IR):
lirc_devlirc_rpi gpio_out_pin=17
Quindi, apri il file hardware.conf in Nano come prima con sudo:
sudo nano /etc/lirc/hardware.conf
Aggiungi la seguente configurazione al file:
LIRCD_ARGS="--uinput"LOAD_MODULES=true
DRIVER="predefinito"
DISPOSITIVO="/dev/lirc0"
MODULI="lirc_rpi"
LIRCD_CONF=""
LIRCMD_CONF=""
Ora riavvia il Raspberry Pi:
sudo reboot
Passaggio 6: script Python per il controllo della TV
Apri una nuova sessione di terminale e crea un nuovo file python chiamato ir_control.py:
nano ir_control.py
Vai a
Trova un telecomando compatibile con la tua TV. Nel mio caso ho una Sanyo TV che funziona con il file di configurazione sanyo-tv01. Una volta trovato un file che supporta la tua TV, aprilo e controlla le opzioni del comando.
Copia/incolla il seguente codice nel nuovo file e sostituisci sanyo-tv01 con il nome del file che funziona con la tua TV. Assicurati anche che i comandi tv siano supportati dal file di configurazione della tua TV; Potrebbe essere necessario modificare i comandi KEY_POWER, KEY_VIDEO, KEY_VOLUMEUP, KEY_VOLUMEDOWN e KEY_MUTE per funzionare correttamente con il file di configurazione della TV:
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): if status in ['accendere']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_POWER") dichiarazione di ritorno('accendere la TV') stato elif in ['spegnere']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_POWER") return statement('Spegnimento 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('Modifica input sulla TV') elif status in ['aumenta volume']: 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 volume sulla TV') elif status in ['riduzione volume']: 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("irsend-tv01 SEND_ONUMEDOWN") ") return statement('Diminuzione del volume sulla TV') elif status in ['mute']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") return statement('Mute la TV') elif status in ['unmute ']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") return statement('Riattivazione dell'audio della TV') else: return statement('Funzione remota non trovata.') if _name_ == '_main_': port = 5000 app.run(host='0.0.0.0', porta=porta)
Salva e chiudi il file.
Avvia il server flask con:
sudo python ir_control.py
Lascia tutte e tre le finestre del terminale ngrok, light_control.py, fan_control.py e ir_control.py in esecuzione
Passaggio 7: accesso all'account AWS
Per prima cosa crea o accedi al tuo account sviluppatore AWS e apri il tuo elenco di Alexa Skills.
Passaggio 8: configurazione delle abilità di Alexa TV
Seleziona "Aggiungi una nuova abilità".
Imposta il nome dell'abilità su "Trigger TV" e il nome di invocazione sulla parola o sulle parole che desideri utilizzare per attivare l'abilità.
Fare clic su "Avanti" per continuare.
Copia/incolla quanto segue nella casella "Schema di intenti":
{ "intenti": [{
"slots": [{ "name": "status", "type": "TV_Function" }, { "name": "amount", "type": "AMAZON. NUMBER" }], "intent": "GPIOControlIntent " }] }
Quindi, fai clic su "Aggiungi tipo di slot"
Immettere TV_Function nel campo "Inserisci tipo".
Inserisci i seguenti valori nel campo "Inserisci valori":
accendere
disattiva cambia ingresso aumenta il volume diminuisci il volume muto riattiva l'audio
Quindi, copia/incolla quanto segue nella casella "Enunciati di esempio":
GPIOControlIntent {stato}
GPIOControlIntent {status} per {amount}
Fare clic su "Avanti" per continuare.
Seleziona "HTTPS" come tipo di endpoint del servizio e seleziona una regione. Inserisci l'URL ngrok dal passaggio 2 e fai clic su "Avanti". L'URL dovrebbe essere qualcosa del tipo:
ed6ea04d.ngrok.io
Fare clic su "Avanti" per continuare e premere "Salva".
Passaggio 9: accende la configurazione delle abilità di Alexa
Chiudi l'abilità aperta e seleziona "Aggiungi una nuova abilità".
Imposta il nome dell'abilità su "Controllo luci" e il nome di invocazione sulle parole che vuoi usare per attivare l'abilità.
Fare clic su "Avanti" per continuare. Copia/incolla quanto segue nella casella "Schema di intenti":
{
"intents": [{ "slots": [{ "name": "status", "type": "LIGHTS_CONTROL" }], "intent": "LightsControlIntent" }] }
Quindi, fai clic su "Aggiungi tipo di slot".
Inserisci "LIGHTS_CONTROL" nel campo "Inserisci tipo".
Inserisci i seguenti valori nel campo "Inserisci valori":
Su
spento
Quindi, copia/incolla quanto segue nella casella "Enunciati di esempio":
LightsControlIntento svolta {status}
Fare clic su "Avanti" per continuare. Seleziona "HTTPS" come tipo di endpoint del servizio e seleziona una regione. Inserisci l'URL ngrok del passaggio 2 e fai clic su "Avanti". L'URL dovrebbe essere qualcosa del tipo:
ed6ea04d.ngrok.io
Fare clic su "Avanti" per continuare e premere "Salva".
Passaggio 10: configurazione delle abilità di Alexa dei fan
Chiudi l'abilità aperta e seleziona "Aggiungi una nuova abilità".
Imposta il nome dell'abilità su "Controllo fan" e il nome di invocazione sulle parole che vuoi usare per attivare l'abilità.
Fare clic su "Avanti" per continuare.
Copia/incolla quanto segue nella casella "Schema di intenti":
{
"intents": [{ "slots": [{ "name": "status", "type": "FAN_CONTROL" }], "intent": "FANControlIntent" }] }
Quindi, fai clic su "Aggiungi tipo di slot".
Inserisci "FAN_CONTROL" nel campo "Inserisci tipo".
Inserisci i seguenti valori nel campo "Inserisci valori":
Su
spento
Quindi, copia/incolla quanto segue nella casella "Espressioni di esempio":
FANControlIntento turno {status}
Fare clic su "Avanti" per continuare. Seleziona "HTTPS" come tipo di endpoint del servizio e seleziona una regione. Inserisci l'URL ngrok del passaggio 2 e fai clic su "Avanti". L'URL dovrebbe essere qualcosa del tipo:
ed6ea04d.ngrok.io
Fare clic su "Avanti" per continuare e premere "Salva".
Passaggio 11: costruisci il circuito
Collegare il circuito come mostrato nello schema. Ho usato un modulo relè JBtek a 8 canali DC 5V per collegarmi alla linea e alla terra AC 120v della mia casa.
Passaggio 12: comandi di Alexa
Ora i seguenti comandi possono essere pronunciati con Alexa per controllare il tuo soggiorno.