Tartalomjegyzék:
- 1. lépés: Egy kicsit a Bluetooth Low Energy (BLE) funkcióról
- 2. lépés: Szkennelés és kapcsolatjelzők
- 3. lépés: A joystick- és gombesemények megfejtése
- 4. lépés: A VR Box működése: a joystick
- 5. lépés: A VR doboz működése: trigger gombok
- 6. lépés: A VR doboz működése: A/B gombok
- 7. lépés: A VR doboz működése: C/D gombok
- 8. lépés: Következtetés
Videó: ESP32 Bluetooth BLE távirányító: 8 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:43
Ez a projekt egy példa arra, hogyan lehet egy olcsó Bluetooth BLE joystick -ot az ESP32 -hez csatlakoztatni. A kódot az Arduino IDE Ver 1.8.5 és az ESP32 kiegészítő segítségével írták. A használt BLE joystick egy kereskedelmi eszköz, amelyet 20,00 USD alatti áron vásárolhat meg az interneten, vagy 5,00 USD -ért a helyi fiveBELoW áruházban.
A joystick, amelyet ehhez a projekthez használtam, egy Spektrum VR Control Bluetooth távirányító. Úgy forgalmazzák, hogy Android és IOS táblagépekkel működik, mint joystick/egér VR fejhallgatókhoz.
A VR Control Bluetooth távirányító egyetlen joystickot tartalmaz X és Y tengelyekkel, két kioldógombot elöl és hat gombot a fogantyún. A gombok közül kettő a be-/kikapcsolásra és az üzemmód -vezérlésre szolgál. A másik négy gomb bármire használható. Ez a projekt egy csontváz vagy keret, amely kezeli a gombok és joystick összes Bluetooth interfészét és dekódolását. Mindössze annyit kell tennie, hogy funkcióhívásokat ad hozzá ahhoz, hogy kezelje a gombok és a joystick funkcióit. A keretrendszer használatához nem kell semmit tudnia a Bluetooth -ról.
Számos webhely található részletes utasításokkal az Arduino IDE és az ESP32 kiegészítő telepítéséhez. Nem próbálom megismételni ezeket az információkat itt. Google -olj és kövesd az utasításokat.
A keretrendszer az IoT Sharing által közzétett BLE klienspélda adaptációja. Itt megtalálod. Ezt a kódot tanulmányozva képet kaphat a BLE működéséről. Az Expressif rendelkezik egy teljes példával a GATT BLE kliens számára, és részletesen elmagyarázza a műveletet (nem az Arduino IDE számára készült). Itt megkaphatja.
Ez nem BLE oktatóanyag. Nem részletezem a kód működését. A BLE terminológiával fogom leírni a joystick néhány jellemzőjét. A kódnak azt a részét, amelyet módosítania kell a projekthez, részletesen elmagyarázzuk, hogy segítsen a módosításában. A hatókör korlátozva van ahhoz, hogy ez az Instructable rövid legyen, és a joystick használatára összpontosítson.
1. lépés: Egy kicsit a Bluetooth Low Energy (BLE) funkcióról
Ez nem a BLE bemutatója. Amikor elkezdtem ezt a projektet, nem tudtam, mi a különbség a BLE és a klasszikus Bluetooth között. Csak meg akartam nézni, hogy a megvásárolt joystickot működtethetem -e az ESP32 -vel. A következő szövegben a BLE terminológiáját használom, hogy egyszerűsített áttekintést nyújtsak a BLE működéséről.
A BLE kliens/szerver architektúrát használ. Az egyik eszköz egy kiszolgáló, amely szolgáltatásokat nyújt. A másik eszköz egy szolgáltatásokat fogyasztó ügyfél. Az energiaigények csökkentése érdekében a BLE csak kis információcsomagokat továbbít, ha változás történik. A joystick esetében a joystick eszköz szerver. Szerverként reklámozza magát, és kérésre továbbítja az általa nyújtott szolgáltatások listáját. A joystick eszköz öt szolgáltatást hirdet. Az egyetlen szolgáltatás, amely érdekel minket, a BLE HID (Human Interface Device) szolgáltatás. A BLE szolgáltatáshoz úgynevezett karakterisztikák kapcsolódnak. A karakterisztika jellemzően adatforrás. A joystick HID szolgáltatásának tíz jellemzője van. Néhány jellemző másolat, és figyelmen kívül hagyják. Csak a BLE jelentés jellemzői érdekelnek bennünket, amelyek rendelkeznek olvasási és értesítési képességekkel. A jellemzők közül három megfelel ezeknek a követelményeknek, és adatokat szolgáltat a joystick helyzetéről és a gombok állapotáról. Ha az értesítés engedélyezve van, a szerver adatcsomagokat küld, ha a kapcsolódó jellemzőben változást észlel.
A keretrendszer ellenőrzi, hogy a talált szerver rendelkezik -e a BLE HID szolgáltatással, majd engedélyezi az Értesítéseket a három jelentés karakterisztikában, amelyek joystick- és gombállapot -információkat szolgáltatnak. Ezután, amikor egy gombot megnyomnak vagy felengednek, vagy a joystickot mozgatják, az ESP32 egy adatcsomagot kap, amely megmondja, hogy mi az új joystick pozíció és/vagy egyes gombok állapota.
2. lépés: Szkennelés és kapcsolatjelzők
A keret két LED -et határoz meg, ZÖLDES és BLUELED, és hozzárendeli őket az ESP32 két GPIO -tűjéhez. A ZÖLD világít, amikor az ESP32 a BLE joystickot keresi. Amikor a botkormányt megtalálja, a ZÖLDES ki van kapcsolva, és a BLUELED világít, jelezve, hogy a kapcsolat létrejött, és készen áll az indulásra. Ha a kapcsolat megszakad, a BLUELED ki van kapcsolva, az ESP32 alaphelyzetbe áll, a ZÖLD világít, és a szkennelés újra kezdődik. Ha a joystickot nem találja meg harminc másodpercen belül, akkor a szkennelés leáll, és a ZÖLD színű kikapcsol. Öt másodperc múlva a szkennelés újra elindul, és a ZÖLD be van kapcsolva.
A végeredmény az, hogy az ESP32 addig keresi a joystickot, amíg meg nem találja. A kapcsolat létrejötte után, ha megszakad, az ESP32 alaphelyzetbe áll, és újra elkezdi a szkennelést. Az ESP32 alaphelyzetbe áll, mert nincsenek olyan ESP32 SDK funkciók, amelyek alaphelyzetbe állítanák a Bluetooth -verem szkennelését.
3. lépés: A joystick- és gombesemények megfejtése
Az ESP32 egy visszahívási eseménye három különböző adatcsomagot kap a szervertől az értesítések szolgáltatására beállított három jellemzőhöz. Egy csomag négy bájt hosszú. Három bájt tartalmazza az X tengely pozícióját, az Y tengely pozícióját és a trigger gombokat, amelyek bitben vannak leképezve a bájtban. A másik két csomag két bájt, és egyetlen bájt, amely rendelkezik a bitképes gomb állapotával. A fogadott csomagokat dekódolják, és a memóriában egy byte tömbbe másolják. A joystick tengely adatai az X és Y adatbájtokba kerülnek, és a három bites leképezett gombbájtok mindegyike a gombok megfelelő bájtjába kerül.
FreeRTOS feladat jön létre az értesítések által kapott adatok kezelésére. Egy feladat a joystick és a trigger gombok, egy feladat az A & B gombok és egy feladat a C & D gombok számára. E feladatok mindegyike egyértelműen megjelölte azokat a területeket, ahol hozzá kell adnia a kódot, hogy azt tegye, amit szeretne az eseménnyel. Keresse meg a "// ===== add your code here =====" megjegyzést a feladat törzsében, és adja hozzá a kódot utána. Minden feladathoz van egy megjegyzés, amely jelzi, hogy mire használják, és a Serial.println () használatával üzenetet nyomtat a bekövetkezett eseményről.
Íme egy példa az A/B gombfeladatból;
void taskButtonAB (void *paraméter) {uint8_t gombok;
// ===== ha a feladat egyszeri inicializálást igényel, tegye ide =====
míg (igaz) {// feladja a CPU -t, várja az új adatokat vTaskSuspend (NULL); // most ébredtünk fel, új adatok állnak rendelkezésre gombok = VrBoxData [VB_BTNAB]; Serial.printf ("A/B gombok: %02X / n", gombok); if (gombok és VB_BUTTON_A) {// gomb A megnyomása vagy lenyomva tartása Serial.println ("A gomb"); // ===== add ide a kódod =====}
ha (gombok és VB_BUTTON_B)
{// a B gomb megnyomása vagy lenyomva tartása Serial.println ("B gomb");
// ===== add ide a kódod =====
}} // for} // taskButtonAB
4. lépés: A VR Box működése: a joystick
Ha a joystick középső helyzetben marad, akkor a joystick értesítéseket nem küld. Miután a joystickot elmozdította a középpontból, körülbelül 15 ms -onként értesítő üzenetet küld a joystick adataival és a trigger gomb adataival. Amikor a joystickot visszahelyezi a központba, a rendszer nem küld értesítést arról, hogy középre került. Más szóval azt mondja, hogy a joystick elmozdult a középpontból, de nem arról, hogy középre. A végeredmény az, hogy olyan üzeneteket kap, amelyek jelzik, hogy a joystick a középpont felé halad, de nem azt, hogy elérte a középpontot. Nagyon bosszantó. A két kioldógombot a joystick adatai tartalmazzák. Ha megnyomja az egyik trigger gombot a joystick középre állítása után, a joystick pozíciója nullára frissül. A keretrendszer beépített időkorlátot tartalmaz, amely rövid időn belül automatikusan szimulálja a joystick értesítési üzenetet, miután az összes joystick/trigger gomb értesítési üzenete megállt. Az időzítő nullára állítja a joystickot. A joystick hatótávolsága körülbelül +/- 25 minden tengelyen.
5. lépés: A VR doboz működése: trigger gombok
A kioldógombok egyszer értesítést küldenek, amikor megnyomják, majd újra, amikor elengedik. A megnyomott értesítési üzenet jelzi a megnyomott gombot. A felszabadításról szóló értesítés azt jelzi, hogy mindkét gomb ki van engedve.
Az alsó kioldógomb lenyomva tartása megakadályozza, hogy a szerver észlelje, hogy a felső trigger gombot megnyomták. A felső trigger gomb lenyomása és az alsó trigger gomb megnyomása azt eredményezi, hogy a szerver értesítést küld az alsó trigger gomb megnyomásáról (a felső trigger gomb nulla lesz!). Az alsó trigger gomb elengedése miatt a szerver értesítést küld, hogy a felső trigger gombot megnyomják, és az alsó ravaszt felengedik.
Más szóval, az alsó kioldógomb domináns a felső triggergomb felett, és felülírja, ha mindkettőt megnyomja. Meg kell határoznia, hogyan kell kezelni mindkét gomb megnyomását.
6. lépés: A VR doboz működése: A/B gombok
Az A és B gombok a joystickhoz hasonlóan működnek, és lenyomva tartva folyamatosan értesítő üzeneteket küldenek. Az üzenetek a gomb elengedésekor megszűnnek. Az A és B gombok a Trigger gombokhoz hasonlóan működnek, mivel az A gomb ugyanúgy uralja a B gombot, mint az alsó trigger gomb a felső trigger gombot.
7. lépés: A VR doboz működése: C/D gombok
A C és D gombok egy értesítési üzenetet küldenek, amikor megnyomják, majd újra, amikor elengedik. Ha lenyomva tartja, addig nem küld további üzeneteket, amíg fel nem oldják. Ha valamelyik C vagy D gombot lenyomva tartja, a szerver nem észleli a másik gomb tevékenységét.
8. lépés: Következtetés
A gombok működése véleményem szerint kissé zavaros. A keretrendszer olyan helyeket biztosít, ahol a kódot a gomb megnyomásakor el lehet helyezni. Ha a gombkioldásokat is észlelnie kell, akkor Önnek kell eldöntenie, hogyan kell ezt tenni.
Teljesen rajtad múlik, hogy mit akar az egyes gombok, és mit kell tenni a joystick mozgatásával. Rajtad múlik, hogyan kezeled a trigger, az A & B és a C & D gombok közötti különbségeket.
Keresse meg a kódot a; taskJoyStick (), taskButtonAB (), taskButtonCD () függvények, és adja hozzá a kódot a "// ===== add your code here =====" megjegyzés után.
Legfeljebb négy funkcióra lesz szüksége a joystick kezeléséhez (előre, hátra, jobbra és balra), és legfeljebb hat funkcióra a különböző gombok kezeléséhez. Végezze el mindegyiket, vagy csak azt, amire szüksége van. A választás a tiéd.
Ha ezt a keretet használja. Szívesen kiabálnék, hogy mire használta, és ha könnyűnek találta a használatát.
Ha kérdései vannak a működésével kapcsolatban, vagy segítségre van szüksége a működéséhez, lépjen kapcsolatba velem.
A kód itt érhető el a GitHubon.
Élvezd.
Ajánlott:
Fa Bluetooth távirányító a Lego Duplo Train vonathoz: 3 lépés (képekkel)
Fából készült Bluetooth távirányító a Lego Duplo vonathoz: A gyerekeim imádták ezt a kis Lego Duplo vonatot, különösen a legfiatalabbomat, aki nehezen kommunikál szavakkal, ezért szerettem volna valamit építeni neki, amely segítene a vonaton játszani, függetlenül a felnőttektől vagy a telefonoktól/táblagépektől. Valami ami
Távirányító Bluetooth fénykapcsoló: 4 lépés (képekkel)
Távvezérlésű Bluetooth -fénykapcsoló: Ez lesz az első projekt a sorozatban: "Optimalizált lustaság: túltervezett megoldások a rendkívül triviális problémákra" "Valaha feküdt az ágyban késő este, olvasva vagy Netflixet nézett laptopján? A legrosszabb persze az
A Bluetooth (BLE) használata ESP32 -vel: 3 lépés
A Bluetooth (BLE) használata ESP32 -vel: ##### MEGJEGYZÉS ##### Az ebben az utasításban bemutatott módszer régi és elavult. Nézze meg ezt a videót a legújabb módszerért. ############### Bár az ESP32 kiterjedt funkciólistával büszkélkedhet (Wikipédia), a legnagyobb vonzerő a beépített kék
Az elveszett TV távirányító megtalálása Arduino és Bluetooth segítségével: 5 lépés
Az elveszett TV távirányítójának megkeresése Arduino és Bluetooth segítségével: Az elveszett televízió távvezérlőjének megtalálása nagyon egyszerű áramkör, és a kód olyan egyszerű, csak az Arduino Nano Bluetooth -modullal és a kis zümmögő akkumulátor -töltővel 3,7 V -ról 5 V -ra, és létrehoztam egy alkalmazást az MIT App Inventor alkalmazásban * csatlakozhat
"Retro Future" Bluetooth távirányító: 9 lépés (képekkel)
"Retro Future" Bluetooth távirányító: Mindig is szerettem a " holnap világa " század közepe sci-fi és koncepciós termékeiben mutattunk be. Oké, ez nem igaz. Fiatal koromban azt gondoltam, hogy a Tricoders a Star Trek -en csúnya és ügyetlen, de