Super Simple Raspberry Pi 433MHz Home Automation: 7 Βήματα
Super Simple Raspberry Pi 433MHz Home Automation: 7 Βήματα
Anonim
Super Simple Raspberry Pi 433MHz Home Automation
Super Simple Raspberry Pi 433MHz Home Automation

Αυτό το σεμινάριο είναι ένα από τα πολλά όταν πρόκειται για τη χρήση ενός Raspberry Pi για τον έλεγχο ασύρματων συσκευών στο σπίτι. Όπως και πολλά άλλα, θα σας δείξει πώς να χρησιμοποιήσετε ένα φτηνό ζεύγος πομπού/δέκτη που είναι συνδεδεμένο στο Pi σας για να αλληλεπιδράσετε με συσκευές που λειτουργούν στη συνηθισμένη ζώνη ραδιοσυχνοτήτων 433MHz. Θα σας δείξει συγκεκριμένα πώς μπορείτε να ενεργοποιήσετε ή να απενεργοποιήσετε οποιαδήποτε ηλεκτρική συσκευή χρησιμοποιώντας το Pi σας, μεταδίδοντας εντολές σε ένα σύνολο από τηλεχειριζόμενες πρίζες 433MHz.

Γιατί δημιούργησα αυτό το σεμινάριο εάν υπάρχουν τόσα πολλά ήδη; Κυρίως επειδή σχεδόν όλα τα άλλα μαθήματα που συνάντησα φαινόταν να περιπλέκουν τα πράγματα, ειδικά από την πλευρά του λογισμικού. Παρατήρησα ότι βασίζονταν σε μεγάλο βαθμό σε βιβλιοθήκες τρίτων, σενάρια ή αποσπάσματα κώδικα για να κάνουν όλη τη δουλειά. Πολλοί δεν θα εξηγούσαν καν τι έκανε ο υποκείμενος κώδικας - απλώς θα σας ζητούσαν να σπρώξετε δύο ή τρία κομμάτια λογισμικού στο Pi σας και να εκτελέσετε μια δέσμη εντολών, χωρίς ερωτήσεις. Iθελα πολύ να δοκιμάσω και να χρησιμοποιήσω το Pi μου για να ενεργοποιήσω και να απενεργοποιήσω τις ηλεκτρικές συσκευές γύρω από το σπίτι μου χρησιμοποιώντας μια σειρά από τηλεχειριζόμενες πρίζες 433MHz, αλλά ήθελα να δημιουργήσω τη δική μου έκδοση του συστήματος που θα μπορούσα να καταλάβω, ελπίζοντας να εξαλείψω την ανάγκη χρησιμοποιήστε βιβλιοθήκες ή σενάρια κάποιου άλλου.

Αυτό αφορά αυτό το σεμινάριο. Η πλευρά λογισμικού αυτού του συστήματος αποτελείται από δύο πολύ απλά σενάρια Python - ένα για λήψη και εγγραφή σημάτων και ένα για μετάδοση αυτών των σημάτων πίσω στις ασύρματες πρίζες. Η πραγματική λήψη/μετάδοση του σήματος βασίζεται μόνο στην εύχρηστη βιβλιοθήκη RPi. GPIO, η οποία, τουλάχιστον για μένα, ήταν προεγκατεστημένη με το Raspbian. Αυτή η βιβλιοθήκη μπορεί επίσης να εισαχθεί απευθείας στην Python.

Για αυτό το έργο θα χρειαστείτε:

Ένα Raspberry Pi. Οποιοδήποτε μοντέλο πρέπει να λειτουργεί, χρησιμοποίησα ένα κιτ εκκίνησης all-in-one, αλλά ίσως χρειάζεστε μόνο την κεντρική μονάδα

Ζεύγος πομπού/δέκτη 433MHz. Αυτά που χρησιμοποιούνται πιο συχνά σε αυτό το είδος έργου φαίνεται να είναι αυτά. Αγοράζοντας ένα πακέτο πέντε, όπως αυτό που συνδέεται, διασφαλίζει ότι έχετε λίγα ανταλλακτικά

