Sadržaj:

ESP32 Bluetooth BLE daljinski upravljač: 8 koraka
ESP32 Bluetooth BLE daljinski upravljač: 8 koraka

Video: ESP32 Bluetooth BLE daljinski upravljač: 8 koraka

Video: ESP32 Bluetooth BLE daljinski upravljač: 8 koraka
Video: A remote to control your Phone, Laptop & Home Appliances ⚡️ #esp32 #iot 2024, Studeni
Anonim
ESP32 Bluetooth BLE daljinski upravljač
ESP32 Bluetooth BLE daljinski upravljač
ESP32 Bluetooth BLE daljinski upravljač
ESP32 Bluetooth BLE daljinski upravljač
ESP32 Bluetooth BLE daljinski upravljač
ESP32 Bluetooth BLE daljinski upravljač
ESP32 Bluetooth BLE daljinski upravljač
ESP32 Bluetooth BLE daljinski upravljač

Ovaj projekt je primjer kako spojiti jeftinu Bluetooth BLE joystick na ESP32. Kôd je napisan pomoću Arduino IDE Ver 1.8.5 s dodatkom ESP32. Korišteni joystick BLE komercijalni je uređaj koji možete kupiti na Internetu za manje od 20,00 USD ili u lokalnoj trgovini fiveBELoW za 5,00 USD.

Joystick koji sam koristio za ovaj projekt je Bluetooth daljinski upravljač Spektrum VR Control. Prodaje se kao rad s Android i IOS tabletima kao joystick/miš za upotrebu sa VR slušalicama.

Bluetooth daljinski upravljač VR Control ima jedan joystick s osi X i Y, dvije tipke okidača sprijeda i šest gumba na ručki. Dvije tipke služe za uključivanje/isključivanje i kontrolu načina rada. Ostala četiri gumba možete koristiti za što god želite. Ovaj projekt je kostur ili okvir koji upravlja svim Bluetooth sučeljima i dekodiranjem gumba i upravljačke palice. Sve što trebate učiniti je dodati pozive funkcija za upravljanje onim što želite da gumbi i upravljačka tipka rade. Ne morate znati ništa o Bluetoothu da biste koristili ovaj okvir.

Postoje brojne web stranice s detaljnim uputama za instaliranje Arduino IDE -a i dodatka ESP32. Neću ovdje pokušavati ponoviti te podatke. Google ga i slijedite upute.

Okvir je adaptacija primjera klijenta BLE koji je objavio IoT Sharing. Možete ga pronaći ovdje. Ovaj kôd možete proučiti kako biste stekli uvid u to kako BLE radi. Expressif ima potpuni primjer za GATT BLE klijenta i detaljno objašnjava radnju (nije napisano za Arduino IDE). Možete ga nabaviti ovdje.

Ovo nije BLE vodič. Neću detaljno objašnjavati kako kod funkcionira. Koristit ću BLE terminologiju za opis nekih značajki upravljačke palice. Dio koda koji morate izmijeniti za svoj projekt bit će detaljno objašnjen kako bi vam pomogao u izmjeni. Opseg je ograničen kako bi ovaj Instructable bio kratak i usredotočen na korištenje upravljačke palice.

Korak 1: Malo o Bluetooth -u s niskom potrošnjom energije (BLE)

Ovo nije namjera vodiča o BLE -u. Kad sam započeo ovaj projekt, nisam znao razliku između BLE i Classic Bluetootha. Samo sam htio vidjeti mogu li nabaviti upravljačku palicu za rad s ESP32. U sljedećem tekstu koristim BLE terminologiju kako bih dao pojednostavljen pregled načina na koji BLE radi.

BLE koristi arhitekturu klijent/poslužitelj. Jedan uređaj je poslužitelj koji pruža usluge. Drugi uređaj je klijent koji koristi usluge. Kako bi se smanjili zahtjevi za napajanjem, BLE prenosi samo male pakete informacija kada dođe do promjene. U slučaju joysticka, uređaj joystick je poslužitelj. Kao poslužitelj, sam se oglašava i prenosit će popis usluga koje pruža na upit. Upravljački uređaj oglašava pet usluga. Jedina usluga koja nas zanima je usluga BLE HID (uređaj s ljudskim sučeljem). BLE usluga ima ono što je poznato kao karakteristike povezane s njom. Karakteristika je obično izvor podataka. HID usluga upravljačke palice ima deset karakteristika. Neke od karakteristika su duplikati i zanemaruju se. Zanimaju nas samo karakteristike izvješća BLE koje imaju mogućnosti čitanja i obavještavanja. Tri karakteristike zadovoljavaju ove zahtjeve i pružaju podatke o položaju upravljačke palice i stanju gumba. Kad je obavijest omogućena, poslužitelj će poslati podatkovne pakete kada se otkrije promjena na pridruženoj značajci.

Okvir provjerava ima li poslužitelj koji nalazi uslugu BLE HID, a zatim će omogućiti obavijesti o tri karakteristike izvješća koje pružaju informacije o upravljačkoj palici i stanju gumba. Zatim, kada se pritisne ili otpusti gumb ili se pomakne joystick, ESP32 prima paket podataka koji mu govori koji je novi položaj upravljačke palice i/ili stanje nekih gumba.

Korak 2: Pokazatelji skeniranja i povezivanja

Okvir definira dvije LED diode, ZELENU i BLUELED i dodjeljuje ih na dva GPIO pina ESP32. ZELENO svijetli kad ESP32 traži joystick BLE. Kad se pronađe joystick, ZELENO se isključuje, a BLUELED svijetli kako bi označilo da je veza uspostavljena i da ste spremni za pokretanje. Ako se veza prekine, BLUELED se isključuje, ESP32 se poništava, ZELENO svijetli i skeniranje počinje ponovno. Ako joystick nije pronađen u roku od trideset sekundi, skeniranje se zaustavlja i ZELENO se isključuje. Nakon pet sekundi skeniranje počinje ponovo i ZELENO se uključuje.

Krajnji rezultat je da će ESP32 nastaviti tražiti joystick sve dok ga ne pronađe. Nakon što se veza uspostavi, ako se tada izgubi, ESP32 će se resetirati i započeti ponovno skeniranje. ESP32 se poništava jer nema funkcija ESP32 SDK za poništavanje Bluetooth snopa za ponovno pokretanje skeniranja.

Korak 3: Dešifriranje događaja s joystickom i gumbima

Jedan događaj povratnog poziva na ESP32 prima tri različita paketa podataka od poslužitelja za tri karakteristike koje su postavljene za pružanje obavijesti. Jedan paket ima četiri bajta. Tri bajta sadrže položaj osi X, položaj osi Y i tipke okidača, koji su bitni mapirani u bajtu. Druga dva paketa imaju po dva bajta i imaju jedan bajt koji ima stanje preslikane bitove. Primljeni paketi se dekodiraju i kopiraju u bajtni niz u memoriji. Podaci osi upravljačke palice idu u bajtove podataka X i Y, a svaki od tri bitna preslikana bajta gumba usmjeren je u odgovarajući bajt za te gumbe.

Kreira se zadatak FreeRTOS za obradu podataka primljenih obavijestima. Jedan zadatak za upravljačku tipku i tipke okidača, jedan zadatak za tipke A & B i jedan zadatak za tipke C & D. Svaki od ovih zadataka ima jasno označena područja u koja trebate dodati kôd da biste učinili što želite s događajem. Potražite komentar "// ===== ovdje dodajte svoj kôd =====" u tijelo zadatka i dodajte svoj kôd nakon njega. Svaki zadatak ima komentar koji označava za što se koristi i koristi Serial.println () za ispis poruke o događaju koji se dogodio.

Evo primjera iz zadatka gumba A/B;

void taskButtonAB (parametar void *) {uint8_t gumbi;

// ===== ako zadatak zahtijeva jednokratnu inicijalizaciju, stavite ga ovdje =====

while (true) {// odustati od CPU -a, pričekati nove podatke vTaskSuspend (NULL); // tek smo se probudili, dostupni su novi podaci gumbi = VrBoxData [VB_BTNAB]; Serial.printf ("A/B gumbi: %02X / n", gumbi); if (gumbi & VB_BUTTON_A) {// gumb A pritisnut ili pritisnut Serial.println ("Gumb A"); // ===== ovdje dodajte svoj kôd =====}

if (gumbi i VB_BUTTON_B)

{// gumb B pritisnut ili je pritisnut Serial.println ("Gumb B");

// ===== ovdje dodajte svoj kôd =====

}} // za} // taskButtonAB

Korak 4: Rad VR Box -a: joystick

Ako je joystick ostavljen u središnjem položaju, neće se slati obavijesti. Nakon što se joystick pomakne iz središta, otprilike svakih 15mS šalje se obavijest s podacima s joystick -a i podacima o gumbu okidača. Kad se joystick pomakne natrag u središte, ne šalje se obavijest da je pomaknut u središte. Drugim riječima, govori vam da se joystick pomaknuo iz središta, ali ne i da se pomaknuo u središte. Krajnji rezultat je da primate poruke koje pokazuju da se joystick pomiče prema sredini, ali ne i da je stigao do središta. Veoma naporan. Dvije tipke okidača uključene su u podatke o upravljačkoj palici. Pritiskom na jednu od tipki okidača nakon vraćanja upravljačke palice u središte, položaj upravljačke palice ažurirat će se na nulu. Okvir ima ugrađen mjerač vremena čekanja koji automatski simulira poruku obavijesti s joystickom kratko vrijeme nakon što prestanu stizati sve obavijesti s joystickom/gumbom okidača. Tajmer postavlja joystick na nulu. Upravljačka palica ima raspon od oko +/- 25 na svakoj osi.

Korak 5: Rad VR Box -a: tipke okidača

Gumbi za pokretanje će poslati poruku obavijesti jednom kada se pritisne, a zatim ponovo kada se otpusti. Pritisnuta poruka obavijesti pokazat će gumb koji je pritisnut. Poruka obavijesti o otpuštanju označava da su oba gumba otpuštena.

Držanje donje tipke okidača spriječit će poslužitelj da otkrije da je pritisnuta gornja tipka okidača. Držanjem gornje tipke okidača i pritiskom na donju tipku okidača poslužitelj šalje poruku obavijesti da je pritisnuta donja tipka okidača (gornja tipka okidača bit će nula!). Otpuštanjem donje tipke okidača poslužitelj će poslati obavijest da je gornja tipka okidača pritisnuta, a donji okidač otpušten.

Drugim riječima, donja tipka okidača dominantna je nad gornjom tipkom okidača i nadjačat će je kada se pritisnu oba. Morate odlučiti kako postupiti u slučaju pritiskanja oba gumba.

Korak 6: Rad VR kutije: A/B tipke

Gumbi A i B djeluju poput upravljačke palice i neprestano šalju poruke obavijesti kada se pritisnu i drže. Poruke prestaju kad se gumb otpusti. Gumbi A i B rade slično gumbima okidača po tome što tipka A dominira gumbom B, baš kao što donja tipka okidača dominira gornjom tipkom okidača.

Korak 7: Rad VR kutije: C/D tipke

Gumbi C i D šalju poruku obavijesti jednom kad se pritisne i ponovno kada se puste. Ako držite pritisnutu, daljnje se poruke ne šalju dok se ne puste. Držanjem bilo kojeg od gumba C ili D spriječit ćete poslužitelj da otkrije aktivnost na drugom gumbu.

Korak 8: Zaključak

Rad gumba je po mom mišljenju pomalo nesiguran. Okvir predviđa mjesta na koja će vaš kôd djelovati kada se pritisne gumb. Ako i vi trebate otkriti otpuštanja gumba, preostaje vam da shvatite kako to učiniti.

Na vama je samo da odredite što želite da svaki gumb radi i što bi pomicanje upravljačke palice trebalo učiniti. Na vama je kako ćete se nositi s razlikama u okidaču, A & B i C & D tipkama.

Potražite u kodu; taskJoyStick (), taskButtonAB (), taskButtonCD () funkcije i dodajte svoj kôd nakon komentara "// ===== ovdje dodajte svoj kôd =====".

Za rukovanje upravljačkom palicom trebat će vam do četiri funkcije (naprijed, natrag, desno i lijevo) i do šest funkcija za upravljanje raznim gumbima. Implementirajte ih sve ili samo ono što vam je potrebno. Tvoj izbor.

Ako koristite ovaj okvir. Volio bih izvijestiti o tome za što ste ga koristili i ako vam je bilo jednostavno za korištenje.

Ako imate pitanja o tome kako to funkcionira ili vam je potrebna pomoć za rad, kontaktirajte me.

Kod je dostupan na GitHub -u ovdje.

Uživati.

Preporučeni: