INHOUDSOPGAWE:
- Stap 1: 'n bietjie oor Bluetooth lae energie (BLE)
- Stap 2: Aanwysers vir skandering en verbinding
- Stap 3: Ontsifering van joystick- en knoppiegebeurtenisse
- Stap 4: VR Box -werking: die joystick
- Stap 5: VR Box -werking: snellerknoppies
- Stap 6: VR -boksbediening: A/B -knoppies
- Stap 7: VR -boksbediening: C/D -knoppies
- Stap 8: Gevolgtrekking
Video: ESP32 Bluetooth BLE -afstandsbediening: 8 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:27
Hierdie projek is 'n voorbeeld van hoe u 'n goedkoop Bluetooth BLE -joystick aan 'n ESP32 kan koppel. Die kode is geskryf met behulp van die Arduino IDE Ver 1.8.5 met die ESP32 -byvoeging. Die gebruikte BLE -joystick is 'n kommersiële toestel wat u op die internet kan koop vir minder as $ 20,00 of by u plaaslike fiveBELoW -winkel vir $ 5,00.
Die joystick wat ek vir hierdie projek gebruik het, is 'n Spektrum VR Control Bluetooth -afstandsbediening. Dit word bemark as werk met Android- en IOS -tablette as 'n joystick/muis vir gebruik met VR -headsets.
Die VR -beheer Bluetooth -afstandsbediening het 'n enkele joystick met X- en Y -as, twee snellerknoppies voor en ses knoppies op die handvatsel. Twee van die knoppies is vir aan-/afskakel en modusbeheer. Die ander vier knoppies kan gebruik word vir wat u wil. Hierdie projek is 'n skelet of raamwerk wat al die Bluetooth -koppelvlakke en dekodering van die knoppies en joystick hanteer. Al wat u hoef te doen is om funksieoproepe by te voeg om te hanteer wat u wil hê dat die knoppies en die joystick moet doen. U hoef niks van Bluetooth te weet om hierdie raamwerk te gebruik nie.
Daar is talle webwerwe met gedetailleerde instruksies vir die installering van die Arduino IDE en die ESP32 -byvoeging. Ek gaan nie probeer om die inligting hier te herhaal nie. Google dit en volg die aanwysings.
Die raamwerk is 'n aanpassing van 'n BLE -kliëntvoorbeeld wat deur IoT Sharing gepubliseer is. U kan dit hier vind. U kan hierdie kode bestudeer om 'n idee te kry van hoe BLE werk. Expressif het 'n volledige voorbeeld vir 'n GATT BLE -kliënt en verduidelik die werking in detail (nie geskryf vir Arduino IDE nie). U kan dit hier kry.
Dit is nie 'n BLE -tutoriaal nie. Ek sal nie in detail verduidelik hoe die kode werk nie. Ek sal BLE -terminologie gebruik om sommige van die kenmerke van die joystick te beskryf. Die gedeelte van die kode wat u vir u projek moet verander, word breedvoerig verduidelik om u te help om dit te verander. Die omvang is beperk om hierdie instruksies kort te hou en gefokus op die gebruik van die joystick.
Stap 1: 'n bietjie oor Bluetooth lae energie (BLE)
Dit is nie bedoel om 'n handleiding oor BLE te wees nie. Toe ek met hierdie projek begin, het ek nie die verskil tussen BLE en Classic Bluetooth geken nie. Ek wou net kyk of ek die joystick wat ek gekoop het, met die ESP32 kon laat werk. In die volgende teks gebruik ek BLE -terminologie om 'n vereenvoudigde oorsig te gee van hoe BLE werk.
BLE gebruik 'n kliënt/bediener -argitektuur. Een toestel is 'n bediener wat dienste lewer. Die ander toestel is 'n kliënt wat dienste verbruik. Om die kragvereistes laag te hou, stuur BLE slegs klein pakkies inligting oor wanneer 'n verandering plaasvind. In die geval van die joystick is die joystick -toestel 'n bediener. As bediener adverteer dit homself en stuur dit 'n lys met die dienste wat dit lewer wanneer dit gevra word. Die joystick -toestel adverteer vyf dienste. Die enigste diens waarin ons belangstel, is die BLE HID -diens (Human Interface Device). 'N BLE -diens het die kenmerke wat daarmee gepaard gaan. 'N Kenmerk is tipies 'n bron van data. Die HID -diens van die joystick het tien eienskappe. Sommige van die kenmerke is duplikate en word geïgnoreer. Ons stel slegs belang in die BLE -verslagkenmerke met lees- en kennisgewingfunksies. Drie van die eienskappe voldoen aan hierdie vereistes en verskaf data oor die posisie van die joystick en die toestand van die knoppies. As kennisgewing geaktiveer is, stuur die bediener datapakkies wanneer 'n verandering op die verwante eienskap bespeur word.
Die raamwerk verifieer dat die bediener wat dit vind, die BLE HID -diens het en sal dan kennisgewings moontlik maak oor die drie verslagkenmerke wat inligting oor die joystick en die knoppie bied. As 'n knoppie ingedruk of losgemaak word of die joystick dan verskuif word, ontvang die ESP32 'n pakkie data wat vertel wat die nuwe joystick -posisie is en/of die toestand van sommige knoppies.
Stap 2: Aanwysers vir skandering en verbinding
Die raamwerk definieer twee LED's, GROEN en BLUEL, en ken dit toe aan twee van die ESP32 se GPIO -penne. Die GREENLED brand as die ESP32 na die BLE -joystick soek. As die joystick gevind word, word die GROENLOED afgeskakel en die BLUELED brand om aan te dui dat die verbinding tot stand gebring is en dat u gereed is om te gaan. As die verbinding verbreek word, word die BLUELED afgeskakel, die ESP32 word teruggestel, die GROENLED brand en die skandering begin weer. As die joystick nie binne dertig sekondes gevind word nie, stop die skandering en die GROENLED skakel uit. Na vyf sekondes begin die skandering weer en word die GROENLED aangeskakel.
Die eindresultaat is dat die ESP32 sal voortgaan om na die joystick te soek totdat dit dit vind. Sodra die verbinding tot stand gekom het, as dit dan verlore gaan, sal die ESP32 homself herstel en weer begin skandeer. Die ESP32 word teruggestel omdat daar geen ESP32 SDK -funksies is om die Bluetooth -stapel terug te stel om die skandering weer te begin nie.
Stap 3: Ontsifering van joystick- en knoppiegebeurtenisse
Een terugbelgebeurtenis op die ESP32 ontvang drie verskillende datapakkies van die bediener vir die drie kenmerke wat opgestel is om kennisgewings te verskaf. Een pakkie is vier grepe lank. Drie van die grepe bevat die posisie van die X -as, die posisie van die Y -as en die snellerknoppies, wat in die greep gegenereer word. Die ander twee pakkies is elk twee grepe en het 'n enkele greep wat die knoppie -toestand met 'n bietjie gekarteer het. Die pakkies wat ontvang is, word gedekodeer en na 'n byte -skikking in die geheue gekopieer. Die joystick -as -data gaan in die X- en Y -datagrepe en elk van die knoppiesgrepe met drie bisse word na die toepaslike byte vir die knoppies gestuur.
'N FreeRTOS -taak word geskep om die data wat deur die kennisgewings ontvang word, te hanteer. Een taak vir die joystick- en snellerknoppies, een taak vir die A & B -knoppies en een taak vir die C & D -knoppies. Elkeen van hierdie take het duidelik gemerk gebiede waar u kode moet byvoeg om te doen wat u wil met die geleentheid. Soek die opmerking "// ===== voeg u kode hier =====" in die liggaam van die taak by en voeg u kode daarna by. Elke taak het 'n opmerking wat aandui waarvoor dit gebruik word, en gebruik 'n Serial.println () om 'n boodskap oor die gebeurtenis wat plaasgevind het, af te druk.
Hier is 'n voorbeeld van die A/B -knoppie taak;
void taskButtonAB (void *parameter) {uint8_t knoppies;
// ====== As die taak eenmalige inisialisering vereis, plaas dit hier =====
terwyl (waar) {// die SVE laat vaar, wag vir nuwe data vTaskSuspend (NULL); // ons het net wakker geword, nuwe data is beskikbaar knoppies = VrBoxData [VB_BTNAB]; Serial.printf ("A/B -knoppies: %02X / n", knoppies); as (knoppies & VB_BUTTON_A) {// knoppie A ingedruk word of Serial.println ("knoppie A") ingedruk word; // ===== voeg u kode hier in =====}
as (knoppies & VB_BUTTON_B)
{// knoppie B word ingedruk of Serial.println ("knoppie B") ingedruk;
// ===== voeg u kode hier in =====
}} // vir} // taskButtonAB
Stap 4: VR Box -werking: die joystick
As die joystick in die middelste posisie gelaat word, word geen joystick -kennisgewings gestuur nie. Sodra die joystick van die middel af geskuif is, word ongeveer elke 15 ms 'n kennisgewingboodskap met joystick -data en snellerknoppiedata gestuur. As die joystick terug na die middel geskuif word, word 'n kennisgewing dat dit na die middel beweeg het, nie gestuur nie. Met ander woorde, dit dui aan dat die joystick van die middel af beweeg het, maar nie dat dit na die middel beweeg het nie. Die eindresultaat is dat u boodskappe ontvang wat aandui dat die joystick na die middel beweeg, maar nie dat dit die middel bereik het nie. Baie irriterend. Die twee snellerknoppies word by die joystick -data ingesluit. Deur op een van die snellerknoppies te druk nadat die joystick in die middel teruggekeer is, word die joystick se posisie na nul opgedateer. Daar is 'n ingeboude time-out timer in die Framework wat outomaties 'n joystick-kennisgewingboodskap simuleer, kort nadat alle kennisgewingsboodskappe van die joystick/sneller stop. Die timer stel die joystick op nul. Die joystick het 'n reeks van ongeveer +/- 25 op elke as.
Stap 5: VR Box -werking: snellerknoppies
Die snellerknoppies stuur een keer 'n kennisgewingboodskap wanneer dit ingedruk word en weer wanneer dit vrygestel word. Die ingedrukte kennisgewingboodskap sal die knoppie aandui wat ingedruk is. Die kennisgewingboodskap dui aan dat beide knoppies vrygestel word.
As u die onderste snellerknoppie ingedruk hou, kan die bediener nie agterkom dat die boonste snellerknoppie ingedruk is nie. As u die boonste snellerknoppie ingedruk hou en op die onderste snitknoppie druk, stuur die bediener 'n kennisgewingboodskap dat die onderste snellerknoppie ingedruk word (die boonste snellerknoppie sal nul wees!). As u die onderste snellerknoppie loslaat, sal die bediener 'n kennisgewing stuur dat die boonste snellerknoppie ingedruk word en die onderste sneller vrygestel word.
Met ander woorde, die onderste snitknoppie is oorheersend bo die boonste snellerknoppie en sal dit oorskryf as daar op beide ingedruk word. U moet bepaal hoe u die geval met die druk van beide knoppies moet hanteer.
Stap 6: VR -boksbediening: A/B -knoppies
Die A- en B -knoppies werk soos die joystick en stuur deurlopend kennisgewingsboodskappe wanneer dit ingedruk word. Die boodskappe stop wanneer die knoppie losgemaak word. Die A- en B -knoppies werk soortgelyk aan die snellerknoppies deurdat die A -knoppie die B -knoppie oorheers, net soos die onderste snitknoppie die boonste snellerknoppie oorheers.
Stap 7: VR -boksbediening: C/D -knoppies
Die C- en D -knoppies stuur een keer 'n kennisgewingboodskap wanneer dit ingedruk word en weer wanneer dit vrygestel word. As dit ingedruk word, word geen verdere boodskappe gestuur totdat dit vrygestel is nie. As u een van die C- of D -knoppies ingedruk hou, kan die bediener nie die aktiwiteit op die ander knoppie opspoor nie.
Stap 8: Gevolgtrekking
Die werking van die knoppies is na my mening 'n bietjie wispelturig. Die raamwerk maak voorsiening vir plekke om u kode op te tree as u op 'n knoppie druk. As u ook die vrystelling van knoppies moet opspoor, moet u eers uitvind hoe u dit moet doen.
Dit is heeltemal aan u om te bepaal wat u wil hê dat elke knoppie moet doen en wat die joystick moet beweeg. Dit is aan jou hoe jy die verskille in die sneller, A & B en die C & D -knoppies hanteer.
Kyk in die kode vir die; taskJoyStick (), taskButtonAB (), taskButtonCD () funksies en voeg u kode by na die "// ===== voeg u kode hier =====" opmerking by.
U benodig tot vier funksies om die joystick te hanteer (vorentoe, agtertoe, regs en links) en tot ses funksies om die verskillende knoppies te hanteer. Implementeer hulle almal of net wat u nodig het. Die keuse is joune.
As u hierdie raamwerk gebruik. Ek sal graag 'n uitroep wil hê oor waarvoor u dit gebruik het en as u dit maklik vind om te gebruik.
As u vrae het oor hoe dit werk of hulp nodig het om dit te laat werk, kontak my.
Die kode is hier op GitHub beskikbaar.
Geniet dit.
Aanbeveel:
Mi -banddetektor met behulp van ESP32 BLE: 6 stappe
Mi Band Detector Gebruik ESP32 BLE: Hello Maker m ( - -) m Ek lees hierdie artikelvorm moon (moononournation github) oor hoe om esp32 ble te gebruik om die toestel te skandeer, so ek moes hierdie kode op github probeer Arduino_BLE_Scanner. nou wil ek my Mi Band 3 gebruik om die deur te ontsluit as ek by my kantoor kom
ESP32 Bluetooth -tutoriaal - Hoe om ingeboude Bluetooth van ESP32 te gebruik: 5 stappe
ESP32 Bluetooth -tutoriaal | Hoe om ingeboude Bluetooth van ESP32 te gebruik: Hallo ouens, aangesien die ESP32 -bord met WiFi & Bluetooth beide, maar vir ons meestal projekte gebruik ons gewoonlik slegs Wifi, ons gebruik nie Bluetooth nie. So in hierdie instruksies sal ek wys hoe maklik dit is om Bluetooth van ESP32 te gebruik & Vir u basiese projekte
Hoe om Bluetooth (BLE) te gebruik met ESP32: 3 stappe
Hoe om Bluetooth (BLE) te gebruik met ESP32: ##### NOTA ##### Die metode wat in hierdie instruksies getoon word, is oud en verouderd. Kyk na hierdie video vir die nuutste metode. ################ Terwyl die ESP32 spog met 'n uitgebreide funksielys (Wikipedia), is die ingeboude blou die grootste kenmerk
ESP32 -kodeopwekker - Wifi, BLE, Bluetooth: 9 stappe
ESP32 -kodeopwekker - Wifi, BLE, Bluetooth: Inleiding ESP32 is 'n goedkoop dubbele verwerker -chip met ondersteuning vir WiFi, Bluetooth Classic en BLE (Bluetooth Low Energy). Alhoewel die chip al 'n paar jaar uit is, is kodeondersteuning vir Arduino nog nie volledig nie (soos in April 2018), maar
Rollende robot met ESP32 -ding en TB6612FNG -bestuurder, beheer deur Android oor BLE: 11 stappe
Rollende robot met ESP32 -ding en TB6612FNG -bestuurder, beheer deur Android via BLE: Hallo almal, dit is my eerste instruksie. 'N Rollende robot (met die bynaam Raidho - van die rune wat verband hou met beweging) gebaseer op ESP32 Thing, TB6612 FNG en BLE. Een deel wat eienaardig kan lyk, is dat die foto's nie van die vervaardigingsproses kom nie