Σετ τηλεχειριζόμενες πρίζες 433MHz. Χρησιμοποίησα αυτά που θα συνιστούσα ανεπιφύλακτα, αλλά υπάρχουν αμέτρητα διαθέσιμα μοντέλα. Απλά βεβαιωθείτε ότι λειτουργούν σε αυτήν τη συχνότητα

Ορισμένα αξεσουάρ για την κατασκευή κυκλωμάτων. Θα συνιστούσα να χρησιμοποιήσετε ένα breadboard και μερικά καλώδια για να κάνετε τη διαδικασία κατασκευής του κυκλώματος όσο το δυνατόν πιο εύκολη.

[Αν αποφασίσετε να αγοράσετε οποιοδήποτε από αυτά τα προϊόντα, θα το εκτιμούσα ιδιαίτερα αν έχετε πρόσβαση στις καταχωρίσεις χρησιμοποιώντας τους παραπάνω συνδέσμους - με αυτόν τον τρόπο, παίρνω ένα μικρό μερίδιο των κερδών χωρίς επιπλέον κόστος για εσάς!]

Βήμα 1: Ρύθμιση της μονάδας δέκτη

Ρύθμιση της μονάδας δέκτη
Ρύθμιση της μονάδας δέκτη

Προτού μπορέσετε να χρησιμοποιήσετε το Pi σας για να στείλετε εντολές στις τηλεχειριζόμενες πρίζες, πρέπει να γνωρίζετε σε ποια συγκεκριμένα σήματα ανταποκρίνονται. Οι περισσότερες τηλεχειριζόμενες πρίζες αποστέλλονται με ένα ακουστικό που μπορεί να χρησιμοποιηθεί για να ενεργοποιήσετε ή να απενεργοποιήσετε συγκεκριμένες μονάδες. Στην περίπτωση αυτών που αγόρασα, το ακουστικό διαθέτει τέσσερις σειρές ζευγαρωμένων κουμπιών ON/OFF, καθένα από τα οποία στέλνει ένα σήμα ON ή OFF σε μια συγκεκριμένη μονάδα υποδοχής.

Αυτό δημιουργεί ένα ερώτημα - πώς ξέρουμε ποια κουμπιά αντιστοιχούν σε ποια πρίζα; Αυτό εξαρτάται πραγματικά από το μοντέλο που έχετε. Ένας από τους κύριους λόγους που επέλεξα το συγκεκριμένο στυλ πρίζας (που συνδέεται στην εισαγωγή) είναι ότι οι μονάδες μπορούν να διαμορφωθούν με φυσικό διακόπτη για να ανταποκρίνεται μια συγκεκριμένη πρίζα σε ένα συγκεκριμένο σύνολο κουμπιών ON/OFF στο ακουστικό. Αυτό σημαίνει επίσης ότι μπορείτε να αποσυνδέσετε και να μετακινήσετε τις πρίζες στο σπίτι γνωρίζοντας ότι κάθε μονάδα θα ανταποκρίνεται πάντα στα ίδια σήματα ON/OFF.

Αφού καταλάβετε πώς αλληλεπιδρούν οι πρίζες σας με το ακουστικό, θα χρειαστεί να χρησιμοποιήσετε τη μονάδα δέκτη 433MHz (στην παραπάνω εικόνα) για να «μυρίσετε» τους κωδικούς που αποστέλλονται από το ακουστικό. Αφού καταγράψετε τις κυματομορφές αυτών των κωδικών, μπορείτε να τις αντιγράψετε χρησιμοποιώντας την Python και να τις στείλετε χρησιμοποιώντας τη μονάδα πομπού.

Το πρώτο πράγμα που πρέπει να κάνετε εδώ είναι να συνδέσετε τις ακίδες του δέκτη σας στις σωστές ακίδες GPIO στο Pi. Η μονάδα δέκτη έχει τέσσερις ακίδες, αλλά χρειάζονται μόνο τρεις από αυτές. Νομίζω ότι και οι δύο κεντρικές ακίδες δίνουν την ίδια έξοδο, οπότε πρέπει να συνδεθείτε μόνο σε έναν από αυτούς (εκτός εάν θέλετε να μεταδώσετε τα λαμβανόμενα σήματα σε δύο ξεχωριστούς ακροδέκτες GPIO).

Η παραπάνω εικόνα συνοψίζει λίγο πολύ την καλωδίωση. Κάθε ακίδα στον δέκτη μπορεί να συνδεθεί απευθείας με τον αντίστοιχο ακροδέκτη στο Pi. Χρησιμοποιώ ένα breadboard και καλώδια για να κάνω τη διαδικασία λίγο πιο κομψή. Σημειώστε ότι μπορείτε να επιλέξετε οποιαδήποτε καρφίτσα δεδομένων GPIO για σύνδεση σε οποιαδήποτε από τις κεντρικές ακίδες δέκτη. Χρησιμοποίησα την καρφίτσα με την ένδειξη "23" στην κεφαλίδα Pi μου.

ΣΗΜΑΝΤΙΚΟ: Εάν συνδέσετε τον πείρο με την ένδειξη «3v3» στην παραπάνω εικόνα σε έναν πείρο υψηλότερης τάσης στο Pi (π.χ. 5v), πιθανότατα θα καταστρέψετε το Pi καθώς οι ακίδες GPIO δεν μπορούν να ανεχθούν τάσεις άνω των 3v3. Εναλλακτικά, μπορείτε να το τροφοδοτήσετε με 5v και να ρυθμίσετε ένα διαχωριστή τάσης για να στείλετε μια ασφαλή τάση στον ακροδέκτη DATA.

Το εύρος του δέκτη δεν θα είναι πολύ μεγάλο σε αυτήν την τάση, ειδικά αν δεν είναι συνδεδεμένη κεραία. Ωστόσο, δεν χρειάζεστε μεγάλη απόσταση εδώ - εφόσον ο δέκτης μπορεί να πάρει τα σήματα από το ακουστικό όταν κρατιούνται το ένα δίπλα στο άλλο, αυτό είναι το μόνο που χρειαζόμαστε.

Βήμα 2: Μυρίζοντας τους κωδικούς ακουστικών

Μυρίζοντας τους κωδικούς του ακουστικού
Μυρίζοντας τους κωδικούς του ακουστικού

Τώρα που ο δέκτης σας είναι συνδεδεμένος στο Pi, μπορείτε να ξεκινήσετε το πρώτο συναρπαστικό στάδιο αυτού του έργου - το sniff. Αυτό περιλαμβάνει τη χρήση του συνημμένου σεναρίου Python για την εγγραφή του σήματος που μεταδίδεται από το ακουστικό όταν πατάτε κάθε κουμπί. Το σενάριο είναι πολύ απλό και θα συνιστούσα ανεπιφύλακτα να το ρίξετε μια ματιά πριν το εκτελέσετε - άλλωστε, το θέμα αυτού του έργου είναι ότι δεν θα τρέχετε τυφλά τον κώδικα κάποιου άλλου!

Πριν ξεκινήσετε αυτήν τη διαδικασία, θα πρέπει να βεβαιωθείτε ότι έχετε τις βιβλιοθήκες Python που απαιτούνται για την εκτέλεση του σεναρίου sniffer. Παρατίθενται στην κορυφή του σεναρίου:

από datetime εισαγωγή datetime

εισαγωγή matplotlib.pyplot ως pyplot εισαγωγή RPi. GPIO ως GPIO

Οι βιβλιοθήκες RPi. GPIO και datetime συμπεριλήφθηκαν με τη διανομή Raspbian, αλλά έπρεπε να εγκαταστήσω τη βιβλιοθήκη matplotlib ως εξής:

sudo apt-get install python-matplotlib

Αυτή η βιβλιοθήκη είναι μια βιβλιοθήκη γραφικών που χρησιμοποιείται συνήθως και είναι πολύ χρήσιμη ακόμη και εκτός αυτού του έργου, οπότε η εγκατάστασή της σίγουρα δεν μπορεί να βλάψει! Μόλις οι βιβλιοθήκες σας είναι ενημερωμένες, είστε έτοιμοι να ξεκινήσετε την εγγραφή δεδομένων. Δείτε πώς λειτουργεί το σενάριο:

Όταν εκτελείται (χρησιμοποιώντας την εντολή 'python ReceiveRF.py'), θα ρυθμίσει τις παραμέτρους του καθορισμένου πείρου GPIO ως είσοδο δεδομένων (το pin 23 από προεπιλογή). Στη συνέχεια, θα δειγματίζει συνεχώς τον πείρο και θα καταγράφει αν λαμβάνει ψηφιακό 1 ή 0. Αυτό συνεχίζεται για μια καθορισμένη διάρκεια (5 δευτερόλεπτα από προεπιλογή). Όταν συμπληρωθεί αυτό το χρονικό όριο, το σενάριο θα σταματήσει την εγγραφή δεδομένων και θα κλείσει την είσοδο GPIO. Στη συνέχεια εκτελεί μια μικρή μετα-επεξεργασία και σχεδιάζει τη λαμβανόμενη τιμή εισόδου σε σχέση με το χρόνο. Και πάλι, εάν έχετε ερωτήσεις σχετικά με το τι κάνει το σενάριο, πιθανότατα μπορείτε να τις απαντήσετε μόνοι σας αφού δείτε πώς λειτουργεί. Προσπάθησα να κάνω τον κώδικα όσο το δυνατόν πιο ευανάγνωστο και απλό.

Αυτό που πρέπει να κάνετε είναι να προσέξετε όταν το σενάριο υποδεικνύει ότι έχει ** Ξεκινήσει την εγγραφή **. Μόλις εμφανιστεί αυτό το μήνυμα, πρέπει να πατήσετε παρατεταμένα ένα από τα κουμπιά στο ακουστικό για περίπου ένα δευτερόλεπτο. Φροντίστε να το κρατήσετε κοντά στον δέκτη. Μόλις το σενάριο ολοκληρώσει την εγγραφή, θα χρησιμοποιήσει το matplotlib για να σχεδιάσει μια γραφική κυματομορφή του σήματος που έχει λάβει κατά τη διάρκεια του διαστήματος εγγραφής. Λάβετε υπόψη, εάν είστε συνδεδεμένοι στο Pi σας χρησιμοποιώντας έναν υπολογιστή -πελάτη SSH όπως το PuTTY, θα πρέπει επίσης να ανοίξετε μια εφαρμογή X11 για να επιτρέψετε την εμφάνιση της κυματομορφής. Χρησιμοποιώ το xMing για αυτό (και για άλλα πράγματα, όπως απομακρυσμένη τοποθέτηση επιφάνειας εργασίας στο Pi μου). Για να επιτρέψετε την εμφάνιση της γραφικής παράστασης, απλώς ξεκινήστε το xMing προτού εκτελέσετε το σενάριο και περιμένετε να εμφανιστούν τα αποτελέσματα.

Μόλις εμφανιστεί το παράθυρο matplotlib, η περιοχή ενδιαφέροντος μέσα στο οικόπεδο θα είναι αρκετά προφανής. Μπορείτε να χρησιμοποιήσετε τα χειριστήρια στο κάτω μέρος του παραθύρου για μεγέθυνση έως ότου μπορέσετε να διαλέξετε τα υψηλά και χαμηλά επίπεδα του σήματος που μεταδίδεται από το ακουστικό ενώ το κουμπί κρατιόταν πατημένο. Δείτε την παραπάνω εικόνα για παράδειγμα πλήρους κώδικα. Το σήμα πιθανότατα θα αποτελείται από πολύ σύντομους παλμούς που χωρίζονται από παρόμοιες χρονικές περιόδους όπου δεν λαμβάνεται σήμα. Αυτό το μπλοκ σύντομων παλμών θα ακολουθηθεί πιθανώς από μια μεγαλύτερη περίοδο όπου δεν λαμβάνεται τίποτα, μετά την οποία το μοτίβο θα επαναληφθεί. Αφού προσδιορίσετε το μοτίβο που ανήκει σε μία μόνο παρουσία του κώδικα, τραβήξτε ένα στιγμιότυπο οθόνης στο επάνω μέρος αυτής της σελίδας και συνεχίστε στο επόμενο βήμα για να το ερμηνεύσετε.

Βήμα 3: Μεταγραφή του Αποτέλεσμα Σήματος

Μεταγραφή του Αποτέλεσμα Σήματος
Μεταγραφή του Αποτέλεσμα Σήματος

Τώρα που έχετε εντοπίσει το μπλοκ περιοδικών υψηλών και χαμηλών τιμών που αντιστοιχεί στο σήμα ενός συγκεκριμένου κουμπιού, θα χρειαστείτε έναν τρόπο αποθήκευσης και ερμηνείας του. Στο παραπάνω παράδειγμα σήματος, θα παρατηρήσετε ότι υπάρχουν μόνο δύο μοναδικά μοτίβα που αποτελούν ολόκληρο το μπλοκ σήματος. Μερικές φορές βλέπετε ένα σύντομο υψηλό που ακολουθείται από ένα μακρύ χαμηλό, και μερικές φορές είναι το αντίθετο - ένα υψηλό υψηλό που ακολουθείται από ένα χαμηλό χαμηλό. Όταν μετέγραφα τα σήματά μου, αποφάσισα να χρησιμοποιήσω την ακόλουθη σύμβαση ονομασίας:

1 = short_on + long_off0 = long_on + short_off

Κοιτάξτε ξανά την επισημασμένη κυματομορφή και θα δείτε τι εννοώ. Αφού προσδιορίσετε τα ισοδύναμα μοτίβα στο σήμα σας, το μόνο που έχετε να κάνετε είναι να μετρήσετε τα 1 και 0 για να δημιουργήσετε την ακολουθία. Όταν μεταγράφεται, το παραπάνω σήμα μπορεί να γραφτεί ως εξής:

1111111111111010101011101

Τώρα απλά πρέπει να επαναλάβετε αυτή τη διαδικασία για να καταγράψετε και να μεταγράψετε τα σήματα που αντιστοιχούν στα άλλα κουμπιά του ακουστικού σας και έχετε ολοκληρώσει το πρώτο μέρος της διαδικασίας!

Για να μπορέσετε να στείλετε ξανά τα σήματα χρησιμοποιώντας τον πομπό, υπάρχει λίγη δουλειά ακόμα. Ο χρονισμός μεταξύ των υψηλών και χαμηλών που αντιστοιχούν σε 1 ή 0 είναι πολύ σημαντικός και πρέπει να βεβαιωθείτε ότι γνωρίζετε πόσο πραγματικά διαρκεί ένα 'short_on' ή 'long_off'. Για τους κωδικούς μου, υπήρχαν τρία κομμάτια πληροφοριών χρονισμού που έπρεπε να εξαγάγω για να αναπαράγω τα σήματα:

  • Η διάρκεια ενός «μικρού» διαστήματος, δηλαδή η αρχή του 1 ή το τέλος του 0.
  • Η διάρκεια ενός «μεγάλου» διαστήματος, δηλαδή το τέλος του 1 ή η αρχή του 0.
  • Η διάρκεια ενός «παρατεταμένου» διαστήματος. Παρατήρησα ότι όταν κρατούσα πατημένο ένα κουμπί στο φορητό ακουστικό, υπήρχε μια περίοδος «παρατεταμένης απενεργοποίησης» μεταξύ κάθε επαναλαμβανόμενης παρουσίας του μπλοκ σήματος. Αυτή η καθυστέρηση χρησιμοποιείται για συγχρονισμό και έχει σταθερή διάρκεια.

Για να καθορίσετε αυτές τις τιμές χρονισμού, μπορείτε να χρησιμοποιήσετε τη συνάρτηση ζουμ στο παράθυρο matplotlib για να κάνετε μεγέθυνση μέχρι το τέλος και να τοποθετήσετε τον κέρσορα στα σχετικά μέρη του σήματος. Η ανάγνωση της θέσης του δρομέα στο κάτω μέρος του παραθύρου θα σας επιτρέψει να καθορίσετε πόσο ευρύ είναι κάθε τμήμα του σήματος που αντιστοιχεί σε ένα μεγάλο, μικρό ή εκτεταμένο διάστημα. Σημειώστε ότι ο άξονας x του γραφήματος αντιπροσωπεύει το χρόνο και το στοιχείο x της ανάγνωσης του δρομέα είναι σε μονάδες δευτερολέπτων. Για μένα, τα πλάτη ήταν τα εξής (σε δευτερόλεπτα):

  • short_delay = 0.00045
  • long_delay = 0.00090 (διπλάσιο από ένα 'short')
  • εκτεταμένη_καθυστέρηση = 0,0096

Βήμα 4: Ρύθμιση της μονάδας πομπού

Ρύθμιση της μονάδας πομπού
Ρύθμιση της μονάδας πομπού

Αφού συλλέξετε τους κωδικούς και τα δεδομένα χρονισμού, μπορείτε να αποσυνδέσετε τη μονάδα δέκτη, καθώς δεν θα τη χρειάζεστε πλέον. Στη συνέχεια, μπορείτε να συνδέσετε τον πομπό απευθείας στις σχετικές ακίδες Pi GPIO, όπως φαίνεται στην παραπάνω εικόνα. Έχω διαπιστώσει ότι οι ακίδες στις μονάδες πομπού φέρουν ετικέτα, γεγονός που διευκολύνει τη διαδικασία.

Σε αυτήν την περίπτωση, είναι εντάξει να τροφοδοτήσετε τη μονάδα χρησιμοποιώντας την τροφοδοσία 5v από το Pi καθώς ο ακροδέκτης DATA δεν θα στέλνει σήματα στο Pi, αλλά θα τα λαμβάνει μόνο. Επίσης, ένα τροφοδοτικό 5v θα παρέχει μεγαλύτερη εμβέλεια μετάδοσης από τη χρήση της τροφοδοσίας 3v3. Και πάλι, μπορείτε να συνδέσετε τον ακροδέκτη DATA σε οποιοδήποτε κατάλληλο pin στο Pi. Χρησιμοποίησα τον πείρο 23 (το ίδιο με τον δέκτη).

Ένα άλλο πράγμα που θα συνιστούσα να κάνετε είναι να προσθέσετε μια κεραία στη μικρή τρύπα στην επάνω δεξιά γωνία του πομπού. Χρησιμοποίησα ένα κομμάτι ίσου σύρματος μήκους 17 εκατοστών. Ορισμένες πηγές προτείνουν ένα κουλουριασμένο σύρμα παρόμοιου μήκους. Δεν είμαι σίγουρος ποιο είναι καλύτερο, αλλά το καλώδιο παρέχει αρκετό εύρος για να ενεργοποιήσω/απενεργοποιήσω τις πρίζες από οποιαδήποτε θέση στο μικρό μου διαμέρισμα. Είναι καλύτερο να κολλήσετε την κεραία, αλλά μόλις έβγαλα μέρος του πλαστικού από το σύρμα και τύλιξα τον χαλκό μέσα από την τρύπα.

Μόλις συνδεθεί ο πομπός, αυτό είναι όλο το πρόγραμμα εγκατάστασης υλικού! Το μόνο που μένει να κάνετε τώρα είναι να τοποθετήσετε τις πρίζες σας γύρω από το σπίτι και να ρίξετε μια ματιά στο πρόγραμμα πομπού.

Βήμα 5: Μετάδοση σημάτων χρησιμοποιώντας το Pi

Εδώ έρχεται το δεύτερο σενάριο Python. Έχει σχεδιαστεί για να είναι εξίσου απλό με το πρώτο, αν όχι περισσότερο. Και πάλι, παρακαλώ κατεβάστε το και κοιτάξτε τον κώδικα. Θα χρειαστεί να επεξεργαστείτε το σενάριο για να μεταδώσετε τα σωστά σήματα σύμφωνα με τα δεδομένα που καταγράψατε στο βήμα 3, οπότε τώρα είναι μια καλή στιγμή για να ρίξετε μια γρήγορη ματιά σε αυτό.

Οι βιβλιοθήκες που χρειάζονταν για την εκτέλεση αυτού του σεναρίου ήταν όλες προεγκατεστημένες στο Pi μου, επομένως δεν χρειάστηκε περαιτέρω εγκατάσταση. Παρατίθενται στην κορυφή του σεναρίου:

χρόνο εισαγωγής

εισαγωγή sys εισαγωγή RPi. GPIO ως GPIO

Κάτω από τις εισαγωγές της βιβλιοθήκης βρίσκονται οι πληροφορίες που θα πρέπει να επεξεργαστείτε. Δείτε πώς φαίνεται από προεπιλογή (αυτές είναι οι πληροφορίες που αντιστοιχούν στις πρίζες μου, όπως καθορίστηκαν χρησιμοποιώντας το βήμα 3):

a_on = '111111111111101010101011101'

a_off = '1111111111111010101010111' b_on = '1111111111101110101011101' b_off = '1111111111101110101010111' c_on = '1111111111101011101011101' c_off = '1111111111101011101010111' d_on = '1111111111101010111011101' d_off = '1111111111101010111010111' short_delay = 0,00045 long_delay = 0,00090 extended_delay = 0.0096

Εδώ έχουμε οκτώ συμβολοσειρές κώδικα (δύο για κάθε ζεύγος κουμπιών ενεργοποίησης/απενεργοποίησης στο ακουστικό μου - μπορεί να έχετε περισσότερους ή λιγότερους κωδικούς) ακολουθούμενες από τα τρία κομμάτια πληροφοριών χρονισμού που καθορίζονται επίσης στο βήμα 3. Αφιερώστε χρόνο για να βεβαιωθείτε ότι έχετε εισαγάγει σωστά αυτές τις πληροφορίες.

Μόλις είστε ικανοποιημένοι με τους κωδικούς/καθυστερήσεις που έχετε εισαγάγει στο σενάριο (μπορείτε να μετονομάσετε τις μεταβλητές συμβολοσειράς κώδικα, αν θέλετε), είστε σχεδόν έτοιμοι να δοκιμάσετε το σύστημα! Πριν το κάνετε, ρίξτε μια ματιά στη συνάρτηση transmit_code () στο σενάριο. Εδώ συμβαίνει η πραγματική αλληλεπίδραση με τον πομπό. Αυτή η συνάρτηση αναμένει μία από τις συμβολοσειρές κώδικα να αποσταλεί ως όρισμα. Στη συνέχεια ανοίγει τον καθορισμένο πείρο ως έξοδο GPIO και περνάει σε κάθε χαρακτήρα της συμβολοσειράς κώδικα. Στη συνέχεια, ενεργοποιεί ή απενεργοποιεί τον πομπό σύμφωνα με τις πληροφορίες χρονισμού που καταχωρίσατε για να δημιουργήσετε μια κυματομορφή που ταιριάζει με τη συμβολοσειρά κώδικα. Στέλνει κάθε κώδικα πολλές φορές (10 από προεπιλογή) για να μειώσει την πιθανότητα να χαθεί και αφήνει μια εκτεταμένη_ καθυστέρηση μεταξύ κάθε μπλοκ κώδικα, όπως ακριβώς και το ακουστικό.

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

python TransmitRF.py code_1 code_2…

Μπορείτε να μεταδώσετε πολλαπλές συμβολοσειρές κώδικα με μία μόνο εκτέλεση του σεναρίου. Για παράδειγμα, για να ενεργοποιήσετε τις υποδοχές (a) και (b) και να απενεργοποιήσετε την πρίζα (c), εκτελέστε το σενάριο με την ακόλουθη εντολή:

python TransmitRF.py a_on b_on c_off

Βήμα 6: Σημείωση για την ακρίβεια χρονισμού

Όπως αναφέρθηκε, ο χρονισμός μεταξύ των μεταδιδόμενων παλμών ενεργοποίησης/απενεργοποίησης είναι αρκετά σημαντικός. Το σενάριο TransmitRF.py χρησιμοποιεί τη λειτουργία python time.sleep () για να δημιουργήσει τις κυματομορφές με τα σωστά διαστήματα παλμών, αλλά πρέπει να σημειωθεί ότι αυτή η λειτουργία δεν είναι απόλυτα ακριβής. Το μήκος για το οποίο προκαλεί την αναμονή του σεναρίου πριν από την εκτέλεση της επόμενης λειτουργίας μπορεί να εξαρτάται από το φορτίο του επεξεργαστή τη δεδομένη στιγμή. Αυτός είναι ένας άλλος λόγος για τον οποίο το TransmitRF.py στέλνει κάθε κώδικα πολλές φορές - σε περίπτωση που η συνάρτηση time.sleep () δεν είναι σε θέση να κατασκευάσει σωστά μια δεδομένη παρουσία του κώδικα.

Προσωπικά δεν είχα ποτέ προβλήματα με το time.sleep () όσον αφορά την αποστολή των κωδικών. Ωστόσο, γνωρίζω ότι το time.sleep () τείνει να έχει σφάλμα περίπου 0,1 ms. Το προσδιόρισα χρησιμοποιώντας το συνημμένο σενάριο SleepTest.py το οποίο μπορεί να χρησιμοποιηθεί για να δώσει μια εκτίμηση για το πόσο ακριβής είναι η συνάρτηση time.sleep () του Pi σας. Για τις συγκεκριμένες πρίζες μου με τηλεχειρισμό, η συντομότερη καθυστέρηση που χρειάστηκα για να εφαρμόσω ήταν 0,45ms. Όπως είπα, δεν είχα προβλήματα με πρίζες που δεν ανταποκρίνονται, οπότε φαίνεται ότι τα 0.45 ± 0.1ms είναι αρκετά καλά.

Υπάρχουν άλλες μέθοδοι για να διασφαλιστεί ότι η καθυστέρηση είναι πιο ακριβής. για παράδειγμα, θα μπορούσατε να χρησιμοποιήσετε ένα ειδικό τσιπ PIC για να δημιουργήσετε τους κωδικούς, αλλά τέτοια πράγματα είναι πέρα από το πεδίο αυτού του σεμιναρίου.

Βήμα 7: Συμπέρασμα

συμπέρασμα
συμπέρασμα

Αυτό το έργο παρουσίασε μια μέθοδο για τον έλεγχο οποιασδήποτε ηλεκτρικής συσκευής χρησιμοποιώντας ένα Raspberry Pi και ένα σύνολο από τηλεχειριζόμενες πρίζες 433MHz, με έμφαση στην απλότητα και τη διαφάνεια. Αυτό είναι το πιο συναρπαστικό και ευέλικτο έργο για το οποίο έχω χρησιμοποιήσει το Pi μου και υπάρχουν απεριόριστες εφαρμογές γι 'αυτό. Εδώ είναι μερικά πράγματα που μπορώ τώρα να κάνω χάρη στο Pi μου:

  • Άναψε μια ηλεκτρική θερμάστρα δίπλα στο κρεβάτι μου μισή ώρα πριν χτυπήσει το ξυπνητήρι μου.
  • Σβήστε τη θερμάστρα μία ώρα μετά τον ύπνο.
  • Άναψε το φως δίπλα στο κρεβάτι μου όταν χτυπάει το ξυπνητήρι μου για να μην ξανακοιμηθώ.
  • και πολλά άλλα…

Για τις περισσότερες από αυτές τις εργασίες, χρησιμοποιώ τη λειτουργία crontab στο Linux. Αυτό σας επιτρέπει να ρυθμίσετε αυτόματες προγραμματισμένες εργασίες για την εκτέλεση του σεναρίου TransmitRF.py σε συγκεκριμένες ώρες. Μπορείτε επίσης να χρησιμοποιήσετε το Linux κατά την εντολή για εκτέλεση εφάπαξ εργασιών (οι οποίες, για μένα, έπρεπε να εγκατασταθούν ξεχωριστά χρησιμοποιώντας το 'sudo apt-get install at'). Για παράδειγμα, για να ενεργοποιήσω τη θερμάστρα μου μισή ώρα πριν χτυπήσει το ξυπνητήρι μου το επόμενο πρωί, το μόνο που χρειάζεται να κάνω είναι να πληκτρολογήσω:

στις 05:30

python TransmitRF.py c_on

Θα μπορούσατε επίσης να χρησιμοποιήσετε αυτό το έργο σε συνδυασμό με το σύστημα παρακολούθησης του σπιτιού μου Dropbox για τον έλεγχο συσκευών μέσω Διαδικτύου! Ευχαριστούμε για την ανάγνωση και αν θέλετε να διευκρινίσετε κάτι ή να μοιραστείτε τη γνώμη σας, παρακαλώ δημοσιεύστε ένα σχόλιο!