- Απαιτήσεις:
- Προγραμματισμός μικροελεγκτή PIC για επικοινωνία Bluetooth:
- Διάγραμμα κυκλώματος και ρύθμιση υλικού:
- Έλεγχος LED με χρήση Bluetooth Mobile Application:
Σε αυτό το σεμινάριο θα μάθουμε πώς να κάνουμε τα έργα PIC ασύρματα μέσω διασύνδεσης μιας μονάδας Bluetooth (HC-06). Στο προηγούμενο σεμινάριό μας, έχουμε ήδη μάθει πώς να χρησιμοποιούμε την ενότητα USART στον μικροελεγκτή PIC και καθιερώσαμε την επικοινωνία μεταξύ PIC και υπολογιστή. Εάν είστε απόλυτος αρχάριος, τότε ελέγξτε εδώ για όλα τα μαθήματα PIC, όπου έχουμε ξεκινήσει από το μηδέν, όπως εκμάθηση MPLAB και XC8, διασύνδεση LED, LCD, χρήση χρονομέτρων, ADC, PWM κ.λπ.
Εδώ, χρησιμοποιήσαμε τη δημοφιλή μονάδα Bluetooth HC-06. Χρησιμοποιώντας αυτήν την ενότητα μπορούμε να λάβουμε και να στείλουμε πληροφορίες ασύρματα από το PIC MCU σε μια εφαρμογή για κινητά ή σε έναν υπολογιστή. Η επικοινωνία μεταξύ PIC και HC-06 πραγματοποιείται χρησιμοποιώντας τη μονάδα USART που υπάρχει στον Μικροελεγκτή PIC. Μπορείτε επίσης να χρησιμοποιήσετε το HC-05. Λειτουργούμε ξανά στην ίδια ασύγχρονη λειτουργία 8-bit, αλλά αυτή τη φορά θα τροποποιήσουμε λίγο τον κώδικά μας έτσι ώστε να λειτουργεί με τη μονάδα Bluetooth. Ως εκ τούτου, εκμάθηση εκμάθησης UART εκ των προτέρων είναι ένα πρόσθετο πλεονέκτημα για αυτό το έργο.
Σε αυτό το σεμινάριο, θα αλλάξουμε ένα LED στέλνοντας ή απενεργοποιώντας την εντολή από το έξυπνο τηλέφωνό μας. Θα χρησιμοποιήσουμε μια εφαρμογή Android που ονομάζεται Bluetooth Terminal, η οποία μπορεί να στέλνει και να λαμβάνει δεδομένα μέσω Bluetooth. Εάν στείλουμε ένα char '1' από την εφαρμογή, το φως θα ανάβει στην πλακέτα PIC και θα λάβουμε μια επιβεβαίωση στο τηλέφωνο ότι το φως έχει ανάψει. Παρομοίως, μπορούμε να στείλουμε το "0" από το τηλέφωνο για να το απενεργοποιήσουμε. Με αυτόν τον τρόπο μπορούμε να ελέγξουμε το φως LED στην πλακέτα PIC μας, παρόμοιο με το σεμινάριο UART αλλά τώρα ασύρματα. Το πλήρες πρόγραμμα και το λεπτομερές βίντεο δίνεται στο τέλος αυτού του σεμιναρίου.
Το βασικό διάγραμμα μπλοκ για την εγκατάσταση φαίνεται παρακάτω.
Απαιτήσεις:
Σκεύη, εξαρτήματα:
- PIC16F877A Διοικητικό Συμβούλιο
- Ενότητα Bluetooth HC-05 ή HC-06
- Υπολογιστής (για προγραμματισμό)
- Κινητό τηλέφωνο
- Προγραμματιστής PICkit 3
Λογισμικό:
- MPLABX
- Τερματικό Bluetooth (Εφαρμογή για κινητά)
Ενότητα Bluetooth HC-06:
Το Bluetooth μπορεί να λειτουργήσει με τους ακόλουθους δύο τρόπους:
- Λειτουργία εντολών
- Τρόπος λειτουργίας
Στη λειτουργία εντολών θα είμαστε σε θέση να διαμορφώσουμε τις ιδιότητες Bluetooth όπως το όνομα του σήματος Bluetooth, τον κωδικό πρόσβασής του, τον ρυθμό λειτουργίας baud κ.λπ. Η λειτουργία λειτουργίας είναι αυτή στην οποία θα μπορούμε να στέλνουμε και να λαμβάνουμε δεδομένα μεταξύ του μικροελεγκτή PIC και τη μονάδα Bluetooth. Ως εκ τούτου, σε αυτό το σεμινάριο θα παίζουμε μόνο με τον τρόπο λειτουργίας. Η λειτουργία εντολής θα αφεθεί στις προεπιλεγμένες ρυθμίσεις. Το όνομα της συσκευής θα είναι HC-05 (χρησιμοποιώ το HC-06) και ο κωδικός πρόσβασης θα είναι 0000 ή 1234 και το πιο σημαντικό, ο προεπιλεγμένος ρυθμός baud για όλες τις μονάδες Bluetooth θα είναι 9600.
Η μονάδα λειτουργεί με τροφοδοσία 5V και οι ακίδες σήματος λειτουργούν σε 3.3V, επομένως υπάρχει ένας ρυθμιστής 3.3V στην ίδια τη μονάδα. Ως εκ τούτου δεν χρειάζεται να ανησυχούμε για αυτό. Από τις έξι καρφίτσες μόνο τέσσερις θα χρησιμοποιηθούν στον τρόπο λειτουργίας. Ο πίνακας σύνδεσης pin εμφανίζεται παρακάτω
ΝΟ |
Καρφίτσωμα στο HC-05 / HC-06 |
Καρφίτσωμα στο MCU |
Αριθμός καρφίτσας στο PIC |
1 |
Vcc |
Vdd |
31 st pin |
2 |
Vcc |
Gnd |
32 ος pin |
3 |
Τχ |
RC6 / Tx / CK |
25 η καρφίτσα |
4 |
Rx |
RC7 / Rx / DT |
26 ο πείρος |
5 |
κατάσταση |
ΝΚ |
ΝΚ |
6 |
EN (Ενεργοποίηση) |
ΝΚ |
ΝΚ |
Ελέγξτε τα άλλα έργα μας για να μάθετε περισσότερα σχετικά με τη μονάδα Bluetooth HC-05 με άλλους μικροελεγκτές:
- Bluetooth Car Controlled Toy Car χρησιμοποιώντας το Arduino
- Σύστημα οικιακού αυτοματισμού ελεγχόμενου Bluetooth με χρήση 8051
- Φωνητικά ελεγχόμενα φώτα χρησιμοποιώντας Raspberry Pi
- Ραδιόφωνο FM ελεγχόμενο από έξυπνο τηλέφωνο χρησιμοποιώντας Arduino και Processing
- Ρομπότ αυτοκινήτου ελεγχόμενο από κινητό τηλέφωνο χρησιμοποιώντας G-Sensor και Arduino
Προγραμματισμός μικροελεγκτή PIC για επικοινωνία Bluetooth:
Όπως όλες οι λειτουργικές μονάδες (ADC, Timer, PWM), θα πρέπει επίσης να προετοιμάσουμε τη μονάδα Bluetooth. Η προετοιμασία θα είναι παρόμοια με την αρχικοποίηση UART, αλλά πρέπει να κάνουμε κάποιες αλλαγές ώστε το Bluetooth να λειτουργεί άψογα με το PIC16F877A MCU μας. Ας ορίσουμε τα bit διαμόρφωσης και ξεκινήστε με τη λειτουργία αρχικοποίησης Bluetooth
Αρχικοποίηση Bluetooth:
Σχεδόν όλες οι λειτουργικές μονάδες Bluetooth στην αγορά λειτουργούν με ρυθμό baud 9600, είναι πολύ σημαντικό να ορίσετε το ρυθμό baud σας ίδιο με αυτό των λειτουργικών μονάδων Bluetooth που λειτουργούν με ρυθμό baud, εδώ ορίζουμε SPBRG = 129 αφού λειτουργούμε με συχνότητα ρολογιού 20Mhz με 9600 ως ρυθμός baud. Ως εκ τούτου, η παραπάνω εκκίνηση θα λειτουργήσει μόνο για μονάδες Bluetooth που λειτουργούν με ρυθμό baud 9600. Είναι επίσης υποχρεωτικό να έχετε ενεργοποιήσει το bit ταχύτητας baud υψηλής ταχύτητας BRGH. Αυτό θα βοηθήσει στον καθορισμό ενός ακριβούς ρυθμού baud.
// ****** Αρχικοποιήστε το Bluetooth χρησιμοποιώντας το USART ******** // void Initialize_Bluetooth () {// Ορίστε τις ακίδες RX και TX // TRISC6 = 1; TRISC7 = 1; // Ρυθμίστε το ρυθμό baud χρησιμοποιώντας τον πίνακα αναζήτησης στο φύλλο δεδομένων (σελ114) // BRGH = 1; // Χρησιμοποιείτε πάντα ρυθμό baud υψηλής ταχύτητας με Bluetooth αλλιώς δεν θα λειτουργεί SPBRG = 129; // Ενεργοποιήστε το Asyc. Σειριακή θύρα // SYNC = 0; SPEN = 1; // Ρύθμιση 8-bit λήψης και μετάδοσης RX9 = 0; TX9 = 0; // Ενεργοποίηση μετάδοσης και λήψης // TXEN = 1; CREN = 1; // Ενεργοποίηση καθολικού και ph. διακόπτει // GIE = 1; PEIE = 1; // Ενεργοποίηση διακοπών για Tx. και Rx.// RCIE = 1; TXIE = 1; } // ___________ BT αρχικοποιήθηκε _____________ //
Εάν έχετε μια μονάδα BT που λειτουργεί με διαφορετικό ρυθμό baud, τότε μπορείτε να ανατρέξετε στον παρακάτω πίνακα αναζήτησης για να μάθετε την αξία σας για το SPBRG.
Φόρτωση δεδομένων σε Bluetooth:
Μόλις αρχίσει η λειτουργία, έχουμε τρεις λειτουργίες στο πρόγραμμά μας για αποστολή και λήψη δεδομένων από Bluetooth. Σε αντίθεση με το UART, έχουμε λίγα πράγματα που πρέπει να λάβουμε υπόψη εδώ πριν μπορέσουμε να μεταφέρουμε ή να λάβουμε δεδομένα. Η μονάδα Bluetooth έχει ένα buffer Transmit and Receive, τα δεδομένα που αποστέλλονται σε αυτό θα αποθηκευτούν στο buffer Tx. Αυτά τα δεδομένα δεν θα μεταδοθούν (αποστέλλονται στον αέρα) εκτός εάν σταλεί η μονάδα επιστροφής μεταφοράς. Ως εκ τούτου, για τη μετάδοση δεδομένων πρέπει να φορτώσουμε το buffer Rx του BT και μετά να το μεταδώσουμε χρησιμοποιώντας το carriage return.
Η παραπάνω εργασία μπορεί εύκολα να επιτευχθεί χρησιμοποιώντας τις ακόλουθες λειτουργίες. Η παρακάτω συνάρτηση μπορεί να χρησιμοποιηθεί όταν πρέπει να φορτώσουμε μόνο έναν χαρακτήρα στο Rx buffer. Φορτώνουμε τα δεδομένα στον καταχωρητή TXREG και περιμένουμε μέχρι να υποβληθούν σε επεξεργασία ελέγχοντας τη σημαία TXIF και TRMT χρησιμοποιώντας ενώ βρόχους.
// Λειτουργία φόρτωσης του Bluetooth Rx. buffer με ένα char.// void BT_load_char (char byte) {TXREG = byte; ενώ (! TXIF); ενώ (! TRMT); } // Λήξη λειτουργίας //
Η παρακάτω λειτουργία χρησιμοποιείται για τη φόρτωση μιας συμβολοσειράς στο buffer Rx της μονάδας Bluetooth. Η συμβολοσειρά χωρίζεται σε χαρακτήρες και κάθε χαρακτήρας αποστέλλεται στη συνάρτηση BT_load_char () .
// Λειτουργία φόρτωσης Bluetooth Rx. buffer με συμβολοσειρά // void BT_load_string (char * string) {ενώ (* string) BT_load_char (* string ++); } // Λήξη λειτουργίας /
Μετάδοση δεδομένων μέσω Bluetooth:
Μέχρι τώρα έχουμε μόλις μεταδώσει πληροφορίες στο buffer Rx της μονάδας HC-05. Τώρα πρέπει να το καθοδηγήσουμε να μεταδώσει τα δεδομένα μέσω αέρα χρησιμοποιώντας αυτήν τη λειτουργία.
// Λειτουργία για μετάδοση δεδομένων από το RX. buffer // void broadcast_BT () {TXREG = 13; __delay_ms (500); } // Λήξη λειτουργίας //
Σε αυτήν τη λειτουργία στέλνουμε μια τιμή 13 στον καταχωρητή TXREG. Αυτή η τιμή 13 δεν είναι παρά το δεκαδικό ισοδύναμο για μεταφορά (ανατρέξτε στο γράφημα ASCII). Στη συνέχεια, δημιουργείται μια μικρή καθυστέρηση για να ξεκινήσει ο ραδιοτηλεοπτικός οργανισμός.
Ανάγνωση δεδομένων από Bluetooth:
Παρόμοια με το UART, η παρακάτω λειτουργία χρησιμοποιείται για την ανάγνωση δεδομένων από το Bluetooth
// Λειτουργία λήψης char από Rx.buffer του BT // char BT_get_char (void) {if (OERR) // έλεγχος για σφάλμα over run {CREN = 0; CREN = 1; // Επαναφορά CREN} if (RCIF == 1) // εάν ο χρήστης έχει στείλει έναν char επιστρέψει τον char (τιμή ASCII) {while (! RCIF); επιστροφή RCREG; } αλλιώς // αν ο χρήστης δεν έχει στείλει μήνυμα επιστροφή 0 επιστροφή 0; } // Λήξη λειτουργίας /
Εάν ο χρήστης έχει στείλει δεδομένα, αυτή η λειτουργία θα επιστρέψει τα συγκεκριμένα δεδομένα που μπορούν να αποθηκευτούν σε μια μεταβλητή και να υποβληθούν σε επεξεργασία. Εάν ο χρήστης δεν έχει στείλει τίποτα, η λειτουργία θα επιστρέψει μηδέν.
Κύρια λειτουργία:
Έχουμε χρησιμοποιήσει όλες τις παραπάνω εξηγήσεις συναρτήσεις μέσα ή κύρια λειτουργία. Στέλνουμε κάποιο εισαγωγικό μήνυμα και στη συνέχεια περιμένουμε από τον χρήστη να στείλει κάποιες τιμές βάσει των οποίων εναλλάξουμε τη λυχνία LED RED που συνδέεται με τον πείρο RB3 στον πίνακα Perf μας
void main (void) {// Δηλώσεις μεταβλητών πεδίου // int get_value; // Τέλος μεταβλητής δήλωσης // // Δηλώσεις I / O // TRISB3 = 0; // Λήξη δήλωσης I / O // Initialize_Bluetooth (); // ας προετοιμάσουμε το bluetooth μας για δράση // Εμφάνιση κάποιου εισαγωγικού μηνύματος μόλις ενεργοποιηθεί // BT_load_string ("Bluetooth Initialized and Ready"). εκπομπή_BT (); BT_load_string ("Πατήστε 1 για να ανάψετε το LED"); εκπομπή_BT (); BT_load_string ("Πατήστε 0 για να σβήσετε το LED"); εκπομπή_BT (); // Τέλος μηνύματος // while (1) // Το άπειρο lop {get_value = BT_get_char (); // Διαβάστε το char. ελήφθη μέσω BT // Εάν λάβουμε ένα '0' // if (get_value == '0') {RB3 = 0; BT_load_string ("LED απενεργοποιημένο"); εκπομπή_BT (); } // Εάν λάβουμε ένα '1' // if (get_value == '1') {RB3 = 1; BT_load_string ("LED ενεργοποιημένο"); εκπομπή_BT ();}}}
Ελέγξτε το πλήρες πρόγραμμα στην ενότητα κώδικα παρακάτω.
Διάγραμμα κυκλώματος και ρύθμιση υλικού:
Συνδέσεις του κυκλώματος για το έργο αυτό είναι πολύ απλό, εμείς απλά πρέπει να εξουσία μέχρι τη μονάδα Bluetooth και να συνδέσετε το TX στο 26 ης pin του PIC και Rx στο 25 ης pin του PIC, όπως φαίνεται στο διάγραμμα κυκλώματος παρακάτω:
Τώρα ας προχωρήσουμε στο υλικό. Μόλις ολοκληρωθεί η σύνδεση, θα πρέπει να μοιάζει με αυτό.
Έλεγχος LED με χρήση Bluetooth Mobile Application:
Ας προετοιμάσουμε την εφαρμογή μας Android. Κατεβάστε την εφαρμογή που ονομάζεται Bluetooth Terminal από το App Store ή χρησιμοποιήστε αυτόν τον σύνδεσμο. Μετά τη λήψη και την εγκατάσταση της εφαρμογής, ενεργοποιήστε τον πίνακα PIC perf που χρησιμοποιούμε από την αρχή. Η μικρή λυχνία LED στη μονάδα Bluetooth πρέπει να αναβοσβήνει για να υποδείξει ότι είναι ενεργοποιημένη και αναζητά ενεργά τηλέφωνο για τη σύνδεση.
Τώρα μπείτε στις Ρυθμίσεις Bluetooth του τηλεφώνου σας και αναζητήστε νέα συσκευή Bluetooth που θα πρέπει να μπορείτε να δείτε το όνομα HC-05 ή HC-06 με βάση τη μονάδα σας. Χρησιμοποιώ το HC-06, επομένως το τηλέφωνό μου εμφανίζει την ακόλουθη οθόνη. Στη συνέχεια, δοκιμάστε να το συνδυάσετε και θα ζητήσει έναν κωδικό πρόσβασης. Εισαγάγετε τον κωδικό πρόσβασης ως 1234 (για ορισμένους μπορεί να είναι 0000) και κάντε κλικ στο OK όπως φαίνεται παρακάτω.
Αφού το paring είναι επιτυχές, ανοίξτε την εφαρμογή Bluetooth Terminal που μόλις εγκαταστήσαμε. Μπείτε στην επιλογή ρυθμίσεων και επιλέξτε "Σύνδεση συσκευής - Ασφαλής" όπως φαίνεται παρακάτω. Αυτό θα ανοίξει ένα αναδυόμενο πλαίσιο όπου όλες οι συζευγμένες συσκευές μας θα εμφανίζονται όπως φαίνεται παρακάτω. Επιλέξτε τη μονάδα HC-05 ή HC-06.
Μόλις πραγματοποιηθεί η σύνδεση, το φως στη μονάδα Bluetooth που αναβοσβήνει μέχρι τώρα πρέπει να έχει γίνει σταθερό για να υποδείξει ότι έχει συνδεθεί με επιτυχία στο κινητό σας. Και πρέπει να λάβουμε το εισαγωγικό μήνυμα από το πρόγραμμά μας όπως φαίνεται παρακάτω.
Τώρα πατήστε «1» για να ανάψετε τη λυχνία LED και πατήστε «0» για να σβήσετε το φως. Η πλήρης εργασία θα εμφανίζεται στο βίντεο. Η οθόνη του κινητού σας θα μοιάζει με αυτό που φαίνεται παρακάτω.
Έτσι λοιπόν, έχουμε μάθει πώς να διασυνδέουμε τη μονάδα Bluetooth στον μικροελεγκτή PIC μας, τώρα με τη βοήθεια αυτού μπορούμε να δοκιμάσουμε ασύρματα έργα. Υπάρχουν πολλά έργα που χρησιμοποιούν Bluetooth, μπορείτε να τα δοκιμάσετε ή να δημιουργήσετε τη δική σας Ιδέα και να τα μοιραστείτε στην ενότητα σχολίων. Ελέγξτε επίσης το προηγούμενο έργο μας με την εφαρμογή τερματικού Bluetooth και το HC-05 όπως το Smart Phone Controlled Home Automation Using Arduino and Smart Phone Controlled Digital Code Lock using Arduino
Ελπίζω, αυτό το σεμινάριο σε βοήθησε! Εάν έχετε κολλήσει κάπου, χρησιμοποιήστε την ενότητα σχολίων.