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

Τηλεχειριστήριο ESP32 Bluetooth BLE: 8 βήματα
Τηλεχειριστήριο ESP32 Bluetooth BLE: 8 βήματα

Βίντεο: Τηλεχειριστήριο ESP32 Bluetooth BLE: 8 βήματα

Βίντεο: Τηλεχειριστήριο ESP32 Bluetooth BLE: 8 βήματα
Βίντεο: Easiest ESP32 BLE (Bluetooth Low Energy) Tutorial | Arduino 2024, Νοέμβριος
Anonim
Τηλεχειριστήριο ESP32 Bluetooth BLE
Τηλεχειριστήριο ESP32 Bluetooth BLE
Τηλεχειριστήριο ESP32 Bluetooth BLE
Τηλεχειριστήριο ESP32 Bluetooth BLE
Τηλεχειριστήριο ESP32 Bluetooth BLE
Τηλεχειριστήριο ESP32 Bluetooth BLE
Τηλεχειριστήριο ESP32 Bluetooth BLE
Τηλεχειριστήριο ESP32 Bluetooth BLE

Αυτό το έργο είναι ένα παράδειγμα του τρόπου σύνδεσης ενός φθηνού 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 εδώ.

Απολαμβάνω.

Συνιστάται: