Πίνακας περιεχομένων:

Σαλόνι ελέγχου με Alexa και Raspberry Pi: 12 βήματα
Σαλόνι ελέγχου με Alexa και Raspberry Pi: 12 βήματα

Βίντεο: Σαλόνι ελέγχου με Alexa και Raspberry Pi: 12 βήματα

Βίντεο: Σαλόνι ελέγχου με Alexa και Raspberry Pi: 12 βήματα
Βίντεο: Как использовать Bixby 2024, Νοέμβριος
Anonim
Σαλόνι ελέγχου με Alexa και Raspberry Pi
Σαλόνι ελέγχου με Alexa και Raspberry Pi

Ελέγξτε την τηλεόραση, τα φώτα και τον ανεμιστήρα του σαλονιού σας με την Alexa (Amazon Echo ή Dot) και το Raspberry Pi GPIO.

Βήμα 1: Αρχική ρύθμιση

Χρησιμοποίησα ένα Raspberry Pi 2 και μια Raspbian Jessie εικόνα που κατεβάσατε από τη διεύθυνση

Μόλις συνδεθείτε, εισαγάγετε τις ακόλουθες εντολές για να εγκαταστήσετε τα απαιτούμενα πακέτα και βιβλιοθήκες 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

Βήμα 2: Ρύθμιση του Ngrok

Ρύθμιση Ngrok
Ρύθμιση Ngrok

Επισκεφτείτε τη διεύθυνση https://ngrok.com/download και λάβετε την πιο πρόσφατη έκδοση Linux ARM ως zip και αποσυμπιέστε μέσα στον αρχικό κατάλογο:

αποσυμπιέστε /home/pi/ngrok-stable-linux-arm.zip

Ανοίξτε ένα νέο τερματικό και εισαγάγετε την ακόλουθη εντολή:

sudo./ngrok http 4000

Ανοίξτε ένα άλλο νέο τερματικό και εισαγάγετε την ακόλουθη εντολή:

sudo./ngrok http 4500

Ανοίξτε το τρίτο νέο τερματικό και εισαγάγετε την ακόλουθη εντολή:

sudo./ngrok http 5000

Βήμα 3: Python Script for Light Switch Control

Ανοίξτε μια νέα περίοδο λειτουργίας τερματικού και δημιουργήστε ένα νέο αρχείο python με όνομα light_control.py:

nano light_control.py

Αντιγράψτε/επικολλήστε τον ακόλουθο κώδικα στο νέο αρχείο:

από την εισαγωγή φιάλης Φιάλη από την εισαγωγή flask_ask Ζητήστε, δήλωση, convert_errors εισαγωγή RPi. GPIO ως εισαγωγή καταγραφής εισαγωγής GPIO 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 εκτός Εξαίρεση ως e: δήλωση επιστροφής ('Ο αριθμός καρφιτσών δεν είναι έγκυρος.') GPIO.setup (pinNum, GPIO. OUT) εάν η κατάσταση είναι σε ['on', 'high']: GPIO.output (pinNum, GPIO. LOW) εάν η κατάσταση είναι σε ['off', ' low ']: GPIO.output (pinNum, GPIO. HIGH) statement return (' Turning {} the Living Room Lights'.format (status)) if _name_ == '_main_': port = 4000 app.run (host = ' 0.0.0.0 ', θύρα = θύρα)

Αποθηκεύστε και κλείστε το αρχείο.

Εκκινήστε το διακομιστή φιάλης με:

sudo python light_control.py

Αφήστε το ngrok και το light_control.py σε λειτουργία

Βήμα 4: Python Script για Fan Control

Ανοίξτε μια νέα περίοδο λειτουργίας τερματικού και δημιουργήστε ένα νέο αρχείο python με όνομα fan_control.py:

nano fan_control.py

Αντιγράψτε/επικολλήστε τον ακόλουθο κώδικα στο νέο αρχείο:

από φιάλη εισαγωγής Φιάλη

από flask_ask import Ρωτήστε, δήλωση, convert_errors εισαγωγή RPi. GPIO ως 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 εκτός από την εξαίρεση ως e: statement statement ('Pin number δεν είναι έγκυρο. ') GPIO.setup (pinNum, GPIO. OUT) εάν η κατάσταση στα [' on ',' high ']: GPIO.output (pinNum, GPIO. LOW) εάν η κατάσταση σε [' off ',' low ']: GPIO.output (pinNum, GPIO. HIGH) statement return ('Turning {} the Living Room Lights'.format (status)) if _name_ ==' _main_ ': port = 4500 app.run (host =' 0.0.0.0 ', port = port)

Αποθηκεύστε και κλείστε το αρχείο.

Εκκινήστε το διακομιστή φιάλης με:

sudo python fan_control.py

Αφήστε να λειτουργούν τόσο το ngrok, το light_control.py και το fan_control.py

Βήμα 5: Εγκατάσταση και διαμόρφωση του πακέτου LIRC

Για να ελέγξετε την τηλεόραση, πρέπει να διαμορφώσετε μια καρφίτσα στο Raspberry Pi ώστε να παράγει σήματα υπέρυθρων (IR) για τη συγκεκριμένη τηλεόρασή σας. Ανοίξτε το τερματικό και εισαγάγετε την ακόλουθη εντολή για να εγκαταστήσετε ένα πακέτο LIRC που προσομοιώνει τα υπέρυθρα σήματα πολλών τηλεχειριστηρίων.

sudo apt-get install lirc

Στη συνέχεια, πρέπει να ενεργοποιήσετε και να διαμορφώσετε τη μονάδα πυρήνα lirc_rpi. Για να το κάνετε αυτό, ανοίξτε ενότητες στον επεξεργαστή Nano

sudo nano /etc /modules

Προσθέστε τις παρακάτω γραμμές στο αρχείο (Βεβαιωθείτε ότι η παράμετρος gpio_out_pin δείχνει στην ακίδα που ελέγχει το LED LED):

lirc_devlirc_rpi gpio_out_pin = 17

Στη συνέχεια, ανοίξτε το αρχείο hardware.conf στο Nano όπως πριν με το sudo:

sudo nano /etc/lirc/hardware.conf

Προσθέστε την ακόλουθη διαμόρφωση στο αρχείο:

LIRCD_ARGS = "-uinput" LOAD_MODULES = true

ΟΔΗΓΟΣ = "προεπιλογή"

ΣΥΣΚΕΥΗ = "/dev/lirc0"

MODULES = "lirc_rpi"

LIRCD_CONF = ""

LIRCMD_CONF = ""

Τώρα, επανεκκινήστε το Raspberry Pi:

sudo επανεκκίνηση

Βήμα 6: Python Script for TV Control

Ανοίξτε μια νέα περίοδο λειτουργίας τερματικού και δημιουργήστε ένα νέο αρχείο python με όνομα ir_control.py:

nano ir_control.py

Μεταβείτε στη διεύθυνση

Βρείτε ένα τηλεχειριστήριο που είναι συμβατό με την τηλεόρασή σας. Στην περίπτωσή μου, έχω μια τηλεόραση Sanyo που λειτουργεί με το αρχείο ρυθμίσεων sanyo-tv01. Μόλις βρείτε ένα αρχείο που υποστηρίζει την τηλεόρασή σας, ανοίξτε το και αναζητήστε τις επιλογές εντολών.

Αντιγράψτε/επικολλήστε τον ακόλουθο κώδικα στο νέο αρχείο και αντικαταστήστε το sanyo-tv01 με το όνομα αρχείου που λειτουργεί με την τηλεόρασή σας. Επίσης, βεβαιωθείτε ότι οι εντολές τηλεόρασης υποστηρίζονται από το αρχείο διαμόρφωσης των τηλεοράσεών σας. Σως χρειαστεί να τροποποιήσετε τις εντολές KEY_POWER, KEY_VIDEO, KEY_VOLUMEUP, KEY_VOLUMEDOWN και KEY_MUTE για να λειτουργήσει σωστά με το αρχείο ρυθμίσεων της τηλεόρασής σας:

από την εισαγωγή φιάλης Φιάλη από την εισαγωγή flask_ask Ζητήστε, δήλωση, convert_errors εισαγωγή RPi. GPIO ως εισαγωγή καταγραφής εισαγωγής GPIO 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") statement return ('Turning the TV') elif status in ['turn off']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER ") δήλωση επιστροφής (" Απενεργοποίηση της τηλεόρασης ") elif κατάσταση στο ['αλλαγή εισαγωγής']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") return δήλωση ('Αλλαγή εισόδου στην τηλεόραση') elif κατάσταση στο ['αύξηση έντασης']: 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 ") δήλωση επιστροφής ('Αύξηση έντασης στην τηλεόραση') elif κατάσταση σε ['μείωση έντασης']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VOLUMED 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_VOLUMEDOWY" ") δήλωση επιστροφής (" Μείωση έντασης στην τηλεόραση ") elif κατάσταση στο ['mute']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_MUTE ") statement return ('Muting the TV') elif status in ['unmute ']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") statement return (' Unmuting the TV ') else: statement return (' Remote function not found. ') if _name_ ==' _main_ ': port = 5000 app.run (host = '0.0.0.0', port = port)

Αποθηκεύστε και κλείστε το αρχείο.

Εκκινήστε το διακομιστή φιάλης με:

sudo python ir_control.py

Αφήστε να λειτουργούν και τα τρία τερματικά παράθυρα ngrok, light_control.py, fan_control.py και ir_control.py

Βήμα 7: Συνδεθείτε στο λογαριασμό AWS

Συνδεθείτε στο λογαριασμό AWS
Συνδεθείτε στο λογαριασμό AWS

Πρώτα δημιουργήστε ή συνδεθείτε στον λογαριασμό προγραμματιστή σας AWS και ανοίξτε τη λίστα με τις δεξιότητες Alexa.

Βήμα 8: Ρύθμιση δεξιοτήτων TV Alexa

Ρύθμιση δεξιοτήτων TV Alexa
Ρύθμιση δεξιοτήτων TV Alexa

Επιλέξτε "Προσθήκη νέας δεξιότητας".

Ορίστε το Skill Name σε 'Trigger TV' και το Invocation Name στις λέξεις που θέλετε να χρησιμοποιήσετε για να ενεργοποιήσετε την ικανότητα.

Κάντε κλικ στο «Επόμενο» για να συνεχίσετε.

Αντιγράψτε/επικολλήστε τα παρακάτω στο πλαίσιο "Σχέδιο πρόθεσης":

"slots": [{"name": "status", "type": "TV_Function"}, {"name": "ποσό", "type": "AMAZON. NUMBER"}], "πρόθεση": "GPIOControlIntent "}]}

Στη συνέχεια, κάντε κλικ στην επιλογή "Προσθήκη τύπου υποδοχής"

Πληκτρολογήστε TV_Function στο πεδίο "Enter Type".

Εισαγάγετε τις ακόλουθες τιμές στο πεδίο "Εισαγωγή τιμών":

ανάβω

απενεργοποίηση αλλαγής εισόδου αύξηση έντασης μείωση έντασης σίγαση σίγαση

Στη συνέχεια, αντιγράψτε/επικολλήστε τα ακόλουθα στο πλαίσιο "Sample Utterances":

GPIOControlIntent {status}

GPIOControlIntent {status} κατά {ποσό}

Κάντε κλικ στο «Επόμενο» για να συνεχίσετε.

Επιλέξτε "HTTPS" ως Τύπος τελικού σημείου υπηρεσίας και επιλέξτε μια περιοχή. Εισαγάγετε τη διεύθυνση URL θερμότητας από το βήμα 2 και κάντε κλικ στο "Επόμενο". Η διεύθυνση URL πρέπει να είναι κάτι σαν:

ed6ea04d.ngrok.io

Κάντε κλικ στο «Επόμενο» για να συνεχίσετε και πατήστε «Αποθήκευση».

Βήμα 9: Lights Alexa Skill Setup

Lights Alexa Skill Setup
Lights Alexa Skill Setup

Κλείστε την ανοιχτή δεξιότητα και επιλέξτε "Προσθήκη νέας δεξιότητας".

Ορίστε το όνομα δεξιοτήτων σε "Έλεγχος φώτων" και το όνομα επίκλησης στις λέξεις (ες) που θέλετε να χρησιμοποιήσετε για να ενεργοποιήσετε την ικανότητα.

Κάντε κλικ στο «Επόμενο» για να συνεχίσετε. Αντιγράψτε/επικολλήστε τα παρακάτω στο πλαίσιο "Σχέδιο πρόθεσης":

{

"intents": [{"slots": [{"name": "status", "type": "LIGHTS_CONTROL"}], "πρόθεση": "LightsControlIntent"}]}

Στη συνέχεια, κάντε κλικ στην επιλογή "Προσθήκη τύπου υποδοχής".

Εισαγάγετε "LIGHTS_CONTROL" στο πεδίο "Enter Type".

Εισαγάγετε τις ακόλουθες τιμές στο πεδίο "Εισαγωγή τιμών":

επί

μακριά από

Στη συνέχεια, αντιγράψτε/επικολλήστε τα ακόλουθα στο πλαίσιο "Sample Utterances":

LightsControlIntent στροφή {status}

Κάντε κλικ στο «Επόμενο» για να συνεχίσετε. Επιλέξτε "HTTPS" ως Τύπος τελικού σημείου υπηρεσίας και επιλέξτε μια περιοχή. Εισαγάγετε τη διεύθυνση URL του ngrok από το βήμα 2 και κάντε κλικ στο «Επόμενο». Η διεύθυνση URL πρέπει να είναι κάτι σαν:

ed6ea04d.ngrok.io

Κάντε κλικ στο «Επόμενο» για να συνεχίσετε και πατήστε «Αποθήκευση».

Βήμα 10: Ρύθμιση δεξιοτήτων Fan Alexa

Ρύθμιση δεξιοτήτων ανεμιστήρα Alexa
Ρύθμιση δεξιοτήτων ανεμιστήρα Alexa

Κλείστε την ανοιχτή δεξιότητα και επιλέξτε "Προσθήκη νέας δεξιότητας".

Ορίστε το Όνομα δεξιοτήτων σε 'Έλεγχος θαυμαστών' και το Όνομα πρόσκλησης στις λέξεις (ες) που θέλετε να χρησιμοποιήσετε για να ενεργοποιήσετε την ικανότητα.

Κάντε κλικ στο «Επόμενο» για να συνεχίσετε.

Αντιγράψτε/επικολλήστε τα παρακάτω στο πλαίσιο "Σχέδιο πρόθεσης":

{

"intents": [{"slots": [{"name": "status", "type": "FAN_CONTROL"}], "πρόθεση": "FANControlIntent"}]}

Στη συνέχεια, κάντε κλικ στην επιλογή "Προσθήκη τύπου υποδοχής".

Εισαγάγετε "FAN_CONTROL" στο πεδίο "Enter Type".

Εισαγάγετε τις ακόλουθες τιμές στο πεδίο "Εισαγωγή τιμών":

επί

μακριά από

Στη συνέχεια, αντιγράψτε/επικολλήστε τα ακόλουθα στο πλαίσιο "Sample Utterances":

FANControlIntent στροφή {status}

Κάντε κλικ στο «Επόμενο» για να συνεχίσετε. Επιλέξτε «HTTPS» ως Τύπος τελικού σημείου υπηρεσίας και επιλέξτε μια περιοχή. Εισαγάγετε τη διεύθυνση URL του ngrok από το βήμα 2 και κάντε κλικ στο «Επόμενο». Η διεύθυνση URL πρέπει να είναι κάτι σαν:

ed6ea04d.ngrok.io

Κάντε κλικ στο «Επόμενο» για να συνεχίσετε και πατήστε «Αποθήκευση».

Βήμα 11: Φτιάξτε το Ciruit

Φτιάξτε το Ciruit
Φτιάξτε το Ciruit

Συνδέστε το κύκλωμα όπως φαίνεται στο διάγραμμα. Χρησιμοποίησα ένα JBtek 8 Channel DC 5V Relay Module για να συνδεθώ στη γραμμή και τη γείωση AC 120v του σπιτιού μου.

Βήμα 12: Εντολές Alexa

Τώρα μπορείτε να μιλήσετε στην Alexa τις ακόλουθες εντολές για να ελέγξετε το σαλόνι σας.

Συνιστάται: