Πίνακας περιεχομένων:
- Βήμα 1: Λίγα λόγια για το Bluetooth Low Energy (BLE)
- Βήμα 2: Δείκτες σάρωσης και σύνδεσης
- Βήμα 3: Αποκρυπτογράφηση συμβάντων Joystick και Button
- Βήμα 4: Λειτουργία VR Box: το Joystick
- Βήμα 5: Λειτουργία VR Box: Κουμπιά ενεργοποίησης
- Βήμα 6: Λειτουργία VR Box: Κουμπιά A/B
- Βήμα 7: Λειτουργία VR Box: Κουμπιά C/D
- Βήμα 8: Συμπέρασμα
Βίντεο: Τηλεχειριστήριο ESP32 Bluetooth BLE: 8 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:37
Αυτό το έργο είναι ένα παράδειγμα του τρόπου σύνδεσης ενός φθηνού joystick Bluetooth BLE σε ένα ESP32. Ο κωδικός γράφτηκε χρησιμοποιώντας το Arduino IDE Ver 1.8.5 με το πρόσθετο ESP32. Το χειριστήριο BLE που χρησιμοποιείται είναι μια εμπορική συσκευή που μπορείτε να αγοράσετε στο Διαδίκτυο για λιγότερο από 20,00 $ ή από το τοπικό σας κατάστημα πέντεBELoW με 5,00 $.
Το χειριστήριο που χρησιμοποίησα για αυτό το έργο είναι ένα τηλεχειριστήριο Bluetooth Spektrum VR Control. Κυκλοφορεί ως συνεργάτης με tablet Android και IOS ως joystick/ποντίκι για χρήση με ακουστικά VR.
Το τηλεχειριστήριο Bluetooth VR Control διαθέτει ένα μόνο joystick με άξονα X και Y, δύο κουμπιά σκανδάλης μπροστά και έξι κουμπιά στη λαβή. Δύο από τα κουμπιά είναι για ενεργοποίηση/απενεργοποίηση και έλεγχο λειτουργίας. Τα άλλα τέσσερα κουμπιά μπορούν να χρησιμοποιηθούν για ό, τι θέλετε. Αυτό το έργο είναι ένας σκελετός ή πλαίσιο που χειρίζεται όλη τη διασύνδεση και αποκωδικοποίηση Bluetooth των κουμπιών και του χειριστηρίου. Το μόνο που έχετε να κάνετε είναι να προσθέσετε κλήσεις λειτουργιών για να χειριστείτε αυτό που θέλετε να κάνουν τα κουμπιά και το χειριστήριο. Δεν χρειάζεται να γνωρίζετε τίποτα για το Bluetooth για να χρησιμοποιήσετε αυτό το πλαίσιο.
Υπάρχουν πολλές ιστοσελίδες με λεπτομερείς οδηγίες για την εγκατάσταση του Arduino IDE και του πρόσθετου ESP32. Δεν θα επιχειρήσω να επαναλάβω αυτές τις πληροφορίες εδώ. Γκουγκλάρετε το και ακολουθήστε τις οδηγίες.
Το πλαίσιο είναι μια προσαρμογή ενός παραδείγματος προγράμματος -πελάτη BLE που δημοσιεύτηκε από το IoT Sharing. Μπορείτε να το βρείτε εδώ. Μπορείτε να μελετήσετε αυτόν τον κώδικα για να πάρετε μια ιδέα για το πώς λειτουργεί το BLE. Το Expressif έχει ένα πλήρες παράδειγμα για έναν πελάτη GATT BLE και εξηγεί λεπτομερώς τη λειτουργία (δεν έχει γραφτεί για το Arduino IDE). Μπορείτε να το πάρετε εδώ.
Αυτό δεν είναι ένα σεμινάριο BLE. Δεν θα εξηγήσω πώς λειτουργεί ο κώδικας λεπτομερώς. Θα χρησιμοποιήσω την ορολογία BLE για να περιγράψω μερικά από τα χαρακτηριστικά του χειριστηρίου. Το μέρος του κώδικα που πρέπει να τροποποιήσετε για το έργο σας θα εξηγηθεί λεπτομερώς για να σας βοηθήσει να το τροποποιήσετε. Το πεδίο εφαρμογής είναι περιορισμένο για να κρατήσει αυτό το Instructable σύντομο και εστιασμένο στη χρήση του χειριστηρίου.
Βήμα 1: Λίγα λόγια για το Bluetooth Low Energy (BLE)
Αυτό δεν προορίζεται να είναι ένα σεμινάριο για το BLE. Όταν ξεκίνησα αυτό το έργο, δεν ήξερα τη διαφορά μεταξύ του BLE και του κλασικού Bluetooth. Απλώς ήθελα να δω αν θα μπορούσα να πάρω το joystick που αγόρασα για να δουλέψω με το ESP32. Στο ακόλουθο κείμενο χρησιμοποιώ την ορολογία BLE για να δώσω μια απλοποιημένη επισκόπηση του τρόπου λειτουργίας του BLE.
Το BLE χρησιμοποιεί αρχιτεκτονική πελάτη/διακομιστή. Μια συσκευή είναι ένας διακομιστής που παρέχει υπηρεσίες. Η άλλη συσκευή είναι ένας πελάτης που καταναλώνει υπηρεσίες. Προκειμένου να διατηρηθούν οι απαιτήσεις ισχύος, το BLE μεταδίδει μόνο μικρά πακέτα πληροφοριών όταν συμβαίνει αλλαγή. Στην περίπτωση του χειριστηρίου, η συσκευή χειριστηρίου είναι διακομιστής. Ως διακομιστής, διαφημίζει τον εαυτό του και θα μεταδώσει μια λίστα με τις υπηρεσίες που παρέχει όταν του ζητηθεί. Η συσκευή joystick διαφημίζει πέντε υπηρεσίες. Η μόνη υπηρεσία που μας ενδιαφέρει είναι η υπηρεσία BLE HID (Human Interface Device). Μια υπηρεσία BLE έχει τα γνωστά ως Χαρακτηριστικά που σχετίζονται με αυτήν. Ένα Χαρακτηριστικό είναι συνήθως μια πηγή δεδομένων. Η υπηρεσία HID του χειριστηρίου έχει δέκα Χαρακτηριστικά. Ορισμένα από τα Χαρακτηριστικά είναι διπλά και αγνοούνται. Μας ενδιαφέρουν μόνο τα χαρακτηριστικά της αναφοράς BLE που διαθέτουν δυνατότητες ανάγνωσης και ειδοποίησης. Τρία από τα χαρακτηριστικά πληρούν αυτές τις απαιτήσεις και παρέχουν δεδομένα σχετικά με τη θέση του χειριστηρίου και την κατάσταση των κουμπιών. Όταν η ειδοποίηση είναι ενεργοποιημένη, ο διακομιστής θα στείλει πακέτα δεδομένων όταν εντοπιστεί αλλαγή στο σχετικό χαρακτηριστικό.
Το πλαίσιο επαληθεύει ότι ο διακομιστής που βρίσκει διαθέτει την υπηρεσία BLE HID και στη συνέχεια θα ενεργοποιήσει τις Ειδοποιήσεις για τα τρία Χαρακτηριστικά Αναφοράς που παρέχουν πληροφορίες χειριστηρίου και κατάστασης κουμπιού. Στη συνέχεια, όταν πατήσετε ή αφήσετε ένα κουμπί ή μετακινηθεί το χειριστήριο, το ESP32 λαμβάνει ένα πακέτο δεδομένων που του λέει ποια είναι η νέα θέση του χειριστηρίου ή/και η κατάσταση ορισμένων κουμπιών.
Βήμα 2: Δείκτες σάρωσης και σύνδεσης
Το πλαίσιο ορίζει δύο LED, GREENLED και BLUELED και τα εκχωρεί σε δύο από τις καρφίτσες GPIO του ESP32. Το GREENLED ανάβει όταν το ESP32 αναζητά το χειριστήριο BLE. Όταν βρεθεί το joystick, το GREENLED απενεργοποιείται και το BLUELED ανάβει για να δείξει ότι η σύνδεση έχει δημιουργηθεί και είστε έτοιμοι να ξεκινήσετε. Εάν η σύνδεση χαθεί, το BLUELED απενεργοποιείται, το ESP32 επαναφέρεται, το GREENLED ανάβει και η σάρωση ξεκινά ξανά. Εάν το joystick δεν βρεθεί εντός τριάντα δευτερολέπτων, η σάρωση σταματά και το GREENLED απενεργοποιείται. Μετά από πέντε δευτερόλεπτα, η σάρωση ξεκινά ξανά και το GREENLED είναι ενεργοποιημένο.
Το τελικό αποτέλεσμα είναι ότι το ESP32 θα συνεχίσει να σαρώνει το joystick μέχρι να το βρει. Μόλις γίνει η σύνδεση, εάν χαθεί στη συνέχεια, το ESP32 θα επαναρυθμιστεί και θα ξεκινήσει ξανά τη σάρωση. Το ESP32 επαναφέρεται επειδή δεν υπάρχουν λειτουργίες ESP32 SDK για επαναφορά της στοίβας Bluetooth για επανεκκίνηση της σάρωσης.
Βήμα 3: Αποκρυπτογράφηση συμβάντων Joystick και Button
Ένα συμβάν επανάκλησης στο ESP32 λαμβάνει τρία διαφορετικά πακέτα δεδομένων από τον διακομιστή για τα τρία χαρακτηριστικά που έχουν ρυθμιστεί για την παροχή ειδοποιήσεων. Ένα πακέτο έχει μήκος τέσσερα byte. Τρία από τα byte περιέχουν τη θέση του άξονα Χ, τη θέση του άξονα Υ και τα κουμπιά σκανδάλης, τα οποία είναι αντιστοιχισμένα στο byte. Τα άλλα δύο πακέτα είναι δύο bytes το καθένα και έχουν ένα μόνο byte που έχει την κατάσταση κουμπιού αντιστοίχισης bit. Τα λαμβανόμενα πακέτα αποκωδικοποιούνται και αντιγράφονται σε έναν πίνακα byte στη μνήμη. Τα δεδομένα του άξονα του joystick μπαίνουν σε byte δεδομένων X και Y και κάθε ένα από τα bytes κουμπιών χαρτογράφησης τριών bit κατευθύνεται στο κατάλληλο byte για αυτά τα κουμπιά.
Δημιουργείται μια εργασία FreeRTOS για τον χειρισμό των δεδομένων που λαμβάνονται από τις ειδοποιήσεις. Μια εργασία για τα κουμπιά χειριστηρίου και σκανδάλης, μία εργασία για τα κουμπιά A & B και μια εργασία για τα κουμπιά C & D. Κάθε μία από αυτές τις εργασίες έχει σαφώς επισημασμένες περιοχές όπου πρέπει να προσθέσετε τον κώδικα για να κάνετε αυτό που θέλετε με το συμβάν. Αναζητήστε το σχόλιο "// ===== προσθέστε τον κωδικό σας εδώ =====" στο σώμα της εργασίας και προσθέστε τον κωδικό σας μετά από αυτό. Κάθε εργασία έχει ένα σχόλιο που υποδεικνύει για ποιο λόγο χρησιμοποιείται και χρησιμοποιεί ένα Serial.println () για να εκτυπώσει ένα μήνυμα σχετικά με το συμβάν που συνέβη.
Ακολουθεί ένα παράδειγμα από την εργασία κουμπιού A/B.
void taskButtonAB (κενό *παράμετρος) {uint8_t κουμπιά;
// ===== εάν η εργασία απαιτεί μία μόνο προετοιμασία, τοποθετήστε την εδώ =====
ενώ (true) {// εγκαταλείψτε την CPU, περιμένετε νέα δεδομένα vTaskSuspend (NULL). // μόλις ξυπνήσαμε, νέα δεδομένα είναι διαθέσιμα κουμπιά = VrBoxData [VB_BTNAB]; Serial.printf ("Κουμπιά A/B: %02X / n", κουμπιά); if (κουμπιά & VB_BUTTON_A) {// κουμπί A πατήθηκε ή παραμένει πατημένο Serial.println ("Κουμπί Α"); // ===== προσθέστε τον κωδικό σας εδώ =====}
εάν (κουμπιά & VB_BUTTON_B)
{// το κουμπί Β πατήθηκε ή παραμένει πατημένο Serial.println ("Κουμπί Β").
// ===== προσθέστε τον κωδικό σας εδώ =====
}} // for} // taskButtonAB
Βήμα 4: Λειτουργία VR Box: το Joystick
Εάν το joystick παραμείνει στην κεντρική θέση, δεν αποστέλλονται ειδοποιήσεις για το joystick. Μόλις μετακινηθεί το joystick από το κέντρο, αποστέλλεται ένα μήνυμα ειδοποίησης με δεδομένα joystick και δεδομένα κουμπιού σκανδάλης περίπου κάθε 15mS. Όταν το χειριστήριο μετακινείται πίσω στο κέντρο, δεν αποστέλλεται ειδοποίηση ότι έχει μετακινηθεί στο κέντρο. Με άλλα λόγια, σας λέει ότι το χειριστήριο έχει μετακινηθεί από το κέντρο, αλλά όχι ότι έχει μετακινηθεί στο κέντρο. Το τελικό αποτέλεσμα είναι ότι λαμβάνετε μηνύματα που υποδεικνύουν ότι το χειριστήριο κινείται προς το κέντρο, αλλά όχι ότι έχει φτάσει στο κέντρο. Πολύ ενοχλητικό. Τα δύο κουμπιά σκανδάλης περιλαμβάνονται με τα δεδομένα του χειριστηρίου. Πατώντας ένα από τα κουμπιά σκανδάλης μετά την επιστροφή του χειριστηρίου στο κέντρο, η θέση του χειριστηρίου θα μηδενιστεί. Το Framework έχει ενσωματωμένο ένα χρονόμετρο χρονικού ορίου λήψης που προσομοιώνει αυτόματα ένα μήνυμα ειδοποίησης joystick σε σύντομο χρονικό διάστημα αφού σταματήσουν να φτάνουν όλα τα μηνύματα ειδοποίησης joystick/κουμπιού ενεργοποίησης. Ο χρονοδιακόπτης θέτει το χειριστήριο στο μηδέν. Το χειριστήριο έχει εύρος περίπου +/- 25 σε κάθε άξονα.
Βήμα 5: Λειτουργία VR Box: Κουμπιά ενεργοποίησης
Τα κουμπιά σκανδάλης θα στείλουν ένα μήνυμα ειδοποίησης μία φορά όταν πατηθούν και ξανά όταν απελευθερωθούν. Το πατημένο μήνυμα ειδοποίησης θα δείχνει το κουμπί που πατήθηκε. Το μήνυμα ειδοποίησης έκδοσης υποδεικνύει ότι και τα δύο κουμπιά έχουν απελευθερωθεί.
Κρατώντας το κάτω κουμπί σκανδάλης θα εμποδίσετε τον διακομιστή να εντοπίσει ότι έχει πατηθεί το επάνω κουμπί σκανδάλης. Κρατώντας το επάνω κουμπί σκανδάλης και πατώντας το κάτω κουμπί σκανδάλης, ο διακομιστής αποστέλλει ένα μήνυμα ειδοποίησης ότι πατά το κάτω κουμπί σκανδάλης (το επάνω κουμπί σκανδάλης θα είναι μηδέν!). Η απελευθέρωση του κάτω κουμπιού σκανδάλης θα προκαλέσει στον διακομιστή να στείλει μια ειδοποίηση ότι το επάνω κουμπί σκανδάλης πιέζεται και η κάτω σκανδάλη απελευθερώνεται.
Με άλλα λόγια, το κάτω κουμπί σκανδάλης κυριαρχεί πάνω από το πάνω κουμπί σκανδάλης και θα το παρακάμψει όταν πατηθούν και τα δύο. Πρέπει να καθορίσετε τον τρόπο χειρισμού της θήκης και των δύο κουμπιών που πιέζονται.
Βήμα 6: Λειτουργία VR Box: Κουμπιά A/B
Τα κουμπιά Α και Β λειτουργούν σαν το χειριστήριο και στέλνουν συνεχώς μηνύματα ειδοποίησης όταν τα πατάτε και τα κρατάτε πατημένα. Τα μηνύματα σταματούν όταν απελευθερωθεί το κουμπί. Τα κουμπιά Α και Β λειτουργούν παρόμοια με τα κουμπιά ενεργοποίησης, καθώς το κουμπί Α κυριαρχεί στο κουμπί Β, όπως το κάτω κουμπί σκανδάλης κυριαρχεί στο πάνω κουμπί σκανδάλης.
Βήμα 7: Λειτουργία VR Box: Κουμπιά C/D
Τα κουμπιά C και D στέλνουν ένα μήνυμα ειδοποίησης μία φορά όταν πιέζονται και ξανά όταν αφήνονται. Εάν κρατηθεί πατημένο, δεν αποστέλλονται άλλα μηνύματα μέχρι να κυκλοφορήσουν. Κρατώντας πατημένο ένα από τα κουμπιά C ή D, ο διακομιστής δεν μπορεί να εντοπίσει δραστηριότητα στο άλλο κουμπί.
Βήμα 8: Συμπέρασμα
Η λειτουργία των κουμπιών είναι κατά τη γνώμη μου κάπως ασταθής. Το πλαίσιο παρέχει θέσεις για να ενεργοποιήσετε τον κώδικά σας όταν πατήσετε ένα κουμπί. Εάν πρέπει επίσης να εντοπίσετε απελευθερώσεις κουμπιών, αυτό σας μένει να καταλάβετε πώς να το κάνετε.
Εξαρτάται αποκλειστικά από εσάς να καθορίσετε τι θέλετε να κάνει κάθε κουμπί και τι πρέπει να κάνει το χειριστήριο. Το πώς χειρίζεστε τις διαφορές στη σκανδάλη, τα κουμπιά A & B και C & D εξαρτάται από εσάς.
Lookάξτε στον κώδικα για το; taskJoyStick (), taskButtonAB (), taskButtonCD () λειτουργεί και προσθέστε τον κωδικό σας μετά το σχόλιο "// ===== προσθέστε τον κωδικό σας εδώ =====".
Θα χρειαστείτε έως και τέσσερις λειτουργίες για να χειριστείτε το joystick (εμπρός, πίσω, δεξιά και αριστερά) και έως έξι λειτουργίες για να χειριστείτε τα διάφορα κουμπιά. Εφαρμόστε τα όλα ή απλώς ό, τι χρειάζεστε. Η επιλογή είναι δική σου.
Εάν χρησιμοποιείτε αυτό το πλαίσιο. Θα μου άρεσε μια κραυγή για το για ποιο λόγο το χρησιμοποιήσατε και αν το βρήκατε εύκολο στη χρήση.
Εάν έχετε ερωτήσεις σχετικά με το πώς λειτουργεί ή χρειάζεστε βοήθεια για να λειτουργήσει, επικοινωνήστε μαζί μου.
Ο κωδικός είναι διαθέσιμος στο GitHub εδώ.
Απολαμβάνω.
Συνιστάται:
Τηλεχειριστήριο γίνεται τηλεχειριστήριο RF -- NRF24L01+ Φροντιστήριο: 5 βήματα (με εικόνες)
Τηλεχειριστήριο γίνεται τηλεχειριστήριο RF || NRF24L01+ Tutorial: Σε αυτό το έργο θα σας δείξω πώς χρησιμοποίησα το δημοφιλές nRF24L01+ RF IC για να προσαρμόσω ασύρματα τη φωτεινότητα μιας λωρίδας LED μέσω τριών άχρηστων κουμπιών ενός τηλεχειριστηρίου τηλεόρασης. Ας αρχίσουμε
Ξύλινο τηλεχειριστήριο Bluetooth για Lego Duplo Train: 3 βήματα (με εικόνες)
Ξύλινο τηλεχειριστήριο Bluetooth για το Lego Duplo Train: Τα παιδιά μου λάτρεψαν αυτό το μικρό τρένο Lego Duplo, ιδιαίτερα το μικρότερο μου που αγωνίζεται να επικοινωνήσει με τα λόγια, έτσι ήθελα να της φτιάξω κάτι που θα την βοηθούσε να παίζει με το τρένο ανεξάρτητα από ενήλικες ή τηλέφωνα/tablet. Κάτι που
IRduino: Τηλεχειριστήριο Arduino - Μιμήστε ένα χαμένο τηλεχειριστήριο: 6 βήματα
IRduino: Arduino Remote Control - Imitate a Lost Remote: Αν έχετε χάσει ποτέ το τηλεχειριστήριο της τηλεόρασης ή του DVD player σας, γνωρίζετε πόσο απογοητευτικό είναι να περπατάτε, να βρίσκετε και να χρησιμοποιείτε τα κουμπιά της ίδιας της συσκευής. Μερικές φορές, αυτά τα κουμπιά δεν προσφέρουν καν την ίδια λειτουργικότητα με το τηλεχειριστήριο. Λήψη
Ρομποτική παλάμη χειρός με τηλεχειριστήριο Bluetooth: 4 βήματα
Bluetooth Απομακρυσμένα ελεγχόμενη ρομποτική παλάμη χεριών: Σε αυτό το σεμινάριο θα εξετάσουμε λεπτομερώς και θα σας δώσουμε όλες τις απαραίτητες πληροφορίες για να δημιουργήσετε τη δική σας τηλεχειριζόμενη ρομποτική παλάμη χειρός με bluetooth. Μπορείτε να το αναπτύξετε περαιτέρω για να γίνει ένας ολόκληρος ρομποτικός βραχίονας, αν θέλετε … Th
Μετατρέψτε το τηλεχειριστήριο IR σε τηλεχειριστήριο RF: 9 βήματα (με εικόνες)
Μετατροπή του τηλεχειριστηρίου IR σε τηλεχειριστήριο RF: Στο σημερινό Instructable, θα σας δείξω πώς μπορείτε να χρησιμοποιήσετε μια γενική μονάδα RF χωρίς μικροελεγκτή που θα μας οδηγήσει τελικά στη δημιουργία ενός έργου όπου μπορείτε να μετατρέψετε ένα τηλεχειριστήριο IR οποιασδήποτε συσκευής σε RF Μακρινός. Το κύριο πλεονέκτημα της μετατροπής ενός