Sadržaj:
- Korak 1: Malo o Bluetooth -u sa niskom potrošnjom energije (BLE)
- Korak 2: Pokazatelji skeniranja i povezivanja
- Korak 3: Dešifriranje događaja džojstika i dugmadi
- Korak 4: Rad sa VR kutijom: joystick
- Korak 5: Rad sa VR kutijom: Dugmad okidača
- Korak 6: Rad VR kutije: A/B dugmad
- Korak 7: Rad sa VR kutijom: C/D dugmad
- Korak 8: Zaključak
Video: ESP32 Bluetooth BLE daljinski upravljač: 8 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
Ovaj projekt je primjer kako spojiti jeftini Bluetooth BLE joystick na ESP32. Kôd je napisan pomoću Arduino IDE Ver 1.8.5 sa dodatkom ESP32. Korišteni BLE joystick je komercijalni 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 sa Android i IOS tabletima kao joystick/miš za upotrebu sa VR slušalicama.
Bluetooth daljinski upravljač VR Control ima jedan džojstik sa osi X i Y, dva dugmeta za aktiviranje ispred i šest dugmadi na ručki. Dva dugmeta služe za uključivanje/isključivanje i kontrolu načina rada. Ostala četiri dugmeta možete koristiti za šta god želite. Ovaj projekt je kostur ili okvir koji upravlja svim Bluetooth povezivanjem i dekodiranjem dugmadi i upravljačke palice. Sve što trebate učiniti je dodati pozive funkcija za rukovanje onim što želite da tipke i džojstik rade. Ne morate znati ništa o Bluetooth -u 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. Guglajte i slijedite upute.
Okvir je adaptacija primjera BLE klijenta koji je objavila 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 operaciju (nije napisano za Arduino IDE). Možete ga nabaviti ovdje.
Ovo nije BLE vodič. Neću detaljno objašnjavati kako kod funkcionira. Koristiću BLE terminologiju da opišem neke od funkcija džojstika. Dio koda koji morate izmijeniti za svoj projekt bit će detaljno objašnjen kako bi vam pomogao da ga izmijenite. Opseg je ograničen kako bi ovaj Instructable bio kratak i usredsređen na upotrebu džojstika.
Korak 1: Malo o Bluetooth -u sa 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 Bluetooth -a. Samo sam htio vidjeti mogu li nabaviti džojstik koji sam kupio za rad sa ESP32. U sljedećem tekstu koristim BLE terminologiju kako bih dao pojednostavljen pregled načina na koji BLE funkcionira.
BLE koristi klijent/server arhitekturu. Jedan uređaj je server 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 džojstika, uređaj džojstika je server. Kao poslužitelj, sam se oglašava i prenijet će popis usluga koje pruža na upit. Uređaj joystick oglašava pet usluga. Jedina usluga koja nas zanima je usluga BLE HID (uređaj s ljudskim sučeljem). BLE usluga ima povezane karakteristike koje su poznate kao karakteristike. Karakteristika je obično izvor podataka. HID usluga džojstika ima deset karakteristika. Neke od karakteristika su duplikati i zanemaruju se. Zanimaju nas samo karakteristike izvještaja BLE koje imaju mogućnosti čitanja i obavještavanja. Tri karakteristike zadovoljavaju ove zahtjeve i pružaju podatke o položaju džojstika i stanju dugmadi. Kada je obavijest omogućena, poslužitelj će poslati pakete podataka kada se otkrije promjena na pridruženoj značajci.
Okvir provjerava da li server koji pronađe ima uslugu BLE HID i tada će omogućiti obavještenja o tri karakteristike izvještaja koje pružaju informacije o upravljačkoj palici i stanju dugmeta. Zatim, kada se dugme pritisne ili otpusti ili se džojstik pomeri, ESP32 prima paket podataka koji mu govori koji je novi položaj džojstika i/ili stanje nekih dugmadi.
Korak 2: Pokazatelji skeniranja i povezivanja
Okvir definira dvije LED diode, ZELENU i BLUELED i dodjeljuje ih na dva GPIO pina ESP32. ZELENO svijetli kada ESP32 traži BLE joystick. 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 ponovo. 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 početi ponovo skenirati. ESP32 se resetira jer nema funkcija ESP32 SDK za poništavanje Bluetooth steka radi ponovnog pokretanja skeniranja.
Korak 3: Dešifriranje događaja džojstika i dugmadi
Jedan događaj povratnog poziva na ESP32 prima tri različita paketa podataka od servera za tri karakteristike koje su postavljene za pružanje obavijesti. Jedan paket je dugačak četiri bajta. Tri bajta sadrže položaj osi X, položaj osi Y i okidače, 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 bajt niz u memoriji. Podaci osi džojstika idu u bajtove podataka X i Y, a svaki od tri bitna preslikana bajta dugmeta usmjeren je u odgovarajući bajt za te tipke.
Kreira se zadatak FreeRTOS za obradu podataka primljenih putem obavijesti. Jedan zadatak za džojstik i dugmad za aktiviranje, jedan zadatak za dugmad A & B i jedan zadatak za dugmad C & D. Svaki od ovih zadataka ima jasno označena područja u koja trebate dodati kôd kako biste sa događajem učinili ono što želite. Potražite komentar "// ===== ovdje dodajte svoj kôd =====" u tijelo zadatka i dodajte svoj kôd nakon njega. Svaki zadatak ima komentar koji pokazuje za šta se koristi i koristi Serial.println () za ispis poruke o događaju koji se dogodio.
Evo primjera iz zadatka dugmeta A/B;
void taskButtonAB (void *parametar) {uint8_t gumbi;
// ===== Ako zadatak zahtijeva jednokratnu inicijalizaciju, stavite ga ovdje =====
while (true) {// odustati od CPU -a, čekati nove podatke vTaskSuspend (NULL); // tek smo se probudili, dostupni su novi podaci gumbi = VrBoxData [VB_BTNAB]; Serial.printf ("A/B dugmad: %02X / n", dugmad); if (dugmad & VB_BUTTON_A) {// dugme A pritisnuto ili je pritisnuto Serial.println ("Dugme A"); // ===== ovdje dodajte svoj kôd =====}
if (dugmad i VB_BUTTON_B)
{// dugme B pritisnuto ili je pritisnuto Serial.println ("Dugme B");
// ===== ovdje dodajte svoj kôd =====
}} // za} // taskButtonAB
Korak 4: Rad sa VR kutijom: joystick
Ako je džojstik ostavljen u središnjem položaju, neće se slati obavještenja o džojstiku. Kada se džojstik pomakne iz središta, otprilike svakih 15 ms šalje se obavijest s podacima o džojstiku i podacima dugmeta okidača. Kada se joystick pomakne natrag u središte, obavijest da je pomaknut u središte se ne šalje. 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 ukazuju na to da se joystick pomiče prema sredini, ali ne i da je stigao do centra. Vrlo dosadno. Dva dugmeta za okidanje su uključena sa podacima džojstika. Pritiskom na jedno od okidača nakon vraćanja navigatora u središte, položaj upravljačke palice bit će ažuriran na nulu. Framework ima ugrađen mjerač vremena za isključivanje koji automatski simulira poruku obavijesti joystick-a kratko nakon što prestanu stizati sve obavijesti o džojstiku/okidaču. Tajmer postavlja džojstik na nulu. Joystick ima raspon od oko +/- 25 na svakoj osi.
Korak 5: Rad sa VR kutijom: Dugmad okidača
Dugmad za okidanje će poslati poruku obavijesti jednom kada se pritisne i ponovo kada se otpusti. Pritisnuta poruka obavijesti pokazat će dugme koje je pritisnuto. Poruka obavijesti o otpuštanju označava da su oba dugmeta otpuštena.
Držanje donjeg okidača spriječit će poslužitelj da otkrije da je pritisnuto gornje dugme okidača. Držanjem gornje tipke okidača i pritiskom na donju tipku okidača server šalje poruku obavijesti da je pritisnuta donja tipka okidača (gornja tipka okidača bit će nula!). Otpuštanje donjeg okidača dovest će do toga da poslužitelj pošalje obavijest da je gornji okidač pritisnut, a donji okidač otpušten.
Drugim riječima, donje dugme okidača je dominantno nad gornjim okidačem i nadjačat će ga kada se pritisnu oba. Morate odrediti kako ćete postupiti u slučaju pritiskanja oba gumba.
Korak 6: Rad VR kutije: A/B dugmad
Tasteri A i B deluju poput džojstika i neprestano šalju poruke obaveštenja kada se pritisnu i zadrže. Poruke prestaju kad se dugme otpusti. Dugmad A i B rade slično dugmadima okidača po tome što tipka A dominira tipkom B, baš kao što donja tipka okidača dominira gornjom tipkom okidača.
Korak 7: Rad sa VR kutijom: C/D dugmad
Dugmad C i D šalju poruku obavijesti jednom kada se pritisne i ponovo kada se puste. Ako držite pritisnutu, daljnje se poruke ne šalju dok se ne oslobode. Držanjem bilo kojeg od gumba C ili D spriječit ćete poslužitelj da otkrije aktivnost na drugom gumbu.
Korak 8: Zaključak
Rukovanje tipkama je po mom mišljenju pomalo nesigurno. Okvir predviđa mesta na koja će vaš kôd delovati kada se pritisne dugme. Ako i vi trebate otkriti otpuštanja gumba, preostaje vam da shvatite kako to učiniti.
Na vama je da odlučite šta želite da svako dugme radi i šta bi pomeranje džojstika trebalo da uradi. 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 "// ===== dodajte svoj kôd ovdje =====".
Trebat će vam do četiri funkcije za rukovanje joystickom (naprijed, natrag, desno i lijevo) i do šest funkcija za rukovanje različitim tipkama. Implementirajte ih sve ili samo ono što vam je potrebno. Izbor je vaš.
Ako koristite ovaj okvir. Volio bih da mi kažete za šta ste ga koristili i da vam je bilo jednostavno za korištenje.
Ako imate pitanja o tome kako to funkcionira ili vam je potrebna pomoć oko rada, kontaktirajte me.
Kod je dostupan na GitHub -u ovde.
Uživajte.
Preporučuje se:
Bluetooth daljinski upravljač za paljenje vatrometa: 6 koraka (sa slikama)
Daljinski Bluetooth upaljač za vatromet: Ne bi li bilo lijepo upaliti više vatrometa u isto vrijeme? Ili čak imati sigurnu udaljenost do opasnijih eksploziva. U ovom projektu ću vam pokazati kako izgraditi sklop koji to može učiniti uz pomoć Bluetooth funkcije
TV daljinski upravljač postaje RF daljinski -- NRF24L01+ Vodič: 5 koraka (sa slikama)
TV daljinski upravljač postaje RF daljinski || Vodič za NRF24L01+: U ovom projektu ću vam pokazati kako sam koristio popularni nRF24L01+ RF IC za bežično podešavanje svjetline LED trake putem tri beskorisna dugmeta na daljinskom upravljaču televizora. Hajde da počnemo
Drveni Bluetooth daljinski upravljač za Lego Duplo vlak: 3 koraka (sa slikama)
Drveni Bluetooth daljinski upravljač za Lego Duplo vlak: Moja djeca su voljela ovaj mali Lego Duplo vlak, posebno moj najmlađi koji se bori da komunicira riječima pa sam joj želio izgraditi nešto što bi joj pomoglo da se igra s vlakom neovisno o odraslima ili telefonima/tabletima. Nešto što
IRduino: Arduino daljinski upravljač - oponašajte izgubljeni daljinski upravljač: 6 koraka
IRduino: Arduino daljinski upravljač - oponašajte izgubljeni daljinski upravljač: Ako ste ikada izgubili daljinski upravljač za televizor ili DVD uređaj, znate koliko je frustrirajuće morati hodati do, pronaći i koristiti tipke na samom uređaju. Ponekad ti gumbi čak ne nude istu funkcionalnost kao daljinski. Primiti
Daljinski video daljinski upravljač za računare Video player: 6 koraka
Video daljinski upravljač za malu djecu za PC Video player: Izrađujem daljinski upravljač koji se povezuje s računarom putem USB -a. Veliki daljinski upravljač omogućuje mom djetetu odabir i reprodukciju videozapisa na starom računaru. Ovo je relativno jednostavan projekt. Osnovna komponenta je ili USB tastatura ili bežična USB tastatura. Zatim