Turinys:

ESP32 „Bluetooth BLE“nuotolinio valdymo pultas: 8 žingsniai
ESP32 „Bluetooth BLE“nuotolinio valdymo pultas: 8 žingsniai

Video: ESP32 „Bluetooth BLE“nuotolinio valdymo pultas: 8 žingsniai

Video: ESP32 „Bluetooth BLE“nuotolinio valdymo pultas: 8 žingsniai
Video: Arduino RC Car IOS app(AT-09/ HM-10 BLE controlled) 2024, Lapkritis
Anonim
ESP32 „Bluetooth BLE“nuotolinio valdymo pultas
ESP32 „Bluetooth BLE“nuotolinio valdymo pultas
ESP32 „Bluetooth BLE“nuotolinio valdymo pultas
ESP32 „Bluetooth BLE“nuotolinio valdymo pultas
ESP32 „Bluetooth BLE“nuotolinio valdymo pultas
ESP32 „Bluetooth BLE“nuotolinio valdymo pultas
ESP32 „Bluetooth BLE“nuotolinio valdymo pultas
ESP32 „Bluetooth BLE“nuotolinio valdymo pultas

Šis projektas yra pavyzdys, kaip prijungti nebrangią „Bluetooth“BLE vairasvirtę prie ESP32. Kodas buvo parašytas naudojant „Arduino IDE Ver 1.8.5“su ESP32 priedu. Naudojama BLE vairasvirtė yra komercinis įrenginys, kurį galite įsigyti internetu už mažiau nei 20,00 USD arba vietinėje „FiveBELoW“parduotuvėje už 5,00 USD.

Šiam projektui naudotas kreiptukas yra „Spektrum VR Control Bluetooth“nuotolinis valdiklis. Jis parduodamas kaip veikiantis su „Android“ir „IOS“planšetiniais kompiuteriais kaip vairasvirtė/pelė, skirta naudoti su VR ausinėmis.

„VR Control Bluetooth“nuotolinis valdiklis turi vieną vairasvirtę su X ir Y ašimis, du paleidimo mygtukus priekyje ir šešis mygtukus ant rankenos. Du mygtukai skirti įjungti/išjungti ir režimo valdymui. Kiti keturi mygtukai gali būti naudojami viskam, ko norite. Šis projektas yra skeletas arba sistema, kuri tvarko visas „Bluetooth“sąsajas ir mygtukų bei vairasvirtės dekodavimą. Viskas, ką jums reikia padaryti, yra pridėti funkcijų skambučius, kad galėtumėte valdyti tai, ką norite atlikti mygtukais ir vairasvirte. Norėdami naudotis šia sistema, jums nieko nereikia žinoti apie „Bluetooth“.

Yra daugybė svetainių, kuriose pateikiamos išsamios „Arduino IDE“ir ESP32 priedo diegimo instrukcijos. Aš nesistengsiu čia pakartoti tos informacijos. „Google“ir vykdykite nurodymus.

Sistema yra „IoT Sharing“paskelbto BLE kliento pavyzdžio pritaikymas. Jį rasite čia. Galite išstudijuoti šį kodą, kad suprastumėte, kaip veikia BLE. „Expressif“turi pilną GATT BLE kliento pavyzdį ir išsamiai paaiškina operaciją (neparašyta „Arduino IDE“). Jį galite gauti čia.

Tai nėra BLE pamoka. Aš išsamiai nepaaiškinsiu, kaip veikia kodas. Kai kurioms vairasvirtės savybėms apibūdinti naudosiu BLE terminiją. Kodo dalis, kurią turite pakeisti savo projektui, bus išsamiai paaiškinta, kad padėtų jums ją pakeisti. Taikymo sritis yra ribota, kad ši instrukcija būtų trumpa ir sutelkta į kreiptuko naudojimą.

1 žingsnis: šiek tiek apie „Bluetooth Low Energy“(BLE)

Tai nėra BLE pamoka. Kai pradėjau šį projektą, aš nežinojau skirtumo tarp BLE ir klasikinio „Bluetooth“. Aš tik norėjau pamatyti, ar galiu nusipirkti nusipirktą vairasvirtę dirbti su ESP32. Šiame tekste aš naudoju BLE terminiją, kad supaprastinčiau BLE veikimo apžvalgą.

BLE naudoja kliento/serverio architektūrą. Vienas įrenginys yra serveris, teikiantis paslaugas. Kitas įrenginys yra klientas, kuris naudoja paslaugas. Kad energijos poreikiai būtų mažesni, BLE perduoda tik nedidelius informacijos paketus, kai jie pasikeičia. Vairasvirtės atveju vairasvirtės įrenginys yra serveris. Kaip serveris jis reklamuojasi ir paprašius perduos teikiamų paslaugų sąrašą. Vairasvirtės įrenginys reklamuoja penkias paslaugas. Vienintelė paslauga, kuri mus domina, yra „BLE HID“(žmogaus sąsajos įrenginys) paslauga. BLE paslauga turi vadinamųjų charakteristikų, susijusių su ja. Charakteristika paprastai yra duomenų šaltinis. Vairasvirtės HID paslauga turi dešimt charakteristikų. Kai kurios charakteristikos yra pasikartojančios ir į jas nekreipiama dėmesio. Mus domina tik BLE ataskaitos charakteristikos, turinčios skaitymo ir pranešimo galimybes. Trys charakteristikos atitinka šiuos reikalavimus ir pateikia duomenis apie vairasvirtės padėtį ir mygtukų būseną. Kai pranešimas įjungtas, serveris siunčia duomenų paketus, kai aptinkama susijusios charakteristikos pakeitimas.

Sistema patikrina, ar rastas serveris turi BLE HID paslaugą, ir tada įgalins pranešimus trijose ataskaitų charakteristikose, kuriose pateikiama kreiptuko ir mygtuko būsenos informacija. Tada, kai paspaudžiamas arba atleidžiamas mygtukas arba perkeliama vairasvirtė, ESP32 gauna duomenų paketą, kuriame nurodoma, kokia yra nauja vairasvirtės padėtis ir (arba) kai kurių mygtukų būsena.

2 veiksmas: nuskaitymo ir ryšio indikatoriai

Sistema apibrėžia du šviesos diodus, ŽALTAI ir BLUELED, ir priskiria juos dviem ESP32 GPIO kaiščiams. ŽALIAI šviečia, kai ESP32 ieško BLE vairasvirtės. Radus vairasvirtę ŽALIAI išjungiami, o užsidega BLUELED, rodanti, kad ryšys užmegztas ir esate pasiruošęs eiti. Jei ryšys nutrūksta, BLUELED išjungiamas, ESP32 iš naujo nustatomas, ŽALIAI šviečia ir vėl pradedamas nuskaitymas. Jei kreiptukas nerastas per trisdešimt sekundžių, nuskaitymas sustabdomas ir ŽALIAI išsijungia. Po penkių sekundžių nuskaitymas vėl pradedamas ir įjungiamas ŽALIAS.

Galutinis rezultatas yra tas, kad ESP32 ir toliau ieškos vairasvirtės, kol ją suras. Kai ryšys bus užmegztas, jis bus prarastas, ESP32 atstatys save ir vėl pradės nuskaityti. ESP32 iš naujo nustatomas, nes nėra jokių ESP32 SDK funkcijų, leidžiančių iš naujo nustatyti „Bluetooth“kaminą, kad būtų galima iš naujo nuskaityti.

3 veiksmas: vairasvirtės ir mygtukų įvykių iššifravimas

Vienas ESP32 atgalinio ryšio įvykis iš serverio gauna tris skirtingus duomenų paketus, skirtus trims charakteristikoms, kurios buvo nustatytos pranešimams pateikti. Vienas paketas yra keturių baitų ilgio. Trijuose baituose yra X ašies padėtis, Y ašies padėtis ir paleidimo mygtukai, kurie yra susieti baite. Kiti du paketai yra po du baitus ir turi vieną baitą, kuriame yra bitų atvaizdavimo mygtuko būsena. Gauti paketai dekoduojami ir nukopijuojami į baitų masyvą atmintyje. Vairasvirtės ašies duomenys patenka į X ir Y duomenų baitus, o kiekvienas iš trijų bitų susietų mygtukų baitų nukreipiamas į atitinkamą tų mygtukų baitą.

Sukurta „FreeRTOS“užduotis, skirta tvarkyti pranešimuose gautus duomenis. Viena užduotis skirta vairasvirtei ir gaiduko mygtukams, viena užduotis A & B mygtukams ir viena užduotis C & D mygtukams. Kiekvienoje iš šių užduočių yra aiškiai pažymėtos sritys, kuriose turėtumėte pridėti kodą, kad įvykis atliktų tai, ko norite. Užduoties tekste ieškokite komentaro „// ===== add your code here =====“ir pridėkite kodą po jo. Kiekviena užduotis turi komentarą, nurodantį, kam ji naudojama, ir naudoja Serial.println (), kad išspausdintų pranešimą apie įvykusį įvykį.

Štai pavyzdys iš A/B mygtuko užduoties;

void taskButtonAB (void *parametras) {mygtukai uint8_t;

// ===== jei užduotį reikia inicijuoti vieną kartą, padėkite ją čia =====

nors (tiesa) {// atsisakyti procesoriaus, laukti naujų duomenų vTaskSuspend (NULL); // ką tik pabudome, nauji duomenys pasiekiami mygtukai = VrBoxData [VB_BTNAB]; Serial.printf ("A/B mygtukai: %02X / n", mygtukai); if (mygtukai ir VB_BUTTON_A) {// mygtukas A paspaudžiamas arba laikomas nuspaustas Serial.println („A mygtukas“); // ===== pridėkite savo kodą čia =====}

jei (mygtukai ir VB_BUTTON_B)

{// mygtukas B paspaustas arba laikomas nuspaustas Serial.println („Mygtukas B“);

// ===== pridėkite savo kodą čia =====

}} // for} // taskButtonAB

4 žingsnis: VR dėžutės valdymas: vairasvirtė

Jei vairasvirtė paliekama centrinėje padėtyje, vairasvirtės pranešimai nesiunčiami. Kai vairasvirtė nukeliama nuo centro, maždaug kas 15 ms siunčiamas pranešimas su kreiptuko duomenimis ir gaiduko mygtuko duomenimis. Kai kreiptukas perkeliamas atgal į centrą, pranešimas apie jo perkėlimą į centrą nesiunčiamas. Kitaip tariant, tai rodo, kad vairasvirtė nukrypo nuo centro, bet ne tai, kad ji persikėlė į centrą. Galutinis rezultatas yra tas, kad jūs gaunate pranešimus, rodančius, kad vairasvirtė juda link centro, bet ne tai, kad ji pasiekė centrą. Labai erzina. Du valdymo mygtukai yra įtraukti į kreiptuko duomenis. Paspaudus vieną iš gaiduko mygtukų, grąžinus vairasvirtę į centrą, vairasvirtės padėtis bus atnaujinta iki nulio. Sistemoje yra įmontuotas laikmačio laikmatis, kuris automatiškai imituoja kreiptuko pranešimo pranešimą netrukus po to, kai visi kreiptuko/gaiduko mygtuko pranešimų pranešimai nebegauna. Laikmatis nustato kreiptuką į nulį. Vairasvirtės diapazonas yra apie +/- 25 kiekvienoje ašyje.

5 veiksmas: VR dėžės veikimas: paleidimo mygtukai

Paspaudimo mygtukai vieną kartą išsiųs pranešimą, kai bus paspausti, ir dar kartą, kai bus atleistas. Paspaustas pranešimo pranešimas parodys paspaustą mygtuką. Pranešimas apie išleidimą rodo, kad abu mygtukai yra atleisti.

Laikydami nuspaudę apatinį gaiduko mygtuką, serveris negalės aptikti, kad buvo nuspaustas viršutinis gaiduko mygtukas. Laikant viršutinį gaiduko mygtuką ir paspaudus apatinį gaiduko mygtuką, serveris atsiunčia pranešimą, kad paspaudžiamas apatinis gaiduko mygtukas (viršutinis gaiduko mygtukas bus lygus nuliui!). Atleidus apatinį gaiduko mygtuką, serveris išsiųs pranešimą, kad paspaudžiamas viršutinis gaiduko mygtukas ir atleidžiamas apatinis gaidukas.

Kitaip tariant, apatinis gaiduko mygtukas yra dominuojantis virš viršutinio gaiduko mygtuko ir nepaisys jo, kai abu bus paspausti. Turite nuspręsti, kaip elgtis paspaudus abu mygtukus.

6 veiksmas: VR dėžės veikimas: A/B mygtukai

A ir B mygtukai veikia kaip vairasvirtė ir nuolat siunčia pranešimus, kai jie laikomi paspausti. Pranešimai sustoja, kai mygtukas atleidžiamas. A ir B mygtukai veikia panašiai kaip trigerio mygtukai, nes A mygtukas dominuoja B mygtuke, kaip ir apatinis gaiduko mygtukas dominuoja viršutiniame gaiduko mygtuke.

7 žingsnis: VR dėžės veikimas: C/D mygtukai

Mygtukai C ir D vieną kartą siunčia pranešimą, kai paspaudžiamas, ir dar kartą, kai atleidžiamas. Jei laikysite nuspaudę, tolimesni pranešimai nebus siunčiami, kol jie nebus išleisti. Jei laikysite nuspaudę vieną iš C arba D mygtukų, serveris negalės aptikti kito mygtuko veiklos.

8 žingsnis: Išvada

Mano nuomone, mygtukų veikimas yra šiek tiek keblus. Sistema numato vietas, kuriose galite įdėti savo kodą, kad veiktų paspaudus mygtuką. Jei taip pat reikia aptikti mygtukų atleidimus, jums belieka išsiaiškinti, kaip tai padaryti.

Visiškai jūs turite nuspręsti, ką norite atlikti kiekvienu mygtuku ir ką daryti judinant vairasvirtę. Kaip spręsti trigerio, A & B ir C & D mygtukų skirtumus, priklauso nuo jūsų.

Ieškokite kodo; taskJoyStick (), taskButtonAB (), taskButtonCD () funkcijos ir pridėkite savo kodą po komentaro „// ===== add your code here =====“.

Norėdami valdyti vairasvirtę, jums reikės iki keturių funkcijų (pirmyn, atgal, dešinėn ir kairėn) ir iki šešių funkcijų įvairiems mygtukams valdyti. Įgyvendinkite juos visus arba tik tai, ko jums reikia. Tavo pasirinkimas.

Jei naudojate šią sistemą. Norėčiau šaukti apie tai, kam jūs jį naudojote ir ar jums buvo lengva juo naudotis.

Jei turite klausimų, kaip tai veikia, arba jums reikia pagalbos, kad jis veiktų, susisiekite su manimi.

Kodą galite rasti „GitHub“čia.

Mėgautis.

Rekomenduojamas: