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

Alexa Raspberry Pi Relay Controller: 6 βήματα
Alexa Raspberry Pi Relay Controller: 6 βήματα

Βίντεο: Alexa Raspberry Pi Relay Controller: 6 βήματα

Βίντεο: Alexa Raspberry Pi Relay Controller: 6 βήματα
Βίντεο: Как управлять несколькими реле ESP8266 ESP01 | УдаленныйXY | ФЛПрог 2024, Νοέμβριος
Anonim
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller

Δημιούργησα αυτό το Instructable για να μοιραστώ τις εμπειρίες μου με την ενσωμάτωση συσκευών IOT με την Alexa του Amazon.

Αυτό το έργο επιτρέπει στον πίνακα ρελέ που είναι συνδεδεμένος με ένα βατόμουρο pi να ελέγχεται από τον ελεγκτή smarthome.

Έχει δοκιμαστεί με την Alexa, αλλά φαίνεται επίσης ότι λειτουργεί καλά με τη Samsung Smartthings και άλλες διεπαφές ελέγχου, καθώς μιμείται μια σειρά από πρίζες Belkin Wemo.

Υπάρχουν ΠΟΛΛΑ παραδείγματα βασισμένα στον εξαιρετικό κώδικα FAUXMO, αλλά αυτό σήμαινε εκμάθηση python και δεν μου έδωσε τον λεπτομερή έλεγχο που χρειαζόμουν για τις συσκευές μου και έτσι αποφάσισα να ξαναδημιουργήσω ένα από την αρχή χρησιμοποιώντας το C ως βασική γλώσσα κωδικοποίησης.

Επίσης, δεν ήθελα να πάω στα βάθη του κώδικα λάμδα στο Amazon.com, οπότε το έχω κρατήσει πολύ απλό.

Έχω δημοσιεύσει την πηγή και τις σημειώσεις στο Github:

github.com/Switchdoctorstu/StuPiMo

Το σεμινάριο είναι πραγματικά να καλύψει τον τρόπο λειτουργίας του και να δημοσιεύσει τις σημειώσεις μου σε περίπτωση που βοηθήσει άλλους.

Βήμα 1: Προμήθειες και συνδέσεις

Προμήθειες και συνδέσεις
Προμήθειες και συνδέσεις
Προμήθειες και συνδέσεις
Προμήθειες και συνδέσεις
Προμήθειες και συνδέσεις
Προμήθειες και συνδέσεις

Τα πράγματα που χρειάζεστε είναι άμεσα διαθέσιμα στο Amazon / EBay:

  • Βατόμουρο PI *
  • Τροφοδοτικό Pi
  • Συνδέσεις Dupont
  • Πίνακας ρελέ
  • Παλαιό καλώδιο micro USB (στο μισό για ισχύ για την κάρτα ρελέ)

Οποιοδήποτε βατόμουρο Pi θα λειτουργήσει, το έχω δοκιμάσει σε μοντέλο Β και μηδέν.

*Εάν χρησιμοποιείτε το Pi Zero, θα χρειαστείτε έναν προσαρμογέα δικτύου OTG (εκτός αν αγοράσετε την έκδοση "W" με buit σε WiFi)

Θα χρειαστεί να συνδέσετε το Pi στο δίκτυο.

Χρησιμοποιήστε τους συνδετήρες dupont για να συνδέσετε την κάρτα ρελέ στο Pi.

Σημειώστε ότι η κάρτα ρελέ πρέπει να χρησιμοποιεί εξωτερική τροφοδοσία (αφαιρέστε τη σύνδεση και συνδεθείτε με εξωτερική 5v). Θα λειτουργήσει με τροφοδοσία από το PI, αλλά δεν συνιστάται για λειτουργία της παραγωγής.

Για τη ρύθμισή μου χρησιμοποίησα εξωτερικό USB HUB. Αυτό παρέχει την ισχύ στο PI.

Έκοψα επίσης το άκρο ενός παλιού καλωδίου USB και τροφοδότησα τα ρελέ από μια 2η σύνδεση USB στο διανομέα για να παραμείνω ασφαλής. Η έκδοση "παραγωγής" μου χρησιμοποιεί ένα μικρό τροφοδοτικό λειτουργίας 5V 5A. Πάλι έκοψα το καλώδιο USB στο μισό για να τροφοδοτήσω το Pi μέσω Micro-USB και έκοψα δύο από τους συνδετήρες dupont για να τροφοδοτήσω την πλακέτα ρελέ. Υπάρχουν 4 καλώδια στο καλώδιο USB, τα περισσότερα χρησιμοποιούν κόκκινο/μαύρο για να υποδηλώσουν την παροχή 5v, αλλά σε περίπτωση αμφιβολίας χρησιμοποιήστε μετρητή για να βεβαιωθείτε ότι έχετε τα σωστά καλώδια.

Οι ακίδες ρελέ στον πίνακα συνδέονται με τις αντίστοιχες καρφίτσες GPIO στην κεφαλίδα PI.

Ο κώδικας σάς επιτρέπει να επιλέξετε τις καρφίτσες GPIO, αλλά η προεπιλογή που χρησιμοποίησα ήταν:

  1. Καρφίτσα ρελέ 1 - Γείωση
  2. Ρελέ καρφίτσα 2 - Ρελέ 1 - GPIO 0
  3. Ρελέ καρφίτσα 3 - Ρελέ 2 - GPIO 1
  4. Καρφίτσα ρελέ 4 - Ρελέ 3 - GPIO 2
  5. Καρφίτσα ρελέ 5 - Ρελέ 4 - GPIO 3
  6. Καρφίτσα ρελέ 6 - Ρελέ 5 - GPIO 4
  7. Καρφίτσα ρελέ 7 - Ρελέ 6 - GPIO 5
  8. Καρφίτσα ρελέ 8 - Ρελέ 7 - GPIO 6
  9. Καρφίτσα ρελέ 9 - Ρελέ 8 - GPIO 7
  10. Ρελέ Pin 10 - +5v για λογική

Βήμα 2: Ρύθμιση PI

Δεν πρόκειται να δημιουργήσω ξανά ένα σεμινάριο για το πώς να ενεργοποιήσετε το PI σας και να συνδεθείτε στο δίκτυο.

Υπάρχουν πολλοί οδηγοί, συμπεριλαμβανομένου ενός εξαιρετικού οδηγού:

www.instructables.com/id/Ultimate-Raspberr…

Θα πρέπει να φτάσετε στο σημείο όπου το PI είναι ορατό στο δίκτυο και μπορείτε να συνδεθείτε σε αυτό.

Δεν έχει σημασία αν αυτό είναι μέσω Ethernet ή Ασύρματο.

Αυτό το έργο μπορεί να ολοκληρωθεί μόνο με το Raspberry PI χρησιμοποιώντας το Geany Programmers Editor, αλλά προσωπικά το βρίσκω ευκολότερο να κάνω την προετοιμασία κώδικα σε υπολογιστή χρησιμοποιώντας το Visual Studio ή το Eclipse (ή ακόμα και το Σημειωματάριο ++) και στη συνέχεια να το ανεβάσω στο PI για εντοπισμό σφαλμάτων χρησιμοποιώντας ένα Σύνδεση VNC. Και πάλι δεν πρόκειται να το καλύψω εδώ καθώς υπάρχουν πολλά εξαιρετικά εκπαιδευτικά για τη ρύθμιση του VNC σε RPi.

Το μόνο που χρειάζεστε είναι να φτάσετε στο σημείο όπου μπορείτε να ανεβάσετε και να μεταγλωττίσετε τον κώδικα.

Μια σημείωση που είναι σημαντική είναι ότι δεδομένου ότι ο χειριστής UPNP απαιτεί πολλαπλή εκπομπή UDP, οι διεπαφές που χρησιμοποιούνται πρέπει να ρυθμιστούν στη λειτουργία "Promiscuous".

Αυτό μπορεί να γίνει στη γραμμή εντολών:

pi@raspberrypi: if $ ifconfig eth0 promisc

και / ή

pi@raspberrypi: if $ ifconfig wlan0 promisc

Αυτό πρέπει να γίνει μόνιμο, οπότε επεξεργάστηκα το /etc/rc.local

sudo nano / etc / rc.local

για να συμπεριλάβετε τη γραμμή:

sudo ifconfig eth0 promisc

μετά το πρώτο σύνολο γραμμών # banner για να διασφαλίσετε ότι οι διεπαφές έχουν ρυθμιστεί κατά την εκκίνηση.

Βήμα 3: Λήψη και σύνταξη του κώδικα

Ο ίδιος ο κώδικας βρίσκεται στο Gspub repsoitory μου.

github.com/Switchdoctorstu/StuPiMo/blob/ma…

ενώ υπάρχουν «σωστοί» τρόποι κλωνοποίησης του αποθετηρίου. μου φάνηκε πιο εύκολο να ανοίξω το πρόγραμμα επεξεργασίας Geany στην επιφάνεια εργασίας Pi και να επικολλήσω τον κώδικα.

Ομοίως, εάν χρησιμοποιείτε τη γραμμή εντολών.

Δημιουργήστε έναν νέο κατάλογο

mkdir Stu

Αλλάξτε σε αυτό

cd Stu

Δημιουργήστε ένα νέο αρχείο κειμένου

nano StuPiMo.c

Αντιγράψτε τον κώδικα από το Github raw και επικολλήστε τον στο νέο αρχείο

Αποθήκευση και έξοδος.

Μόλις έχετε το αρχείο ως αντικείμενο πηγαίου κώδικα C, μπορείτε να το μεταγλωττίσετε χρησιμοποιώντας

gcc -o StuPiMo StuPiMo.c -l wiringPi

Σημειώστε ότι το "-l wiringPi" είναι απαραίτητο για να διασφαλίσετε ότι οι μεταγλωττιστές συνδέονται στην απαιτούμενη βιβλιοθήκη καλωδίωσης.

Ο κώδικας μπορεί στη συνέχεια να εκτελεστεί χρησιμοποιώντας

./StuPiMo

Και πάλι, εάν θέλετε αυτό να τρέχει κατά την εκκίνηση, χρησιμοποιήστε την εντολή:

sudo nano /etc/rc.local

για να προσθέσετε την ακόλουθη γραμμή

sudo/home/pi/Stu/StuPiMo &

στο αρχείο σας /etc/rc.local. Μην ξεχάσετε να αποθηκεύσετε το αρχείο σας κατά την έξοδο.

Σημειώστε ότι το "&" είναι απαραίτητο για να διασφαλιστεί ότι γεννιέται μια υπο-διαδικασία για να διασφαλιστεί ότι το σενάριο δεν αποκλείεται σε αυτό το σημείο.

Βήμα 4: Χρησιμοποιώντας το

Μόλις ενεργοποιήσετε τον κωδικό, ζητήστε από την Alexa να "Ανακαλύψει συσκευές" και θα βρει και τις 8 εικονικές συσκευές Wemo.

Τότε είναι απλά μια περίπτωση να πούμε: "Alexa turn on socket 1" ή "Alexa turn off socket 6" κ.λπ. και το σχετικό ρελέ θα αλλάξει.

Βήμα 5: Πώς λειτουργεί ο κώδικας

Ο κώδικας λειτουργεί εξομοιώνοντας μια σειρά συσκευών υποδοχής Belkin Wemo.

Για να το πετύχει αυτό πρέπει να χειριστεί 2 κύριες λειτουργίες

  • ένας χειριστής μετάδοσης ανακάλυψης UPNP
  • ένα «χειριστή συσκευών» (ένα ανά εικονική συσκευή) για τη διαχείριση των εντολών που αποστέλλονται στη συσκευή και τις απαιτούμενες αποκρίσεις.

Ένα χαρακτηριστικό "μπόνους" είναι ότι δημοσιεύει επίσης μια ιστοσελίδα για να επιτρέψει τη διαχείριση των συσκευών.

Χειριστής UPNP

Ο χειριστής UPNP ανοίγει μια υποδοχή για την παρακολούθηση πακέτων πρωτοκόλλου SSDP στη θύρα 239.255.255.250 1900.

Απαντά σε τυχόν ερωτήματα «M-SEARCH» που έρχονται με ένα πακέτο απόκρισης ανακάλυψης που ανακοινώνει τους μεμονωμένους εξομοιωτές wemo σε όποιον το ρωτήσει.

Διαχειριστής συσκευών

Οι χειριστές συσκευών (ένας ανά εικονική συσκευή) παρακολουθούν μια σειρά θυρών IP και ανταποκρίνονται σε αιτήματα.

Θα εξυπηρετήσει μια απάντηση setup.xml όταν σας ζητηθεί

Θα προβάλλει ένα αρχείο περιγραφής συμβάντος όταν του ζητηθεί

Θα απαντήσει σε αίτημα GETBINARYSTATE

Θα επεξεργαστεί και θα απαντήσει σε αίτημα SETBINARYSTATE

Διακομιστής Ιστού

Ο διακομιστής ιστού είναι μια απλή ρουτίνα που δημιουργεί μια φόρμα HTML που περιέχει ένα κουμπί ανά ρελέ.

Θα απαντήσει στα κουμπιά που πιέζονται και θα αλλάξει ανάλογα την κατάσταση του ρελέ.

Βήμα 6: Προσαρμογή και φιλικά ονόματα

Προσαρμογή και φιλικά ονόματα
Προσαρμογή και φιλικά ονόματα

Δεν έχω τρελαθεί με τον κώδικα για να τον κρατήσω απλό και επεξεργάσιμο.

Τα βασικά μπορούν να προσαρμοστούν με ορισμούς στην αρχή του κώδικα:

// καθολικοί ορισμοί#define WEBPORT 5353 // θύρα για εκτέλεση του διακομιστή ιστού

#define NUMDEVICES 8 // Αριθμός εικονικών συσκευών για δημιουργία

#define PORTBASE 43450 // βασική θύρα IP για αύξηση από

Το WEBPORT είναι ο αριθμός θύρας στον οποίο λειτουργεί ο ενσωματωμένος διακομιστής ιστού. Αυτό θα μπορούσε να καθίσει στα 80 για να διευκολύνει τα πράγματα, αλλά διαπίστωσα ότι ήταν σε αντίθεση με το tomcat ή άλλες υπηρεσίες που εκτελούνται τοπικά.

Το NUMDEVICES καθορίζει τον αριθμό των μεμονωμένων εξομοιωτών WEMO για εκκίνηση. Εάν έχετε κάρτα ρελέ 2 θυρών, ορίστε αυτήν σε 2, 4 θύρες = 4 κ.λπ.

Τα φιλικά ονόματα για τις συσκευές ορίζονται σε μια ρουτίνα που ονομάζεται setup_names:

int setup_names (char char [NUMDEVICES] [NAMELEN]) {int i = 0;

// χρησιμοποιήστε αυτόν τον βρόχο

για (i = 0; i <NUMDEVICES; i ++) {

sprintf (φιλικό , "Υποδοχή %d", i + 1);

}

// ή τον ακόλουθο μη αυτόματο πίνακα για να συμπληρώσετε ονόματα συσκευών

/*

strcpy (φιλικό [0], "Υπνοδωμάτιο TV");

strcpy (φιλικό [1], "Ηλεκτρική κουβέρτα");

strcpy (φιλικό [2], "Φωτιστικό υπνοδωματίου");

strcpy (φιλικό [3], "Υποδοχή 4");

strcpy (φιλικό [4], "Υποδοχή 5");

strcpy (φιλικό [5], "Υποδοχή 6");

strcpy (φιλικό [6], "Υποδοχή 7");

strcpy (φιλικό [7], "Υποδοχή 8");

*/

επιστροφή i?

}

Χρησιμοποίησα ένα βρόχο για να καλέσω κάθε συσκευή «Socket n», αλλά μπορείτε να διαγράψετε αυτόν τον βρόχο και να προσθέσετε τα δικά σας φιλικά ονόματα (απλώς βεβαιωθείτε ότι προσθέσατε τον ίδιο αριθμό με τις NUMDEVICES) εάν διαγράψετε το / * * /

Μην ξεχάσετε να μεταγλωττίσετε ξανά τον κώδικα εάν κάνετε οποιεσδήποτε αλλαγές.

Συνιστάται: