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

The Raspberry Pi-Arduino-SignalR Home Automation Hub: 11 βήματα (με εικόνες)
The Raspberry Pi-Arduino-SignalR Home Automation Hub: 11 βήματα (με εικόνες)

Βίντεο: The Raspberry Pi-Arduino-SignalR Home Automation Hub: 11 βήματα (με εικόνες)

Βίντεο: The Raspberry Pi-Arduino-SignalR Home Automation Hub: 11 βήματα (με εικόνες)
Βίντεο: 2018-11-20 Learning SignalR - Home Automation with .NET Core and Hubitat 2024, Νοέμβριος
Anonim
Το Raspberry Pi-Arduino-SignalR Home Automation Hub
Το Raspberry Pi-Arduino-SignalR Home Automation Hub

Μετά από μερικά IBLEs του προλογίου μου που δημοσιεύτηκαν εδώ και εδώ, αυτό το έργο κάνει το πρώτο βήμα προς τη δημιουργία μιας βασικής έκδοσης ενός λειτουργικού Κέντρου αυτοματισμού σπιτιού.

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

Επομένως, αυτός ο κόμβος αυτοματισμού αποτελείται από τα ακόλουθα στοιχεία:

Μια βάση δεδομένων SQL Server 2012 που:

  • αποθηκεύει μια λίστα προκαθορισμένων κωδικών Υπέρυθρων (IR) σε έναν πίνακα μαζί με ένα μοναδικό "κλειδί κωδικού"
  • τα κλειδιά κωδικού ονομάζονται διαισθητικά (από τον χρήστη) έτσι ώστε να προσδιοριστεί ο σκοπός των σχετικών κωδικών IR τους

Μια εφαρμογή Ιστού σε πραγματικό χρόνο ASP. NET SignalR Hub που:

  • περιμένει και λαμβάνει "κλειδιά κωδικού" ως εντολές από έναν χρήστη που αντιμετωπίζει τον υπολογιστή -πελάτη HTML
  • όταν ληφθεί, συνδέεται με τη βάση δεδομένων SQL και ανακτά έναν κωδικό IR χρησιμοποιώντας το παρεχόμενο κλειδί κωδικού
  • μεταδίδει τον ανακτημένο κώδικα IR σε πελάτη Python SignalR

Ένας πελάτης που αντιμετωπίζει το πρόγραμμα -πελάτη HTML SignalR Dashboard που:

  • επικοινωνεί ένα μοναδικό κλειδί κωδικού στο Hub μέσω των API του πελάτη jQuery SignalR
  • κάθε κουμπί στον Πίνακα ελέγχου θα αντιπροσωπεύει ένα μοναδικό κλειδί κωδικού που καταγράφεται στον πίνακα βάσης δεδομένων SQL

Μια εφαρμογή παρασκηνίου Python SignalR που εκτελείται στο Raspberry Pi 2.0, η οποία:

  • λαμβάνει κωδικούς IR ως εντολές από το Hub
  • αναζητά οριοθέτες στον Κώδικα IR και διασπά τον πολύ μεγάλο κώδικα σε τμήματα
  • επικοινωνεί μέσω Serial port στο Arduino και γράφει κάθε τμήμα διαδοχικά

Ένα Arduino IR Transmitter Sketch που:

  • περιμένει και λαμβάνει καθένα από τα τμήματα κώδικα IR πάνω από τη σειριακή θύρα
  • συγκεντρώνει τα τμήματα κώδικα σε έναν πίνακα buffer IR Code
  • συσκευάζει το buffer σε μια εντολή IR Transmit χρησιμοποιώντας τη βιβλιοθήκη IRLib Arduino

Εάν η συσκευή -στόχος βρίσκεται κοντά στον πομπό IR, τότε η συσκευή (μπορεί) να αντιδράσει στο σήμα IR που μεταδίδεται από το Arduino

ΣΗΜΕΙΩΣΗ

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

Timeρα να κυλήσετε.

Βήμα 1: Αυτό που χρειάζεστε, πριν από αυτό που χρειάζεστε

Αυτό που χρειάζεστε, πριν από αυτό που χρειάζεστε
Αυτό που χρειάζεστε, πριν από αυτό που χρειάζεστε
Αυτό που χρειάζεστε, πριν από αυτό που χρειάζεστε
Αυτό που χρειάζεστε, πριν από αυτό που χρειάζεστε
Αυτό που χρειάζεστε, πριν από αυτό που χρειάζεστε
Αυτό που χρειάζεστε, πριν από αυτό που χρειάζεστε

Αυτό το διδακτικό απογειώνεται με μερικές από τις εργασίες που έγιναν προηγουμένως, οι οποίες κατέληξαν επίσης στο τελευταίο μου IBLE.

Έτσι, προτού προχωρήσουμε σε αυτό που χρειαζόμαστε για αυτό το IBLE, συνιστάται να διαβάσετε αυτό το διδακτικό για κάποιο υπόβαθρο σχετικά με το πώς:

  1. Δημιουργήθηκε η υπέρυθρη βιβλιοθήκη Arduino IRLib
  2. Πώς καταγράφηκαν οι κωδικοί IR που χρησιμοποιήθηκαν σε αυτό το IBLE χρησιμοποιώντας έναν δέκτη IR
  3. Πώς χρησιμοποιήθηκαν οι καταγεγραμμένοι κωδικοί IR για τον έλεγχο της συσκευής στόχου μέσω ενός πομπού IR

Μετά την ολοκλήρωση αυτού του IBLE, ανέπτυξα μια διαδικτυακή εφαρμογή ASP. NET IR Code Recorder που θα έκανε τα εξής:

  • Αποδεχτείτε τον καταγεγραμμένο κώδικα IR μαζί με ένα διαισθητικά κλειδί κωδικού ως είσοδο μέσω μιας φόρμας ιστού
  • Σπάστε τον πολύ μεγάλο κώδικα IR σε τμήματα με μήκος μικρότερο από 64 χαρακτήρες για να παραμείνετε κάτω από το όριο Serial buffer του Arduino Uno
  • Το τελευταίο τμήμα κωδικών θα είναι προκαθορισμένο με ένα "E" που υποδεικνύει στο Arduino ότι έχει λάβει το τελευταίο τμήμα κώδικα
  • Κάθε τμήμα θα διαχωριζόταν με έναν οριοθέτη σωλήνων προτού συναρμολογηθεί ξανά σε μια μακρά χορδή
  • Τέλος, ο τμηματοποιημένος κώδικας IR μαζί με το κλειδί κωδικού του αποθηκεύτηκε σε μια βάση δεδομένων SQL Server 2012

Είναι αυτή η βάση δεδομένων SQL που αποτελεί ένα από τα στοιχεία του Κέντρου αυτοματισμού σπιτιού που αναπτύχθηκε σε αυτό το IBLE.

ΣΗΜΕΙΩΣΗ

Η εφαρμογή ιστού IR Code Recorder δεν αποτελεί μέρος της συζήτησης εδώ για τους ακόλουθους λόγους:

  • Μπορείτε να καταγράψετε χειροκίνητα κωδικούς χρησιμοποιώντας το Arduino Sketch, να τους χωρίσετε σε τμήματα που οριοθετούνται με σωλήνες και να τους αποθηκεύετε στη βάση δεδομένων χωρίς να χρειάζεται να δημιουργήσετε μια περίτεχνη εφαρμογή Ιστού
  • Σε αντίθεση με αυτό το IBLE, το IR Recorder επικεντρώνεται στην αντίστροφη επικοινωνία από το Arduino στο Raspberry Pi

Επομένως, οι λεπτομέρειες για αυτό το έργο θα αποτελέσουν θέμα για ένα άλλο IBLE

Βήμα 2: Αυτό που χρειάζεστε - το υλικό

Αυτό που χρειάζεστε - το υλικό
Αυτό που χρειάζεστε - το υλικό
Αυτό που χρειάζεστε - το υλικό
Αυτό που χρειάζεστε - το υλικό

Ένα λειτουργικό Raspberry Pi 2.0 - Σας συνιστώ να εγκαταστήσετε το Ubuntu Mate καθώς έχει ένα πλουσιότερο σύνολο χαρακτηριστικών, συμπεριλαμβανομένου του OpenLibre Office, το οποίο παρεμπιπτόντως ήταν απαραίτητο για την τεκμηρίωση αυτού του διδακτέου, ακριβώς εκεί στο Raspberry Pi.

Επιπλέον, το Pi, θα χρειαστείτε τα ακόλουθα εξωτερικά:

  • Η πλατφόρμα πρωτότυπου Arduino Uno ή ένας κλώνος
  • Ένα LED πομπών IR - χρησιμοποίησα μια μάρκα που ονομάζεται Three Legs από το Amazon.com
  • 330 ή 220 Ohm αντιστάσεις-χρησιμοποίησα το 220 (κωδικός χρώματος Κόκκινο-Κόκκινο-Καφέ) επειδή είχα αρκετές εύχρηστες
  • Ο συνηθισμένος πίνακας ψωμιού, οι σύνδεσμοι και ένας υπολογιστής με εγκατεστημένο το περιβάλλον Arduino
  • Υποψήφιος για δοκιμή - όπως η πανταχού παρούσα Samsung LED οθόνη με τηλεχειριστήριο

Βήμα 3: Αυτό που χρειάζεστε - το Λογισμικό

Για να συγκεντρωθούν όλα τα κομμάτια, θα πρέπει να εγκατασταθεί και να εκτελεστεί η ακόλουθη εγκατάσταση λογισμικού:

Στο Raspberry Pi, θα χρειαστεί να εγκαταστήσετε τα ακόλουθα:

  • Το Arduino IDE - χρησιμοποιείται για την κατασκευή του Sketch και το αναβοσβήνει στο UNO
  • Η ενότητα Python για το Arduino - για σειριακή επικοινωνία μεταξύ του UNO και του Pi
  • Η βιβλιοθήκη πελάτη Python SignalR - Μπορείτε να ανατρέξετε στις οδηγίες που επισυνάπτονται εδώ

Ένα μηχάνημα Windows με το ακόλουθο περιβάλλον ανάπτυξης εγκατεστημένο:

  • Δωρεάν έκδοση του Microsoft Visual Studio Express 2013 για τη δημιουργία του SignalR Hub και της εφαρμογής -πελάτη Web
  • Δωρεάν έκδοση του SQL Server 2012 Express για το σχεδιασμό και τη δημιουργία της βάσης δεδομένων

Περιβάλλον φιλοξενίας Windows Internet Server Server (IIS):

  • Μόλις δημιουργηθεί και δοκιμαστεί το πρόγραμμα -πελάτης SignalR Hub and Web, θα πρέπει να αναπτυχθεί σε έναν τοπικό διακομιστή IIS
  • Στην περίπτωσή μου, σκοπεύω να χρησιμοποιήσω έναν παλιό φορητό υπολογιστή με Windows 7 με IIS στο οικιακό μου δίκτυο

ΣΗΜΕΙΩΣΗ

Όλες οι οδηγίες ισχύουν για την έκδοση Python 2.7.x. Η έκδοση 3.0 ενδέχεται να απαιτεί επανεγγραφή

Βήμα 4: Η βάση δεδομένων SQL Server

Η βάση δεδομένων SQL Server
Η βάση δεδομένων SQL Server

Το συνημμένο σχήμα δείχνει τη δομή μιας βασικής βάσης δεδομένων SQL Server που χρησιμοποιείται σε αυτήν την εφαρμογή και περιέχει μόνο δύο πίνακες.

Πίνακας AutoHubCode

Οι δύο σημαντικές στήλες σε αυτόν τον πίνακα είναι:

AutoCodeKey - αποθηκεύει το φιλικό προς το χρήστη όνομα του κλειδιού κωδικού

Κάθε ένα από τα κλειδιά κωδικού μεταδίδεται από έναν πελάτη αυτοματισμού - στην περίπτωσή μας, ένα κουμπί HTML από μια ιστοσελίδα

AutoCodeVal - αποθηκεύει την ακατέργαστη ακολουθία IR Code

Αυτός είναι ο πραγματικός κώδικας IR που μεταδίδεται πίσω στον πελάτη ως απάντηση από το διανομέα SignalR

Σε αυτήν την περίπτωση, ένας πελάτης Python σε συνεχή επικοινωνία με το Hub λαμβάνει την ακολουθία κώδικα IR και τη μεταδίδει μέσω Serial Port στο Arduino UNO

Πίνακας AutoHubLog

  • Καταγράφει τον κώδικα που ζητά ο πελάτης αυτοματισμού.
  • Αυτό είναι ένα μέτρο για την παρακολούθηση ποιος και πότε χρησιμοποίησε το σύστημα και ποιος κωδικός ζητήθηκε

Όπως αναφέρθηκε, χρησιμοποίησα τον SQL Server 2012 ως πλατφόρμα επιλογής βάσης δεδομένων. Μπορείτε να αναδημιουργήσετε αυτό το απλό σχέδιο σε διαφορετική πλατφόρμα βάσης δεδομένων, όπως MySQL, Oracle κ.

Παρ 'όλα αυτά, το SQL Script για τη δημιουργία αυτής της βάσης δεδομένων έχει επισυναφθεί εδώ

ΣΗΜΕΙΩΣΗ

  1. Ο κώδικας για το SignalR Hub έχει σχεδιαστεί για σύνδεση με βάση δεδομένων SQL Server 2012
  2. Η εργασία με διαφορετική βάση δεδομένων θα σήμαινε την αλλαγή του Hub για χρήση διαφορετικού προγράμματος οδήγησης βάσης δεδομένων

Βήμα 5: Η εφαρμογή Ιστού ASP. NET SignalR Hub

Η εφαρμογή Ιστού ASP. NET SignalR Hub
Η εφαρμογή Ιστού ASP. NET SignalR Hub
Η εφαρμογή Ιστού ASP. NET SignalR Hub
Η εφαρμογή Ιστού ASP. NET SignalR Hub

Η εφαρμογή Ιστού ASP. NET SignalR Hub περιλαμβάνει από κοινού τα ακόλουθα στοιχεία όπως υποδεικνύεται στο συνημμένο σχήμα:

Ενότητα 1 - Ο διανομέας SignalR που λαμβάνει αιτήματα και απαντά στον πελάτη

Ενότητες 2, 4 - Η ιστοσελίδα του προγράμματος -πελάτη HTML και το φύλλο στυλ που σχηματίζουν συλλογικά το μπροστινό άκρο του συστήματος αυτοματισμού και εκδίδουν εντολές στον κόμβο αυτοματισμού

Ενότητα 3 - Τα jQuery SignalR API που χρησιμοποιούνται από τον υπολογιστή -πελάτη HTML για επικοινωνία με τον κόμβο αυτοματισμού

Ενότητα 5 - Ο κόμβος SignalR δεν επικοινωνεί απευθείας με τη βάση δεδομένων. Το κάνει μέσω ενδιάμεσων κλάσεων που δημιουργούνται χρησιμοποιώντας το Entity Framework

Αυτές οι κατηγορίες αφαιρούν τις λεπτομέρειες της βάσης δεδομένων από την εφαρμογή front end

Ενότητα 6 - Η κλάση υπηρεσίας βάσης δεδομένων που βοηθά στην εκτέλεση των λειτουργιών ανάγνωσης -εγγραφής στη βάση δεδομένων SQL (περιγράφηκε προηγουμένως) χρησιμοποιώντας τις τάξεις Entity Framework

Τα ASP. NET και SignalR είναι τεχνολογίες της Microsoft και αυτό το σεμινάριο θα σας δείξει πώς δημιουργείται και αναπτύσσεται μια απλή εφαρμογή SignalR.

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

ΣΗΜΕΙΩΣΗ ΣΤΟΝ ΚΩΔΙΚΟ

Επισυνάπτεται ένα αρχείο ZIP που περιέχει μια απογυμνωμένη έκδοση του κώδικα

Η δομή του φακέλου είναι όπως φαίνεται στην εικόνα - ωστόσο, όλες οι κατηγορίες πλαισίου και τα σενάρια jQuery έχουν αφαιρεθεί για να μειωθεί το μέγεθος του συνημμένου

Η σύσταση είναι να χρησιμοποιηθεί αυτός ο κώδικας ως οδηγός, επειδή όταν δημιουργείτε μια νέα εφαρμογή SignalR Web ακολουθώντας τον παραπάνω οδηγό σύνδεσης, οι πιο πρόσφατες βιβλιοθήκες jQuery και οι κλάσεις πλαισίου ASP. NET θα προστεθούν αυτόματα

Επίσης, οι αναφορές στα σενάρια jQuery στη σελίδα index.html θα πρέπει να αλλάξουν για να αντικατοπτρίζουν την πιο πρόσφατη έκδοση των βιβλιοθηκών πελατών jQuery SignalR που θα προστεθούν αυτόματα κατά τη δημιουργία της εφαρμογής Web.

Τέλος, η συμβολοσειρά σύνδεσης θα πρέπει να αλλάξει για να ταιριάζει με τη βάση δεδομένων σας στα αρχεία που ονομάζονται Web.config*

Βήμα 6: Ο πελάτης Python SignalR Service

Ο πελάτης της υπηρεσίας Python SignalR Service
Ο πελάτης της υπηρεσίας Python SignalR Service

Ενώ το HTML SignalR Client είναι μια διεπαφή χρήστη με πρόσοψη, ο Python Client είναι μια εφαρμογή υπηρεσίας back end, η κύρια λειτουργία της οποίας είναι να λαμβάνει τον κώδικα IR που μεταδίδεται από το διανομέα και να τον δρομολογεί στο Arduino UNO μέσω σειριακής επικοινωνίας.

Ο συνημμένος κώδικας είναι αυτονόητος και τεκμηριωμένος αρκετά για να περιγράψει τη λειτουργικότητά του

Όπως φαίνεται στη σύνθετη λήψη οθόνης, ο πελάτης HTML και ο πελάτης της υπηρεσίας Python επικοινωνούν μέσω του διανομέα SignalR ως εξής:

  1. Ο χρήστης του συστήματος αυτοματισμού εκδίδει μια εντολή στο Hub μέσω ενός κλικ κουμπιού
  2. Κάθε κουμπί συσχετίζεται με τον κωδικό IR Key και όταν γίνεται κλικ, αυτός ο κωδικός μεταδίδεται στο Hub
  3. Ο διανομέας λαμβάνει αυτόν τον κωδικό, συνδέεται με τη βάση δεδομένων και ανακτά τον ακατέργαστο κωδικό σήματος IR και τον μεταδίδει πίσω σε όλους τους συνδεδεμένους πελάτες

    Ταυτόχρονα, το Hub καταγράφει μια καταχώριση στον πίνακα βάσης δεδομένων AutoHubLog καταγράφοντας τον κωδικό και την ημερομηνία και την ώρα που ζητήθηκε από απομακρυσμένους πελάτες

  4. Ο πελάτης υπηρεσίας Python λαμβάνει τον Κώδικα IR και τον μεταδίδει στο Arduino UNO για περαιτέρω επεξεργασία

Βήμα 7: Το Arduino UNO IR Transmission Sketch and Code

Το Arduino UNO IR Transmission Sketch and Code
Το Arduino UNO IR Transmission Sketch and Code
Το Arduino UNO IR Transmission Sketch and Code
Το Arduino UNO IR Transmission Sketch and Code
Το Arduino UNO IR Transmission Sketch and Code
Το Arduino UNO IR Transmission Sketch and Code

Το κύκλωμα Arduino όπως φαίνεται στα γραφικά είναι αρκετά απλό για αυτό το σύστημα και ως εκ τούτου περιγράφεται εν συντομία:

  • Το άχρωμο IR LED πρέπει να είναι συνδεδεμένο στο Pηφιακό PIN 3 στο UNO - αυτό είναι απαίτηση της βιβλιοθήκης IRLib Arduino
  • Οι λόγοι περιγράφονται στο προηγούμενο IBLE για την κλωνοποίηση ενός τηλεχειριστηρίου στην ενότητα που σχετίζεται με τη βιβλιοθήκη IRLib
  • Η πράσινη λυχνία LED που συνδέεται με τον ψηφιακό κωδικό PIN 4 είναι μια οπτική ένδειξη που ανάβει όταν το UNO λάβει όλα τα τμήματα του IR Code από τον πελάτη Python που λειτουργεί στο Raspberry Pi.
  • Έχοντας ανάψει αυτό το LED θα επιβεβαιώσει ότι η σειριακή επικοινωνία μεταξύ του Raspberry Pi και του UNO λειτουργεί
  • Για να ενεργοποιήσετε τη σειριακή επικοινωνία, το UNO συνδέεται στο Raspberry Pi μέσω της θύρας USB
  • Το συνημμένο σκίτσο Arduino σχολιάζεται επαρκώς για να περιγράψει τη λειτουργία του
  • Τα σχόλια στο επάνω μέρος του κώδικα περιγράφουν επίσης πώς πρέπει να συνδεθεί το κύκλωμα

ΣΗΜΕΙΩΣΗ

Στην πράξη, το Arduino και το Pi θα μπορούσαν να συνδεθούν από κοινού σε έναν τροφοδοτούμενο διανομέα USB αρκετά ισχυρό για να οδηγήσει το Pi, το Arduino και επίσης να μεταδώσει ένα ισχυρό σήμα μέσω του IR LED

Βήμα 8: Σύνδεση και δοκιμή του συστήματος

Σύνδεση και δοκιμή του συστήματος
Σύνδεση και δοκιμή του συστήματος
Σύνδεση και δοκιμή του συστήματος
Σύνδεση και δοκιμή του συστήματος
Σύνδεση και δοκιμή του συστήματος
Σύνδεση και δοκιμή του συστήματος
  1. Δημιουργήστε και αναπτύξτε το ASP. NET SignalR Hub, το πρόγραμμα -πελάτη HTML μαζί με τη βάση δεδομένων SQL Server 2012 σε διακομιστή πληροφοριών Internet (IIS) στο τοπικό οικιακό σας δίκτυο
  2. Αποκτήστε πρόσβαση στην εφαρμογή ιστού ανοίγοντας το πρόγραμμα -πελάτη HTML SignalR μέσω

    η διεύθυνση URL αυτής της σελίδας θα είναι συνήθως https:// yourComputer: port_number/

  3. Κάντε κλικ σε ένα κουμπί στον πίνακα ελέγχου και εάν η εφαρμογή έχει αναπτυχθεί σωστά, ο διανομέας θα απαντήσει επιστρέφοντας τον κωδικό IR και εμφανίζοντάς τον στον γκρι πίνακα δίπλα στον πίνακα ελέγχου

    Θυμάμαι! Θα πρέπει να φορτώσετε τους κωδικούς στη βάση δεδομένων σας δημιουργώντας τη βιβλιοθήκη δέκτη IR και καταγράφοντας τους κωδικούς όπως περιγράφεται στο προηγούμενο IBLE

  4. Συνδέστε το Arduino στο Raspberry Pi μέσω USB - ανοίξτε το Arduino IDE στο Pi και βεβαιωθείτε ότι ο UNO μπορεί να δημιουργήσει σύνδεση με το Pi

    Αυτά τα μαθήματα Arduino θα πρέπει να σας βοηθήσουν να το καταφέρετε αρκετά γρήγορα

  5. Ανοίξτε τον κώδικα Python και κάντε τις ακόλουθες αλλαγές ανάλογα με το περιβάλλον σας

    • τη διεύθυνση σειριακής θύρας του UNO όπως αποκτήθηκε από το βήμα 4
    • το URL του κόμβου SignalR για να ταιριάζει με το τοπικό σας URL από το Βήμα 2 - σε αυτό το παράδειγμα, θα ήταν https:// yourComputer: port_number/signalr
  6. Τέλος, ανοίξτε το Arduino Sketch στο Arduino IDE στο Raspberry Pi και μετακινήστε το στο UNO
  7. Τοποθετήστε τον πίνακα ψωμιού που συγκρατεί το κύκλωμα σε κοντινή απόσταση με τη συσκευή που πρέπει να ελεγχθεί - το LED IR πρέπει να έχει καθαρή οπτική γραμμή με τη θύρα δέκτη IR της συσκευής
  8. Ξεκινήστε το πρόγραμμα Python στο Raspberry Pi πατώντας το κουμπί F5 στη γραμμή εργαλείων Python IDLE
  9. Επιστρέψτε στον πίνακα ελέγχου στο πρόγραμμα -πελάτη HTML (βήμα 2) και κάντε κλικ σε ένα κουμπί (όπως ενεργοποίηση ή αύξηση έντασης ήχου)

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

Βήμα 9: Το σύστημα σε δράση

Το σύστημα σε δράση
Το σύστημα σε δράση
Το σύστημα σε δράση
Το σύστημα σε δράση
Το σύστημα σε δράση
Το σύστημα σε δράση
Το σύστημα σε δράση
Το σύστημα σε δράση

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

Από τη δημοσίευση αυτού του IBLE, επέκτεινα τη διεπαφή καταγράφοντας μερικούς κωδικούς IR από την τηλεόραση LED VIZIO

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

Οι επόμενες εικόνες δείχνουν το tablet σε πρώτο πλάνο με την τηλεόραση στο πίσω μέρος να ανταποκρίνεται σε εντολές που εκδίδονται από τη διεπαφή Ιστού:

  1. Εντολή Power OFF - Η τηλεόραση απενεργοποιείται
  2. Εντολή ενεργοποίησης - η τηλεόραση ενεργοποιείται και το λογότυπο "V" εμφανίζεται καθώς ενεργοποιείται η οθόνη
  3. Εντολή σίγασης ON - Μια οριζόντια γραμμή εμφανίζεται με σίγαση του ηχείου

Σε όλες τις δοκιμές, η περιοχή Γκρι μαζί με τον πίνακα ελέγχου στην οθόνη του tablet εμφανίζει την εντολή που εκδίδεται από τον πελάτη και την απάντηση που αποστέλλεται από το απομακρυσμένο SignalR Hub

Βήμα 10: Βελτίωση του συστήματος αυτοματισμού και σχετικών διορθώσεων

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

Βελτίωση 1 (Γρήγορη): Εργασία με σήματα IR διαφορετικού μήκους

  1. Οι κωδικοί IR διαφορετικών συστημάτων έρχονται με διαφορετικά μήκη, ακόμη και μεταξύ δύο προϊόντων από τον ίδιο κατασκευαστή.

    Για παράδειγμα, σε αυτήν την περίπτωση, το μήκος της συστοιχίας κώδικα IR για την τηλεόραση LED είναι 67 ενώ αυτό της Samsung Sound Bar είναι περίπου 87

  2. Αυτό σημαίνει ότι, αν ενεργοποιούσα πρώτα το Sound Bar, ο πίνακας IR Buffer στο σκίτσο του Arduino θα ήταν γεμάτος με μια ακολουθία IR Code που περιέχει 87 κωδικούς
  3. Μετά από αυτό, αν άνοιγα την τηλεόραση LED, θα γέμιζε τον πίνακα IR Buffer με μόλις 67 κωδικούς, αλλά οι υπόλοιποι 20 κωδικοί από την προηγούμενη λειτουργία θα εξακολουθούσαν να υπάρχουν

Το αποτέλεσμα? Η τηλεόραση LED δεν ανάβει επειδή το IR Code Buffer έχει καταστραφεί από τους επιπλέον 20 κωδικούς που δεν έχουν καθαριστεί από την προηγούμενη λειτουργία!

Επιδιόρθωση 1 (η εύκολη διέξοδος, δεν συνιστάται)

Αλλάξτε το Arduino Sketch ως εξής:

Αλλάξτε τις ακόλουθες κλήσεις συνάρτησης στη συνάρτηση βρόχου () {}

transmitIRCode ();

για τη μετάδοση του κωδικού (c).

Κάντε αλλαγές στην υπογραφή της παραπάνω συνάρτησης:

void transmitIRCode (int codeLen) {// RAWBUF σταθερά αντικαταστάθηκε με codeLen IRTransmitter. IRSendRaw:: send (IRCodeBuffer, codeLen, 38)? }

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

Επιδιόρθωση 2 (Δεν είναι δύσκολο, συνιστάται)

Δηλώστε μια πρόσθετη μεταβλητή στην κορυφή του Arduino Sketch, μετά την ενότητα σχολίων:

χωρίς υπογραφή int EMPTY_INT_VALUE;

Προσθέστε αυτό στο επάνω μέρος της συνάρτησης setup ():

// Αποτυπώστε τη φυσική κατάσταση μιας κενής μη υπογεγραμμένης ακέραιης μεταβλητήςEMPTY_INT_VALUE = IRCodeBuffer [0];

Κάντε κύλιση προς τα κάτω και προσθέστε μια νέα λειτουργία στο σκίτσο αμέσως μετά τη συνάρτηση transmitIRCode ():

void clearIRCodeBuffer (int codeLen) {// Εκκαθάριση όλων των κωδικών από τον πίνακα // ΣΗΜΕΙΩΣΗ: η ρύθμιση των στοιχείων του πίνακα στο 0 δεν είναι η λύση! για (int i = 1; i <= codeLen; i ++) {IRCodeBuffer [i-1] = EMPTY_INT_VALUE;}}

Τέλος, καλέστε τη νέα συνάρτηση παραπάνω στην ακόλουθη θέση στη συνάρτηση βρόχου ():

// Επαναφορά - Συνέχιση ανάγνωσης Serial PortclearIRCodeBuffer (c);…

Αυτή είναι μια πιο καθαρή προσέγγιση καθώς επαναφέρει στην πραγματικότητα όλες τις τοποθεσίες στη συστοιχία Buffer IR που συμπληρώθηκαν από το πιο πρόσφατο σήμα IR Code χωρίς να αφήνει τίποτα στην τύχη.

Βελτίωση 2 (Εμπλέκεται περισσότερο): Επαναλαμβανόμενη μετάδοση σήματος IR για ορισμένες συσκευές

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

Το Fix in Concept συζητήθηκε εδώ καθώς είναι λίγο πιο εμπλεκόμενο και θα χρειαστεί δοκιμή

Η προσθήκη της λειτουργίας επανάληψης στο Ardunio Sketch σημαίνει ότι θα πρέπει να αναβοσβήνετε το Sketch κάθε φορά που προσθέτετε μια νέα συσκευή στο Σύστημα αυτοματισμού σπιτιού σας

Αντ 'αυτού, η προσθήκη αυτής της επιδιόρθωσης στο πρόγραμμα -πελάτη HTML SignalR και στην εφαρμογή Python SignalR Service καθιστά τη λύση πολύ πιο ευέλικτη. Και αυτό θα μπορούσε να επιτευχθεί κατ 'αρχήν ως εξής:

Τροποποιήστε το πρόγραμμα -πελάτη SignalR HTML για τη μετάδοση επαναλαμβανόμενων πληροφοριών στον Κέντρο

Ανοίξτε το index.html και ενσωματώστε την τιμή επανάληψης στο κουμπί HTML ως εξής:

value = "SMSNG-SB-PWR-ON" θα γινόταν value = "SMSNG-SB-PWR-ON_2_1000"

Όπου, 2 είναι η τιμή επανάληψης και 1000 η τιμή καθυστέρησης σε χιλιοστά του δευτερολέπτου μεταξύ των δύο σημάτων επανάληψης

Όταν κάνετε κλικ σε αυτό το κουμπί, ο διανομέας SignalR θα λάβει τον Κωδικό Κλειδιού+Επανάληψη_προειδοποίησης

Τροποποιήστε τις μεθόδους της πλευράς του διακομιστή SignalR για να αναλύσετε μόνο τον Κωδικό κλειδιού:

  • Χρησιμοποιήστε τον Κωδικό κλειδιού για να ανακτήσετε τον Κώδικα IR από τη βάση δεδομένων ως συνήθως
  • Μεταδώστε τον βασικό κωδικό+Repeat_Spec και τον IRCode στους πελάτες SingalR ως συνήθως

Τροποποιήστε την εφαρμογή Python SignalR Service Service για τη μετάδοση σημάτων χρησιμοποιώντας τις τιμές Επανάληψη:

Ανοίξτε το πρόγραμμα -πελάτη Python και τροποποιήστε τις ακόλουθες δύο λειτουργίες:

def print_command_from_hub (buttonId, cmdSrc):

# αναλύστε τον κωδικό επανάληψης από την τιμή buttonId

def transmitToArduino (IRSignalCode, delim, endPrefix):

# ρυθμίστε λίγο ή για βρόχο για τη μετάδοση του σήματος στην επιθυμητή συχνότητα

  • Με αυτόν τον τρόπο, το Arduino δεν χρειάζεται να αναβοσβήνει επανειλημμένα
  • Οποιοσδήποτε αριθμός επαναλαμβανόμενων συχνοτήτων θα μπορούσε να ενσωματωθεί σε αυτό το σύστημα
  • Εκτός αυτού, εάν χρησιμοποιείτε το UNO, υπάρχει ένα όριο στο μέγεθος που μπορεί να φτάσει το Sketch σας!

Βήμα 11: Γνωστά ζητήματα και ανησυχίες για την ασφάλεια

Όπως συμβαίνει με τα συστήματα που κατασκευάστηκαν την πρώτη φορά, αυτό έχει μερικά ζητήματα που εμφανίστηκαν κατά τη διάρκεια των δοκιμών.

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

  • Η επανεκκίνηση του προγράμματος -πελάτη Python SignalR επαναφέρει το σύστημα σε κανονικές λειτουργίες
  • Άμεσες λύσεις μπορεί να είναι να αφαιρέσετε ανεπιθύμητες εξόδους εντοπισμού σφαλμάτων και στα δύο, στο Python SignalR Client και επίσης στο Arduino Sketch και να επαναλάβετε αυτές τις δοκιμές
  • Ένα άλλο μέρος για να εξετάσετε θα ήταν η ίδια η Σειριακή επικοινωνία - θα ήταν δυνατόν να προσθέσετε κώδικα για να ξεπλύνετε γρήγορα το buffer;

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

Τεύχος 2: Η οθόνη HTML σταματά να ανταποκρίνεται σε κλικ κουμπιών μετά από μια μακρά περίοδο αδράνειας

Συνήθως η ανανέωση της σελίδας επιλύει αυτήν τη συμπεριφορά - η αιτία αυτής της συμπεριφοράς ωστόσο είναι ακόμα ασαφής

ΘΕΜΑΤΑ ΑΣΦΑΛΕΙΑΣ

Αυτό το σύστημα έχει σχεδιαστεί μόνο για τοπική (οικιακή) χρήση δικτύου και δεν διαθέτει τις απαραίτητες εγγυήσεις ασφαλείας για χρήση στο διαδίκτυο

Επομένως, συνιστάται η ανάπτυξη του SignalR Hub σε έναν τοπικό υπολογιστή στο τοπικό/οικιακό σας δίκτυο

Ευχαριστώ που διαβάσατε το IBLE μου και ελπίζω να διασκεδάσετε!

Συνιστάται: