Tartalomjegyzék:

ESP32 Bluetooth BLE távirányító: 8 lépés
ESP32 Bluetooth BLE távirányító: 8 lépés

Videó: ESP32 Bluetooth BLE távirányító: 8 lépés

Videó: ESP32 Bluetooth BLE távirányító: 8 lépés
Videó: Esp32 управляем реле по средствам bluetooth. Arduino ide 2024, November
Anonim
ESP32 Bluetooth BLE távirányító
ESP32 Bluetooth BLE távirányító
ESP32 Bluetooth BLE távirányító
ESP32 Bluetooth BLE távirányító
ESP32 Bluetooth BLE távirányító
ESP32 Bluetooth BLE távirányító
ESP32 Bluetooth BLE távirányító
ESP32 Bluetooth BLE távirányító

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: