Obsah:

Diaľkové ovládanie ESP32 Bluetooth BLE: 8 krokov
Diaľkové ovládanie ESP32 Bluetooth BLE: 8 krokov

Video: Diaľkové ovládanie ESP32 Bluetooth BLE: 8 krokov

Video: Diaľkové ovládanie ESP32 Bluetooth BLE: 8 krokov
Video: DIYmall ESP32S wifi bluetooth relay module control power Adaptor 2024, November
Anonim
ESP32 Bluetooth BLE diaľkové ovládanie
ESP32 Bluetooth BLE diaľkové ovládanie
ESP32 Bluetooth BLE diaľkové ovládanie
ESP32 Bluetooth BLE diaľkové ovládanie
ESP32 Bluetooth BLE diaľkové ovládanie
ESP32 Bluetooth BLE diaľkové ovládanie
ESP32 Bluetooth BLE diaľkové ovládanie
ESP32 Bluetooth BLE diaľkové ovládanie

Tento projekt je príkladom toho, ako k ESP32 pripojiť lacný joystick Bluetooth BLE. Kód bol napísaný pomocou Arduino IDE Ver 1.8.5 s doplnkom ESP32. Použitý joystick BLE je komerčné zariadenie, ktoré si môžete kúpiť na internete za menej ako 20,00 dolárov alebo v miestnom obchode FiveBELoW za 5,00 dolárov.

Joystick, ktorý som použil pre tento projekt, je diaľkový ovládač Bluetooth Spektrum VR Control Bluetooth. Predáva sa ako spolupráca s tabletmi Android a IOS ako joystick/myš na použitie s náhlavnými súpravami VR.

Diaľkový ovládač Bluetooth s ovládaním VR má jeden joystick s osami X a Y, dve spúšťacie tlačidlá vpredu a šesť tlačidiel na rukoväti. Dve z tlačidiel slúžia na zapnutie/vypnutie a ovládanie režimu. Ostatné štyri tlačidlá môžete použiť na čokoľvek chcete. Tento projekt je kostrou alebo rámcom, ktorý zvláda všetky rozhrania Bluetooth a dekódovanie tlačidiel a joysticku. Jediné, čo musíte urobiť, je pridať volania funkcií, aby sa zvládlo to, čo majú tlačidlá a joystick robiť. Na používanie tohto rámca nepotrebujete vedieť nič o Bluetooth.

Existuje množstvo webových stránok s podrobnými pokynmi na inštaláciu doplnku Arduino IDE a ESP32. Nebudem sa pokúšať tieto informácie tu opakovať. Google to a postupujte podľa pokynov.

Rámec je adaptáciou príkladu klienta BLE publikovaného spoločnosťou IoT Sharing. Nájdete ho tu. Tento kód si môžete naštudovať, aby ste získali predstavu o tom, ako BLE funguje. Expressif má úplný príklad pre klienta GATT BLE a podrobne vysvetľuje operáciu (nie je napísané pre Arduino IDE). Môžete ho získať tu.

Toto nie je návod na BLE. Nebudem podrobne vysvetľovať, ako kód funguje. Na opis niektorých funkcií joysticku použijem terminológiu BLE. Časť kódu, ktorú musíte pre svoj projekt upraviť, bude podrobne vysvetlená, aby vám pomohla ho upraviť. Rozsah je obmedzený, aby bol tento návod krátky a zameral sa na používanie joysticku.

Krok 1: Trochu o nízkoenergetickom Bluetooth (BLE)

Toto nemá byť návod na BLE. Keď som začínal s týmto projektom, nevedel som, aký je rozdiel medzi BLE a klasickým Bluetooth. Chcel som len zistiť, či môžem používať joystick, ktorý som si kúpil, pracovať s ESP32. V nasledujúcom texte používam terminológiu BLE, aby som poskytol zjednodušený prehľad o tom, ako BLE funguje.

BLE používa architektúru klient/server. Jedným zariadením je server, ktorý poskytuje služby. Druhé zariadenie je klient, ktorý spotrebúva služby. Aby sa znížili požiadavky na výkon, BLE prenáša iba malé pakety informácií, keď dôjde k zmene. V prípade joysticku je zariadením s joystickom server. Ako server sa sám inzeruje a na požiadanie odošle zoznam služieb, ktoré poskytuje. Zariadenie s joystickom inzeruje päť služieb. Jediná služba, o ktorú máme záujem, je služba BLE HID (Human Interface Device). Služba BLE má s ňou spojené takzvané charakteristiky. Charakteristika je spravidla zdrojom údajov. Služba HID joysticku má desať charakteristík. Niektoré z charakteristík sú duplikáty a sú ignorované. Máme záujem iba o charakteristiky zostavy BLE, ktoré majú schopnosť čítať a upozorňovať. Tri z charakteristík spĺňajú tieto požiadavky a poskytujú údaje o polohe joysticku a stave tlačidiel. Keď je zapnuté upozornenie, server odošle dátové pakety, ak je na priradenej charakteristike zistená zmena.

Rámec overí, že server, ktorý nájde, má službu BLE HID, a potom povolí oznámenia o troch charakteristikách správy, ktoré poskytujú informácie o stave joysticku a tlačidiel. Potom, keď je tlačidlo stlačené alebo uvoľnené alebo sa pohybuje joystickom, ESP32 dostane paket údajov, ktorý mu povie, aká je nová poloha joysticku a/alebo stav niektorých tlačidiel.

Krok 2: Indikátory skenovania a pripojenia

Rámec definuje dve LED diódy, ZELENÉ a BLUELED a priradí ich dvom GPIO pinom ESP32. ZELENÁ LED sa rozsvieti, keď ESP32 hľadá joystick BLE. Hneď ako nájdete joystick, ZELENÁ je vypnutá a BLUELED sa rozsvieti, čo znamená, že bolo nadviazané spojenie a ste pripravení ísť. Ak sa spojenie preruší, BLUELED sa vypne, ESP32 sa resetuje, ZELENO sa rozsvieti a skenovanie sa spustí znova. Ak joystick nenájdete do tridsiatich sekúnd, skenovanie sa zastaví a ZELENÁ sa vypne. Po piatich sekundách sa skenovanie znova spustí a ZELENÉ je zapnuté.

Konečným výsledkom je, že ESP32 bude pokračovať v hľadaní joysticku, kým ho nenájde. Po nadviazaní spojenia, ak sa stratí, sa ESP32 sám resetuje a začne znova skenovať. ESP32 sa resetuje, pretože neexistujú žiadne funkcie ESP32 SDK na resetovanie zásobníka Bluetooth na reštartovanie skenovania.

Krok 3: Dešifrovanie udalostí joysticku a tlačidiel

Jedna udalosť spätného volania na ESP32 prijíma zo servera tri rôzne dátové pakety pre tri charakteristiky, ktoré boli nastavené tak, aby poskytovali oznámenia. Jeden paket má dĺžku štyri bajty. Tri z bajtov obsahujú polohu osi X, polohu osi Y a spúšťacie tlačidlá, ktoré sú v bajte mapované bitovo. Ostatné dva pakety sú po dvoch bajtoch a majú jeden bajt, ktorý má stav tlačidla bitovo mapované. Prijaté pakety sa dekódujú a skopírujú do bajtového poľa v pamäti. Údaje osi joysticku idú do dátových bytov X a Y a každý z troch bitov mapovaných bajtov tlačidiel je nasmerovaný do príslušného bajtu pre tieto tlačidlá.

Úloha FreeRTOS je vytvorená na spracovanie údajov prijatých oznámeniami. Jedna úloha pre joystick a spúšťacie tlačidlá, jedna úloha pre tlačidlá A & B a jedna úloha pre tlačidlá C & D. Každá z týchto úloh má jasne označené oblasti, do ktorých by ste mali pridať kód, aby ste s udalosťou urobili, čo chcete. V texte úlohy hľadajte komentár „// ===== sem pridajte svoj kód =====“a zadajte za ním svoj kód. Každá úloha má komentár, ktorý naznačuje, na čo sa používa, a pomocou Serial.println () vytlačí správu o udalosti, ktorá nastala.

Tu je príklad z úlohy tlačidla A/B;

void taskButtonAB (parameter void *) {tlačidlá uint8_t;

// ===== ak úloha vyžaduje jednorazovú inicializáciu, zadajte ju sem =====

while (true) {// vzdať sa CPU, počkať na nové údaje vTaskSuspend (NULL); // práve sme sa zobudili, sú k dispozícii nové údaje tlačidlá = VrBoxData [VB_BTNAB]; Serial.printf ("A/B tlačidlá: %02X / n", tlačidlá); if (buttons & VB_BUTTON_A) {// tlačidlo A stlačené alebo je držané stlačené Serial.println ("tlačidlo A"); // ===== sem zadajte svoj kód =====}

if (tlačidlá & VB_BUTTON_B)

{// tlačidlo B stlačené alebo podržané Serial.println („tlačidlo B“);

// ===== sem zadajte svoj kód =====

}} // pre} // taskButtonAB

Krok 4: Prevádzka VR boxu: joystick

Ak je joystick ponechaný v strednej polohe, nebudú sa odosielať žiadne oznámenia. Akonáhle sa joystick posunie mimo stred, zhruba každých 15 mS sa odošle notifikačná správa s údajmi joysticku a údajmi o spúšti. Keď sa joystick presunie späť do stredu, upozornenie, že sa presunulo do stredu, sa neodošle. Inými slovami, hovorí vám, že sa joystick posunul mimo stred, ale nie, že sa posunul do stredu. Výsledkom je, že dostanete správy, ktoré naznačujú, že sa joystick pohybuje smerom do stredu, ale nie do stredu. Veľmi otravné. Dve spúšťacie tlačidlá sú súčasťou údajov joysticku. Stlačením jedného z tlačidiel spúšte po návrate joysticku do stredu sa poloha joysticku aktualizuje na nulu. Framework má v sebe zabudovaný časový spínač, ktorý automaticky simuluje oznamovaciu správu joystickom krátko po tom, ako prestanú prichádzať všetky správy s joystickom/tlačidlom spúšte. Časovač nastaví joystick na nulu. Joystick má rozsah približne +/- 25 na každej osi.

Krok 5: Prevádzka VR boxu: spúšťacie tlačidlá

Spúšťacie tlačidlá pošlú upozornenie raz po stlačení a znova po uvoľnení. Stlačená správa s upozornením bude indikovať tlačidlo, ktoré bolo stlačené. Správa s oznámením o vydaní naznačuje, že sú uvoľnené obe tlačidlá.

Podržanie spodného spúšťacieho tlačidla zabráni serveru v zistení, že bolo stlačené horné spúšťacie tlačidlo. Podržanie horného spúšťacieho tlačidla a stlačenie spodného spúšťacieho tlačidla spôsobí, že server odošle oznamovaciu správu o stlačení spodného spúšťacieho tlačidla (horné spúšťacie tlačidlo bude nulové!). Uvoľnenie spodného spúšťacieho tlačidla spôsobí, že server pošle upozornenie, že je stlačené horné spúšťacie tlačidlo a dolné spúšťacie tlačidlo je uvoľnené.

Inými slovami, spodné tlačidlo spúšte je dominantné nad horným tlačidlom spúšte a prepíše ho po stlačení oboch. Musíte určiť, ako sa bude zaobchádzať s prípadom stlačenia oboch tlačidiel.

Krok 6: Prevádzka VR boxu: tlačidlá A/B

Tlačidlá A a B fungujú ako joystick a po stlačení a podržaní nepretržite odosielajú oznámenia. Hlásenia sa zastavia po uvoľnení tlačidla. Tlačidlá A a B fungujú podobne ako spúšťacie tlačidlá v tom, že tlačidlo A dominuje tlačidlu B, rovnako ako spodné spúšťacie tlačidlo dominuje hornému spúšťaciemu tlačidlu.

Krok 7: Prevádzka VR boxu: tlačidlá C/D

Tlačidlá C a D odosielajú upozornenie raz po stlačení a znova po uvoľnení. Ak ich podržíte, nebudú odoslané žiadne ďalšie správy, kým nebudú uvoľnené. Podržanie jedného z tlačidiel C alebo D zabráni serveru v detekcii aktivity na druhom tlačidle.

Krok 8: Záver

Ovládanie tlačidiel je podľa mňa trochu vyhrotené. Rámec poskytuje miesta, kde váš kód pôsobí, keď stlačíte tlačidlo. Ak tiež potrebujete zistiť uvoľnenie tlačidiel, zostáva na vás, aby ste zistili, ako postupovať.

Je len na vás, aby ste určili, čo majú jednotlivé tlačidlá robiť a čo má pohyb joysticku vykonávať. Ako zvládnete rozdiely v tlačidlách, tlačidlách A & B a C & D, je na vás.

V kóde vyhľadajte kód; taskJoyStick (), taskButtonAB (), taskButtonCD () funguje a pridajte svoj kód po komentári "// ===== sem pridajte svoj kód =====".

Na ovládanie joysticku (dopredu, dozadu, doprava a doľava) budete potrebovať až štyri funkcie a na ovládanie rôznych tlačidiel až šesť funkcií. Implementujte ich všetky alebo len to, čo potrebujete. Výber je na tebe.

Ak použijete tento rámec. Bol by som rád, keby ste povedali, na čo ste to použili a či sa vám to zdá jednoduché.

Ak máte otázky o tom, ako funguje, alebo potrebujete pomoc s jeho uvedením do prevádzky, kontaktujte ma.

Kód je k dispozícii na GitHub tu.

Užite si to.

Odporúča: