Taula de continguts:

Control remot ESP32 Bluetooth BLE: 8 passos
Control remot ESP32 Bluetooth BLE: 8 passos

Vídeo: Control remot ESP32 Bluetooth BLE: 8 passos

Vídeo: Control remot ESP32 Bluetooth BLE: 8 passos
Vídeo: ESP32 Bluetooth Classic - ESP32 Beginner's Guide 2024, Desembre
Anonim
Control remot ESPLE Bluetooth BLE
Control remot ESPLE Bluetooth BLE
Control remot ESPLE Bluetooth BLE
Control remot ESPLE Bluetooth BLE
Control remot ESPLE Bluetooth BLE
Control remot ESPLE Bluetooth BLE
Control remot ESPLE Bluetooth BLE
Control remot ESPLE Bluetooth BLE

Aquest projecte és un exemple de com connectar un joystick Bluetooth BLE econòmic a un ESP32. El codi es va escriure mitjançant Arduino IDE Ver 1.8.5 amb el complement ESP32. El joystick BLE utilitzat és un dispositiu comercial que podeu comprar a Internet per menys de 20,00 $ o des de la vostra botiga local de 5BELoW per 5,00 $.

El joystick que he utilitzat per a aquest projecte és un control remot Bluetooth Spektrum VR Control. Es comercialitza funcionant amb tauletes Android i IOS com a joystick / ratolí per utilitzar-los amb auriculars VR.

El control remot Bluetooth VR Control té un únic joystick amb eixos X i Y, dos botons d’activació al davant i sis botons al mànec. Dos dels botons són per encendre / apagar i controlar el mode. Els altres quatre botons es poden utilitzar per al que vulgueu. Aquest projecte és un esquelet o framework que gestiona tota la interfície i descodificació Bluetooth dels botons i del joystick. Tot el que heu de fer és afegir trucades de funció per gestionar el que voleu que facin els botons i el joystick. No cal saber res de Bluetooth per utilitzar aquest marc.

Hi ha nombrosos llocs web amb instruccions detallades per instal·lar Arduino IDE i el complement ESP32. No intentaré repetir aquesta informació aquí. Google i seguiu les instruccions.

El framework és una adaptació d’un exemple de client BLE publicat per IoT Sharing. El podeu trobar aquí. Podeu estudiar aquest codi per tenir una idea del funcionament de BLE. Expressif té un exemple complet per a un client GATT BLE i explica detalladament l’operació (no escrit per Arduino IDE). Ho podeu aconseguir aquí.

Aquest no és un tutorial BLE. No explicaré detalladament com funciona el codi. Utilitzaré la terminologia BLE per descriure algunes de les característiques del joystick. La part del codi que heu de modificar per al vostre projecte s'explicarà detalladament per ajudar-lo a modificar-lo. L’abast és limitat per mantenir aquest instructiu curt i centrat en l’ús del joystick.

Pas 1: una mica de Bluetooth de baixa energia (BLE)

No pretén ser un tutorial sobre BLE. Quan vaig començar aquest projecte, no sabia la diferència entre BLE i Classic Bluetooth. Només volia veure si podia aconseguir que el joystick que vaig comprar funcionés amb l’ESP32. En el text següent, faig servir la terminologia BLE per donar una visió simplificada de com funciona BLE.

BLE utilitza una arquitectura client / servidor. Un dispositiu és un servidor que proporciona serveis. L’altre dispositiu és un client que consumeix serveis. Per mantenir els requisits d’alimentació baixos, BLE només transmet paquets d’informació petits quan es produeix un canvi. En el cas del joystick, el dispositiu joystick és un servidor. Com a servidor, s’anuncia a si mateix i transmetrà una llista dels serveis que proporciona quan se li demani. El dispositiu joystick anuncia cinc serveis. L’únic servei que ens interessa és el servei BLE HID (Human Interface Device). Un servei BLE té associades les conegudes com a Característiques. Una característica sol ser una font de dades. El servei HID del joystick té deu característiques. Algunes de les característiques són duplicats i s’ignoren. Només ens interessen les característiques de l'informe BLE que tenen funcions de lectura i notificació. Tres de les característiques compleixen aquests requisits i proporcionen dades sobre la posició del joystick i l’estat dels botons. Quan la notificació està activada, el servidor enviarà paquets de dades quan es detecti un canvi a la característica associada.

El marc verifica que el servidor que troba té el servei BLE HID i, a continuació, activarà les notificacions de les tres característiques de l'informe que proporcionen informació sobre el joystick i l'estat dels botons. Després, quan es prem o es deixa anar un botó o es mou el joystick, l’ESP32 rep un paquet de dades que li indica quina és la nova posició del joystick i / o l’estat d’alguns botons.

Pas 2: indicadors d’escaneig i connexió

El framework defineix dos LEDS, GREENLED i BLUELED i els assigna a dos dels pins GPIO de l'ESP32. El GREENLED s’il·lumina quan l’ESP32 busca el joystick BLE. Quan es troba el joystick, el GREENLED està apagat i el BLUELED s’il·lumina per indicar que s’ha establert la connexió i que esteu preparats. Si es perd la connexió, s’apaga el BLUELED, es restableix l’ESP32, s’encén el GREENLED i es comença a escanejar. Si no es troba el joystick en un termini de trenta segons, l'escaneig s'atura i el GREENLED s'apaga. Al cap de cinc segons, es comença a escanejar de nou i s'encén el GREENLED.

El resultat final és que l’ESP32 continuarà buscant el joystick fins que el trobi. Un cop feta la connexió, si es perd, l'ESP32 es reiniciarà i començarà a escanejar de nou. L'ESP32 es restableix perquè no hi ha funcions de l'SDK ESP32 per restablir la pila Bluetooth per reiniciar l'escaneig.

Pas 3: desxiframent dels esdeveniments del botó i del joystick

Un esdeveniment de devolució de trucada a l'ESP32 rep tres paquets de dades diferents del servidor per a les tres característiques que es van configurar per proporcionar notificacions. Un paquet té una longitud de quatre bytes. Tres dels bytes contenen la posició de l'eix X, la posició de l'eix Y i els botons d'activació, que es mapen en bits al byte. Els altres dos paquets són de dos bytes cadascun i tenen un únic byte que té l'estat de botó mapat de bits. Els paquets rebuts es descodifiquen i es copien en una matriu de bytes a la memòria. Les dades de l'eix del joystick passen als bytes de dades X i Y i cadascun dels bytes de botó mapejats de tres bits es dirigeix al byte adequat per a aquests botons.

Es crea una tasca de FreeRTOS per gestionar les dades rebudes per les notificacions. Una tasca per als botons del joystick i el disparador, una tasca per als botons A & B i una tasca per als botons C & D. Cadascuna d'aquestes tasques té àrees clarament marcades on heu d'afegir codi per fer el que vulgueu amb l'esdeveniment. Cerqueu el comentari "// ===== afegiu el vostre codi aquí =====" al cos de la tasca i afegiu-lo després. Cada tasca té un comentari que indica per a què s’utilitza i utilitza un Serial.println () per imprimir un missatge sobre l’esdeveniment que s’ha produït.

Aquí teniu un exemple de la tasca del botó A / B;

void taskButtonAB (paràmetre void *) {botons uint8_t;

// ===== si la tasca requereix una inicialització única, poseu-la aquí =====

while (true) {// renuncia a la CPU, espereu noves dades vTaskSuspend (NULL); // acabem de despertar, hi ha noves dades disponibles botons = VrBoxData [VB_BTNAB]; Serial.printf ("Botons A / B:% 02X / n", botons); if (botons i VB_BUTTON_A) {// es prem el botó A o es manté premut Serial.println ("Botó A"); // ===== afegiu el vostre codi aquí =====}

if (botons i VB_BUTTON_B)

{// botó B premut o es manté premut Serial.println ("Botó B");

// ===== afegiu el vostre codi aquí =====

}} // per a} // taskButtonAB

Pas 4: Funcionament de VR Box: el joystick

Si el joystick es deixa a la posició central, no s’enviaran notificacions del joystick. Un cop el joystick es mou fora del centre, s'envia un missatge de notificació amb dades del joystick i dades del botó d'activació cada 15 mS. Quan el joystick es torna al centre, no s'envia cap notificació que s'hagi mogut al centre. En altres paraules, us indica que el joystick s'ha desplaçat del centre, però no que s'hagi mogut al centre. El resultat final és que rebeu missatges que indiquen que el joystick es mou cap al centre, però no que hagi arribat al centre. Molt molest. Els dos botons d’activació s’inclouen amb les dades del joystick. Si premeu un dels botons d'activació després de tornar el joystick al centre, la posició del joystick s'actualitzarà a zero. El Framework té incorporat un temporitzador de temps d’espera que simula automàticament un missatge de notificació del joystick poc temps després que deixin d’arribar tots els missatges de notificació del joystick / botó d’activació. El temporitzador posa el joystick a zero. El joystick té un rang d'aproximadament +/- 25 a cada eix.

Pas 5: Funcionament de la caixa de realitat virtual: botons d'activació

Els botons d'activació enviaran un missatge de notificació una vegada que es premen i de nou quan es deixa anar. El missatge de notificació premut indicarà el botó que s'ha premut. El missatge de notificació de llançament indica que els dos botons estan alliberats.

Si manteniu premut el botó d'activació inferior, el servidor no detectarà que s'hagi premut el botó d'activació inferior. Si manteniu premut el botó d'activació superior i premeu el botó d'activació inferior, el servidor envia un missatge de notificació que indica que el botó d'activació inferior està premut (el botó d'activació superior serà zero). Si deixeu anar el botó d'activació inferior, el servidor enviarà una notificació de que es prem el botó d'activació superior i s'allibera el disparador inferior.

Dit d'una altra manera, el botó d'activació inferior és dominant sobre el botó d'activació superior i el substituirà quan es premen tots dos. Heu de determinar com gestionar el cas de prémer els dos botons.

Pas 6: Funcionament de VR Box: botons A / B

Els botons A i B actuen com el joystick i envien missatges de notificació contínuament quan es mantenen premuts. Els missatges s’aturen quan es deixa anar el botó. Els botons A i B funcionen de manera similar als botons Trigger, ja que el botó A domina el botó B de la mateixa manera que el botó d'activació inferior domina el botó d'activació superior.

Pas 7: Funcionament de la caixa VR: botons C / D

Els botons C i D envien un missatge de notificació una vegada que es premen i de nou quan es deixa anar. Si es manté premut, no s’enviaran més missatges fins que no es publiquin. Si manteniu premut qualsevol dels botons C o D evitarà que el servidor detecti activitat a l’altre botó.

Pas 8: Conclusió

Al meu entendre, el funcionament dels botons és una mica molest. El Framework proporciona llocs on podeu actuar el vostre codi quan es prem un botó. Si també heu de detectar llançaments de botons, us queda l'esbrinar com fer-ho.

Depèn de vosaltres determinar què voleu que faci cada botó i què ha de fer el moviment del joystick. Depèn de vosaltres com gestioneu les diferències en el disparador, A & B i els botons C & D.

Cerqueu al codi el; taskJoyStick (), taskButtonAB (), taskButtonCD () i afegiu el vostre codi després del comentari "// ===== afegiu el vostre codi aquí =====".

Necessitareu fins a quatre funcions per manejar el joystick (endavant, enrere, dret i esquerre) i fins a sis funcions per manejar els diversos botons. Implementeu-los tots o només el que necessiteu. L’elecció és vostra.

Si utilitzeu aquest marc. M’encantaria fer un crit sobre per a què l’heu utilitzat i si us ha estat fàcil d’utilitzar.

Si teniu cap pregunta sobre com funciona o necessiteu ajuda perquè funcioni, poseu-vos en contacte amb mi.

El codi està disponible a GitHub aquí.

Gaudeix.

Recomanat: