Съдържание:
- Стъпка 1: Малко за Bluetooth Low Energy (BLE)
- Стъпка 2: Индикатори за сканиране и свързване
- Стъпка 3: Дешифриране на събития с джойстик и бутон
- Стъпка 4: Работа с VR Box: Джойстикът
- Стъпка 5: Работа с VR Box: Бутони за задействане
- Стъпка 6: Работа с VR Box: A/B бутони
- Стъпка 7: Работа с VR Box: C/D бутони
- Стъпка 8: Заключение
Видео: ESP32 Bluetooth BLE Дистанционно управление: 8 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
Този проект е пример за това как да свържете евтин Bluetooth BLE джойстик към ESP32. Кодът е написан с помощта на Arduino IDE Ver 1.8.5 с добавката ESP32. Използваният джойстик BLE е търговско устройство, което можете да закупите в Интернет за по -малко от $ 20.00 или от местния магазин FiveBELoW за $ 5.00.
Джойстикът, който използвах за този проект, е Spektrum VR Control Bluetooth Remote Controller. Той се продава като работещ с таблети с Android и IOS като джойстик/мишка за използване с VR слушалки.
Bluetooth дистанционното управление VR Control има един джойстик с ос X и Y, два бутона за задействане отпред и шест бутона на дръжката. Два от бутоните са за включване/изключване на захранването и контрол на режима. Останалите четири бутона могат да се използват за каквото искате. Този проект е скелет или рамка, която обработва цялото Bluetooth взаимодействие и декодиране на бутоните и джойстика. Всичко, което трябва да направите, е да добавите извиквания на функции, за да се справите с това, което искате да правят бутоните и джойстика. Не е нужно да знаете нищо за Bluetooth, за да използвате тази рамка.
Има множество уеб сайтове с подробни инструкции за инсталиране на Arduino IDE и добавката ESP32. Няма да се опитвам да повтарям тази информация тук. Потърсете го в Google и следвайте указанията.
Рамката е адаптация на пример за клиент на BLE, публикуван от IoT Sharing. Можете да го намерите тук. Можете да изучите този код, за да добиете представа как работи BLE. Expressif има пълен пример за клиент на GATT BLE и подробно обяснява операцията (не е написана за Arduino IDE). Можете да го получите тук.
Това не е BLE урок. Няма да обяснявам подробно как работи кодът. Ще използвам терминологията BLE, за да опиша някои от характеристиките на джойстика. Частта от кода, която трябва да промените за вашия проект, ще бъде обяснена подробно, за да ви помогне да го промените. Обхватът е ограничен, за да остане този Instructable кратък и фокусиран върху използването на джойстика.
Стъпка 1: Малко за Bluetooth Low Energy (BLE)
Това не е предназначено да бъде урок по BLE. Когато стартирах този проект, не знаех разликата между BLE и Classic Bluetooth. Просто исках да видя дали мога да си купя джойстика, който да работи с ESP32. В следващия текст използвам BLE терминология, за да дам опростен преглед на това как работи BLE.
BLE използва архитектура клиент/сървър. Едно устройство е сървър, който предоставя услуги. Другото устройство е клиент, който консумира услуги. За да се намалят изискванията за захранване, BLE предава само малки пакети информация, когато настъпи промяна. В случая с джойстика устройството с джойстик е сървър. Като сървър, той се рекламира и ще изпрати списък на услугите, които предоставя, когато бъде помолен. Устройството с джойстик рекламира пет услуги. Единствената услуга, която ни интересува, е услугата BLE HID (Human Interface Device). Услугата BLE има свързани с нея известни като характеристики. Характеристиката обикновено е източник на данни. HID услугата на джойстика има десет характеристики. Някои от характеристиките са дубликати и се игнорират. Интересуваме се само от характеристиките на доклада BLE, които имат възможности за четене и уведомяване. Три от характеристиките отговарят на тези изисквания и предоставят данни за позицията на джойстика и състоянието на бутоните. Когато известието е активирано, сървърът ще изпраща пакети данни, когато се установи промяна в свързаната характеристика.
Рамката проверява дали сървърът, който намира, има услугата BLE HID и след това ще активира Известия за трите характеристики на отчета, които предоставят информация за състоянието на джойстика и бутона. След това, когато бутонът е натиснат или освободен или джойстика е преместен, ESP32 получава пакет от данни, който му казва какво е новото положение на джойстика и/или състоянието на някои бутони.
Стъпка 2: Индикатори за сканиране и свързване
Рамката дефинира два светодиода, ЗЕЛЕНЕН и СИНЕН и ги присвоява на два от GPIO щифтовете на ESP32. ЗЕЛЕНОТО свети, когато ESP32 търси джойстика BLE. Когато джойстикът бъде намерен, ЗЕЛЕНОТО се изключва и СИНЕТО свети, за да покаже, че връзката е установена и сте готови за работа. Ако връзката се прекъсне, BLUELED се изключва, ESP32 се нулира, GREENLED свети и сканирането започва отново. Ако джойстика не бъде намерен в рамките на тридесет секунди, сканирането спира и ЗЕЛЕНОТО се изключва. След пет секунди сканирането започва отново и ЗЕЛЕНОТО се включва.
Крайният резултат е, че ESP32 ще продължи да сканира джойстика, докато не го намери. След като връзката се осъществи, ако след това се загуби, ESP32 ще се нулира и ще започне да сканира отново. ESP32 се нулира, защото няма функции на ESP32 SDK за нулиране на стека Bluetooth, за да рестартирате сканирането.
Стъпка 3: Дешифриране на събития с джойстик и бутон
Едно събитие за обратно повикване на ESP32 получава три различни пакета данни от сървъра за трите характеристики, които са настроени да предоставят известия. Един пакет е с дължина четири байта. Три от байта съдържат позицията на оста X, позицията на оста Y и задействащите бутони, които са битово картографирани в байта. Другите два пакета са по два байта всеки и имат един байт, който има състоянието на бутона, картографиран по битове. Получените пакети се декодират и копират в байтов масив в паметта. Данните от оста на джойстика влизат в байтовете с данни X и Y и всеки от трите битови картографирани байта на бутона се насочва в подходящия байт за тези бутони.
Създава се задача FreeRTOS за обработка на данните, получени от известията. Една задача за джойстика и бутоните за задействане, една задача за бутоните A & B и една задача за бутоните C & D. Всяка от тези задачи има ясно обозначени области, където трябва да добавите код, за да направите каквото искате със събитието. Потърсете коментара „// ===== добавете кода си тук =====“в тялото на задачата и добавете кода след него. Всяка задача има коментар, указващ за какво се използва и използва Serial.println () за отпечатване на съобщение за настъпилото събитие.
Ето един пример от задачата с бутон A/B;
void taskButtonAB (параметър void *) {бутони uint8_t;
// ===== ако задачата изисква еднократна инициализация, поставете я тук =====
while (true) {// откажете се от процесора, изчакайте нови данни vTaskSuspend (NULL); // току -що се събудихме, налични са нови данни бутони = VrBoxData [VB_BTNAB]; Serial.printf ("A/B бутони: %02X / n", бутони); if (бутони & VB_BUTTON_A) {// бутон A натиснат или се задържа Serial.println ("Бутон A"); // ===== добавете кода си тук =====}
ако (бутони и VB_BUTTON_B)
{// бутон В натиснат или задържан Serial.println ("Бутон В");
// ===== добавете вашия код тук =====
}} // за} // taskButtonAB
Стъпка 4: Работа с VR Box: Джойстикът
Ако джойстикът е оставен в централната позиция, не се изпращат известия от джойстика. След като джойстикът се премести извън центъра, съобщение за известие с данни за джойстика и данни от бутона за задействане се изпраща на всеки 15mS. Когато джойстика се премести обратно в центъра, не се изпраща известие, че е преместен в центъра. С други думи, той ви казва, че джойстикът се е изместил от центъра, но не и че е преместен в центъра. Крайният резултат е, че получавате съобщения, показващи, че джойстика се движи към центъра, но не и че е достигнал центъра. Много досадно. Двата бутона за задействане са включени с данните за джойстика. Натискането на един от бутоните за задействане след връщане на джойстика в центъра ще актуализира позицията на джойстика до нула. Framework има вграден таймер за изчакване, който автоматично симулира съобщение за известие с джойстик малко време, след като всички съобщения за известия с джойстик/бутон за задействане спрат да пристигат. Таймерът настройва джойстика на нула. Джойстикът има диапазон от около +/- 25 на всяка ос.
Стъпка 5: Работа с VR Box: Бутони за задействане
Бутоните за задействане ще изпратят съобщение за известие веднъж при натискане и отново при освобождаване. Съобщението за натиснато известие ще покаже натиснатия бутон. Съобщението за известие за освобождаване показва, че и двата бутона са освободени.
Задържането на долния бутон за задействане ще попречи на сървъра да открие, че горният бутон за задействане е натиснат. Задържането на горния бутон за задействане и натискането на долния бутон за задействане води до това сървърът да изпрати известие, че долният бутон за задействане е натиснат (горният бутон за задействане ще бъде нула!). Освобождаването на долния бутон за задействане ще накара сървъра да изпрати известие, че горният бутон за задействане е натиснат и долният спусък е освободен.
С други думи, долният бутон за задействане е доминиращ над горния бутон за задействане и ще го отмени, когато и двата са натиснати. Трябва да определите как да се справите в случай на натискане на двата бутона.
Стъпка 6: Работа с VR Box: A/B бутони
Бутоните A и B действат като джойстика и непрекъснато изпращат съобщения за известия при натискане и задържане. Съобщенията спират при отпускане на бутона. Бутоните A и B работят подобно на бутоните за задействане, тъй като бутонът A доминира бутона B, точно както долният бутон за задействане доминира горния бутон за задействане.
Стъпка 7: Работа с VR Box: C/D бутони
Бутоните C и D изпращат съобщение за известие веднъж при натискане и отново при освобождаване. Ако се задържи, повече съобщения не се изпращат, докато не бъдат освободени. Задържането на един от бутоните C или D ще попречи на сървъра да открие активност на другия бутон.
Стъпка 8: Заключение
Работата на бутоните според мен е малко нестабилна. Рамката предвижда места, където кодът ви да действа, когато се натисне бутон. Ако също трябва да откриете освобождаване на бутони, остава да разберете как да направите.
Изцяло от вас зависи да определите какво искате да прави всеки бутон и какво преместване на джойстика. Как ще се справите с разликите в спусъка, бутоните A & B и C & D зависи от вас.
Потърсете в кода за; taskJoyStick (), taskButtonAB (), taskButtonCD () функции и добавете кода си след коментара "// ===== добавете кода си тук =====".
Ще ви трябват до четири функции за работа с джойстика (напред, назад, надясно и наляво) и до шест функции за управление на различните бутони. Приложете ги всички или само това, от което имате нужда. Изборът е твой.
Ако използвате тази рамка. Ще се радвам да извикате за какво сте го използвали и ако ви се стори лесен за използване.
Ако имате въпроси за това как работи или се нуждаете от помощ, за да го задействате, свържете се с мен.
Кодът е достъпен в GitHub тук.
Наслади се.
Препоръчано:
IRduino: Дистанционно управление Arduino - имитирайте изгубено дистанционно: 6 стъпки
IRduino: Дистанционно управление Arduino - имитирайте изгубено дистанционно: Ако някога сте загубили дистанционното управление за вашия телевизор или DVD плейър, знаете колко е разочароващо да се налага да ходите, да намирате и използвате бутоните на самото устройство. Понякога тези бутони дори не предлагат същата функционалност като дистанционното. Получаване
Обикновен комплект за дистанционно управление, трансформиран в четириканално дистанционно управление RC играчка: 4 стъпки
Обикновен комплект за дистанционно управление, трансформиран в четириканално дистанционно управление RC Toy: 如何 将 通用 遥控 套件 转换 为 玩具 中 使用 的 四 遥控 器。 遥控 套件 非常 便宜。 采用 62 62 2262 和 2272 芯片 433 模块 构建。方法 非常 简单。 只需 一些 瓦楞纸 板 , 然后 按照 视频 教程 这个 电子 项目 并 为 服务。 玩具 车船 提供 远程 无线 控制
Уеб дистанционно дистанционно управление с Esp8266 (NodeMCU): 4 стъпки
Уеб дистанционно дистанционно управление с Esp8266 (NodeMCU): Проблем На масата в хола има три дистанционни управления. За да гледате любимото си предаване, трябва точно да следвате специална последователност от натискания на бутони върху поне две от тях. И твоята съквартирантка, майка, приятелка никога не си спомня за това … Решение Купуваш
Робот с дистанционно управление с помощта на Arduino и T.V. Дистанционно: 11 стъпки
Робот с дистанционно управление с помощта на Arduino и телевизионно дистанционно: Тази кола с дистанционно управление може да се движи, използвайки практически всякакъв вид дистанционно управление, като телевизор, променлив ток и др. Той използва факта, че дистанционното излъчва IR (инфрачервено). Това свойство се използва чрез използване на IR приемник, който е много евтин сензор
Кабелно дистанционно дистанционно управление на Canon за затвор и фокус: 4 стъпки
Кабелно дистанционно дистанционно управление на Canon за затвор и фокус: Хей! Това е друга версия на кабелното дистанционно управление на Canon. Мисля, че е по -гъвкав от другите дизайни. Тази инструкция е мястото, откъдето получих моето вдъхновение. Това по принцип ви позволява да правите снимки с помощта на това дистанционно, вместо да натискате дупето