Kazalo:
- Korak: Nekaj o nizki porabi energije Bluetooth (BLE)
- 2. korak: Kazalniki skeniranja in povezave
- 3. korak: Dešifriranje dogodkov igralne palice in gumbov
- 4. korak: Delovanje VR škatle: igralna palica
- 5. korak: Delovanje VR škatle: Sprožilni gumbi
- Korak 6: Delovanje VR škatle: gumbi A/B
- Korak 7: Delovanje VR škatle: gumbi C/D
- 8. korak: Zaključek
Video: ESP32 Bluetooth BLE daljinski upravljalnik: 8 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:07
Ta projekt je primer, kako poceni krmilno palčko Bluetooth BLE priključiti na ESP32. Koda je bila napisana z uporabo Arduino IDE Ver 1.8.5 z dodatkom ESP32. Uporabljena krmilna palica BLE je komercialna naprava, ki jo lahko kupite v internetu za manj kot 20,00 USD ali v lokalni trgovini fiveBELoW za 5,00 USD.
Krmilna palica, ki sem jo uporabil za ta projekt, je daljinski upravljalnik Bluetooth Spectrum VR Control. Trži se kot delo s tabličnimi računalniki Android in IOS kot igralna palica/miška za uporabo s slušalkami VR.
Bluetooth daljinski upravljalnik VR Control ima eno samo krmilno palico z osjo X in Y, dva sprožilna gumba spredaj in šest gumbov na ročaju. Dva gumba sta za vklop/izklop in nadzor načina. Preostale štiri gumbe lahko uporabite za karkoli želite. Ta projekt je okostje ali ogrodje, ki obravnava vso povezavo Bluetooth in dekodiranje gumbov in krmilne palice. Vse, kar morate storiti, je, da dodate klice funkcij, s katerimi upravljate, kaj želite, da gumbi in krmilna palica počnejo. Za uporabo tega ogrodja vam ni treba vedeti ničesar o Bluetoothu.
Obstaja veliko spletnih mest s podrobnimi navodili za namestitev Arduino IDE in dodatka ESP32. Tu ne bom poskušal ponoviti teh podatkov. Poiščite na Googlu in sledite navodilom.
Okvir je prilagoditev primera odjemalca BLE, ki ga je objavila IoT Sharing. Najdete ga tukaj. To kodo lahko preučite, če želite razumeti, kako deluje BLE. Expressif ima popoln primer za odjemalca GATT BLE in podrobno razlaga delovanje (ni napisano za Arduino IDE). Lahko ga dobite tukaj.
To ni vadnica BLE. Ne bom podrobno razlagal, kako koda deluje. Za opis nekaterih funkcij igralne palice bom uporabil terminologijo BLE. Del kode, ki ga morate spremeniti za svoj projekt, bo podrobno razložen, da ga boste lažje spremenili. Obseg je omejen, da bo ta Instructable kratek in osredotočen na uporabo krmilne palice.
Korak: Nekaj o nizki porabi energije Bluetooth (BLE)
To ni namenjeno vadnici o BLE. Ko sem začel s tem projektom, nisem vedel razlike med BLE in Classic Bluetooth. Hotel sem samo preveriti, ali lahko kupljeno igralno palico dobim za delo z ESP32. V naslednjem besedilu uporabljam terminologijo BLE za poenostavljen pregled delovanja BLE.
BLE uporablja arhitekturo odjemalec/strežnik. Ena naprava je strežnik, ki ponuja storitve. Druga naprava je odjemalec, ki uporablja storitve. Da bi zmanjšali zahteve po porabi energije, BLE pošlje le majhne pakete informacij, ko pride do spremembe. V primeru krmilne palice je naprava krmilna palica strežnik. Kot strežnik se oglašuje in na zahtevo posreduje seznam storitev, ki jih ponuja. Naprava s krmilno palčko oglašuje pet storitev. Edina storitev, ki nas zanima, je storitev BLE HID (naprava za človeški vmesnik). Storitev BLE ima s seboj povezane značilnosti. Značilnost je običajno vir podatkov. Storitev HID krmilne palice ima deset značilnosti. Nekatere značilnosti so podvojene in se zanemarjajo. Zanimajo nas le značilnosti poročila BLE, ki imajo zmožnosti branja in obveščanja. Te zahteve izpolnjujejo tri značilnosti in zagotavljajo podatke o položaju igralne palice in stanju gumbov. Ko je obvestilo omogočeno, bo strežnik poslal podatkovne pakete, ko bo zaznana sprememba povezane značilnosti.
Okvir preveri, ali ima strežnik, ki ga najde, storitev BLE HID, nato pa omogoči obvestila o treh značilnostih poročila, ki zagotavljajo informacije o krmilni palici in stanju gumba. Potem, ko pritisnete ali spustite gumb ali premaknete krmilno palčko, ESP32 prejme paket podatkov, ki mu pove, kakšen je nov položaj krmilne palice in/ali stanje nekaterih gumbov.
2. korak: Kazalniki skeniranja in povezave
Okvir opredeljuje dve LED, ZELENO in BLUELED in ju dodeli dvema nožicama GPIO ESP32. ZELENO zasveti, ko ESP32 išče krmilno palčko BLE. Ko je krmilna palica najdena, se ZELENO izklopi in BLUELED zasveti, kar pomeni, da je povezava vzpostavljena in ste pripravljeni za uporabo. Če se povezava prekine, se BLUELED izklopi, ESP32 se ponastavi, ZELENO zasveti in skeniranje se začne znova. Če krmilne palice ne najdete v tridesetih sekundah, se skeniranje ustavi in ZELENA se izklopi. Po petih sekundah se optično branje znova zažene in ZELENO se vklopi.
Končni rezultat je, da bo ESP32 še naprej iskal krmilno palčko, dokler je ne najde. Ko je povezava vzpostavljena, se bo ESP32 ponastavil in znova začel skenirati, če se nato prekine. ESP32 se ponastavi, ker ni funkcij ESP32 SDK za ponastavitev sklada Bluetooth za ponovni zagon skeniranja.
3. korak: Dešifriranje dogodkov igralne palice in gumbov
En dogodek povratnega klica na ESP32 prejme od strežnika tri različne podatkovne pakete za tri značilnosti, ki so bile nastavljene za zagotavljanje obvestil. En paket je dolg štiri bajte. Trije od bajtov vsebujejo položaj osi X, položaj osi Y in sprožilne gumbe, ki so bitno preslikani v bajtu. Druga dva paketa sta po dva bajta in imata en sam bajt, ki ima stanje gumbov preslikanih v bit. Prejeti paketi se dekodirajo in kopirajo v pomnilnik bajtov. Podatki osi krmilne palice gredo v podatkovne bajte X in Y, vsak od treh bitnih preslikanih bajtov gumbov pa je usmerjen v ustrezen bajt za te gumbe.
Ustvari se opravilo FreeRTOS za obdelavo podatkov, prejetih z obvestili. Ena naloga za krmilno palčko in sprožilne gumbe, ena naloga za gumbe A & B in ena naloga za gumbe C & D. Vsako od teh opravil ima jasno označena področja, kamor morate dodati kodo, da z dogodkom naredite, kar želite. V telesu naloge poiščite komentar "// ===== tukaj dodajte svojo kodo =====" in po njem dodajte svojo kodo. Vsako opravilo ima komentar, ki označuje, za kaj se uporablja, in uporablja Serial.println () za tiskanje sporočila o dogodku, ki se je zgodil.
Tu je primer iz naloge gumba A/B;
void taskButtonAB (parameter void *) {uint8_t gumbi;
// ===== če naloga zahteva enkratno inicializacijo, jo vnesite tukaj =====
while (true) {// odreči se CPU -ju, počakajte na nove podatke vTaskSuspend (NULL); // pravkar smo se zbudili, na voljo so novi podatki gumbi = VrBoxData [VB_BTNAB]; Serial.printf ("Gumbi A/B: %02X / n", gumbi); if (gumbi & VB_BUTTON_A) {// gumb A pritisnjen ali zadržan Serial.println ("gumb A"); // ===== tukaj dodajte svojo kodo =====}
if (gumbi & VB_BUTTON_B)
{// gumb B pritisnjen ali ga držite pritisnjen Serial.println ("Gumb B");
// ===== tukaj dodajte svojo kodo =====
}} // za} // taskButtonAB
4. korak: Delovanje VR škatle: igralna palica
Če krmilno palčko pustite v srednjem položaju, se obvestila o krmilni palici ne pošiljajo. Ko je krmilna palica premaknjena iz središča, se na vsakih 15 ms pošlje obvestilno sporočilo s podatki igralne palice in podatki o gumbih sprožilca. Ko se krmilna palica premakne nazaj na sredino, obvestilo, da se je premaknilo na sredino, ne pošlje. Z drugimi besedami, pove, da se je igralna palica premaknila iz središča, ne pa, da se je premaknila v sredino. Končni rezultat je, da prejmete sporočila, ki kažejo, da se krmilna palica premika proti sredini, ne pa, da je dosegla sredino. Zelo nadležna. Dva sprožilna gumba sta vključena s podatki krmilne palice. Če pritisnete eno od sprožilnih tipk po vrnitvi krmilne palice v sredino, bo položaj krmilne palice posodobljen na nič. Okvir ima vgrajen časovnik časovne omejitve, ki samodejno simulira sporočilo z obvestilom krmilne palice kratek čas, potem ko vsa obvestilna sporočila krmilne palice/sprožilca prenehajo prihajati. Časovnik nastavi igralno palico na nič. Krmilna palica ima razpon približno +/- 25 na vsaki osi.
5. korak: Delovanje VR škatle: Sprožilni gumbi
Sprožilni gumbi bodo ob pritisku enkrat poslali obvestilo in ob sprostitvi znova. Sporočilo z obvestilom bo prikazalo pritisnjeni gumb. Sporočilo o sprostitvi označuje, da sta oba gumba sproščena.
Držanje spodnjega sprožilnega gumba prepreči, da bi strežnik odkril, da je bil pritisnjen zgornji sprožilni gumb. Če držite zgornji gumb sprožilca in pritisnete spodnji gumb sprožilca, strežnik pošlje obvestilo, da je pritisnjen spodnji gumb sprožilca (zgornji gumb sprožilca bo nič!). Če spustite spodnji gumb za sprožitev, bo strežnik poslal obvestilo, da je pritisnjen zgornji gumb sprožilca, spodnji sprožilec pa sproščen.
Z drugimi besedami, spodnji sprožilni gumb prevladuje nad zgornjim sprožilnim gumbom in ga bo preglasil, ko pritisnete oba. Odločiti se morate, kako ravnati s pritiskom na oba gumba.
Korak 6: Delovanje VR škatle: gumbi A/B
Gumba A in B delujeta kot krmilna palica in ob pritisku in držanju nenehno pošiljata obvestilna sporočila. Sporočila se ustavijo, ko gumb spustite. Gumbi A in B delujejo podobno kot sprožilci, saj gumb A prevladuje nad gumbom B, tako kot spodnji gumb sprožilca dominira zgornji gumb sprožilca.
Korak 7: Delovanje VR škatle: gumbi C/D
Gumbi C in D ob pritisku pošljejo obvestilno sporočilo in ob sprostitvi še enkrat. Če držite pritisnjeno, se do sprostitve ne pošljejo nobena nadaljnja sporočila. Če držite enega od gumbov C ali D, strežnik prepreči zaznavanje dejavnosti na drugem gumbu.
8. korak: Zaključek
Delovanje gumbov je po mojem mnenju nekoliko nerodno. Okvir določa mesta, na katera lahko koda deluje, ko pritisnete gumb. Če morate odkriti tudi sprostitve gumbov, boste morali ugotoviti, kako to storiti.
V celoti je odvisno od vas, da določite, kaj želite narediti z vsakim gumbom in kaj naj premika krmilna palica. Kako ravnate z razlikami v sprožilcu, gumbih A & B in C & D, je odvisno od vas.
V kodi poiščite; taskJoyStick (), taskButtonAB (), taskButtonCD () in dodajte kodo po komentarju "// ===== tukaj dodajte svojo kodo =====".
Za krmiljenje krmilne palice potrebujete do štiri funkcije (naprej, nazaj, desno in levo) in do šest funkcij za upravljanje različnih gumbov. Izvedite vse ali samo tisto, kar potrebujete. Izbira je vaša.
Če uporabljate ta okvir. Vesela bi bila, za kaj ste jo uporabljali in če bi se vam zdelo, da je enostavna za uporabo.
Če imate vprašanja o tem, kako deluje, ali potrebujete pomoč pri delovanju, me kontaktirajte.
Koda je na voljo na GitHubu tukaj.
Uživajte.
Priporočena:
Klonirajte kateri koli daljinski upravljalnik z Arduino Nano: 5 korakov
Klonirajte kateri koli daljinski upravljalnik z Arduino Nano: Klonirajte kateri koli daljinski upravljalnik z Arduino Nano
10W RGB daljinski upravljalnik zunanje nočne svetilke: 5 korakov
10W RGB daljinski upravljalnik zunanje nočne svetilke: Ta projekt je 10W RGB LED svetilka za noč, lahko jo postavite poleg sebe in vam zagotovite urno razsvetljavo. Navdihnila me je Balad Lamp, prisotna v Franciji, vendar nekoliko močna (komercialna različica je približno 3W, moja 10W) in še več
Daljinski upravljalnik na osnovi brskalnika Arduino (linux): 9 korakov (s slikami)
Daljinski upravljalnik na osnovi brskalnika Arduino (linux): Imamo otroke. Obožujem jih do potankosti, vendar vedno prikrivajo daljinski upravljalnik za satelit in televizijo, ko prižgejo otroške kanale. Potem ko se je to nekaj let dogajalo vsak dan in potem, ko mi je draga žena dovolila
Daljinski upravljalnik na osnovi LoRa - Nadzor aparatov z velikih razdalj: 8 korakov
Daljinski upravljalnik na osnovi LoRa | Nadzor aparatov z velikih razdalj: Hej, kaj se dogaja, fantje! Akarsh tukaj iz CETech-a. V tem projektu bomo ustvarili daljinski upravljalnik, ki ga lahko uporabimo za krmiljenje različnih instrumentov, kot so LED, motorji ali če govorimo o vsakdanjem življenju, lahko nadzorujemo domačo aplikacijo
Bluetooth daljinski upravljalnik "Retro Future": 9 korakov (s slikami)
Daljinski upravljalnik Bluetooth "Retro Future": Vedno mi je bil všeč videz " sveta jutri " predstavljeni smo bili v znanstvenofantastičnih in konceptnih izdelkih sredi stoletja. V redu, to ni res. Ko sem bil mlad, sem mislil, da so trikoderji na Zvezdnih poteh grdi in nerodni, toda