Բովանդակություն:

ESP32 Bluetooth BLE Հեռակառավարիչ ՝ 8 քայլ
ESP32 Bluetooth BLE Հեռակառավարիչ ՝ 8 քայլ

Video: ESP32 Bluetooth BLE Հեռակառավարիչ ՝ 8 քայլ

Video: ESP32 Bluetooth BLE Հեռակառավարիչ ՝ 8 քայլ
Video: Create a BLE app for your mobile phone! Control an ESP32 with BLE 2024, Նոյեմբեր
Anonim
ESP32 Bluetooth BLE հեռակառավարիչ
ESP32 Bluetooth BLE հեռակառավարիչ
ESP32 Bluetooth BLE հեռակառավարիչ
ESP32 Bluetooth BLE հեռակառավարիչ
ESP32 Bluetooth BLE հեռակառավարիչ
ESP32 Bluetooth BLE հեռակառավարիչ
ESP32 Bluetooth BLE հեռակառավարիչ
ESP32 Bluetooth BLE հեռակառավարիչ

Այս նախագիծը օրինակ է, թե ինչպես կարելի է միացնել էժան Bluetooth BLE ճոպանուղին ESP32- ին: Կոդը գրվել է օգտագործելով Arduino IDE Ver 1.8.5 ՝ ESP32 հավելումով: Օգտագործված BLE ջոյսթիկը առևտրային սարք է, որը կարող եք գնել ինտերնետից 20,00 դոլարից պակաս գնով կամ ձեր տեղական հինգBELoW խանութից 5,00 դոլարով:

Այս նախագծի համար օգտագործված ջոյսթիկը Spektrum VR Control Bluetooth հեռակառավարիչ է: Այն վաճառվում է որպես Android և IOS պլանշետների հետ աշխատող ՝ որպես ջոյսթիկ/մկնիկ ՝ VR ականջակալներով օգտագործելու համար:

VR Control Bluetooth հեռակառավարման վահանակն ունի մեկ և մեկական ջոյսթիք X և Y առանցքներով, առջևի երկու կոճակ և բռնակի վեց կոճակ: Կոճակներից երկուսը միացման/անջատման և ռեժիմի կառավարման համար են: Մնացած չորս կոճակները կարող են օգտագործվել այն ամենի համար, ինչ ցանկանում եք: Այս նախագիծը կմախք կամ շրջանակ է, որը կարգավորում է Bluetooth- ի բոլոր կոճակների և ջոստիկի ինտերֆեյսը և վերծանումը: Մնում է միայն գործառույթի կանչեր ավելացնել ՝ կարգավորելու այն, ինչ ցանկանում եք կոճակներն ու ջոյսթիկը: Այս շրջանակն օգտագործելու համար պետք չէ որևէ բան իմանալ Bluetooth- ի մասին:

Կան բազմաթիվ վեբ կայքեր ՝ Arduino IDE- ի և ESP32 հավելումը տեղադրելու մանրամասն հրահանգներով: Ես չեմ պատրաստվում այստեղ կրկնել այդ տեղեկատվությունը: Google- ում և հետևեք հրահանգներին:

Շրջանակը IoT Sharing- ի կողմից հրապարակված BLE հաճախորդի օրինակի ադապտացիան է: Այն կարող եք գտնել այստեղ: Դուք կարող եք ուսումնասիրել այս ծածկագիրը `պատկերացում կազմելու համար, թե ինչպես է աշխատում BLE- ն: Expressif- ն ունի ամբողջական օրինակ GATT BLE հաճախորդի համար և մանրամասն բացատրում է գործողությունը (գրված չէ Arduino IDE- ի համար): Դուք կարող եք այն ստանալ այստեղ:

Սա BLE ձեռնարկ չէ: Ես մանրամասն չեմ բացատրի, թե ինչպես է աշխատում կոդը: Ես կօգտագործեմ BLE տերմինաբանությունը `նկարագրելու ջոյսթիկի որոշ առանձնահատկություններ: Կոդի այն մասը, որը դուք պետք է փոփոխեք ձեր նախագծի համար, մանրամասն կբացատրվի, որը կօգնի ձեզ այն փոփոխել: Այս հրահանգը կարճ պահելու և ջոյսթիք օգտագործելու վրա կենտրոնացած լինելու շրջանակը սահմանափակ է:

Քայլ 1. Մի փոքր Bluetooth ցածր էներգիայի (BLE) մասին

Սա նախատեսված չէ որպես BLE- ի ձեռնարկ: Երբ ես սկսեցի այս նախագիծը, ես չգիտեի BLE- ի և Classic Bluetooth- ի միջև տարբերությունը: Ես պարզապես ուզում էի տեսնել, թե արդյոք կարո՞ղ եմ ձեռք բերել գնված ջիստիկը աշխատել ESP32- ի հետ: Հետևյալ տեքստում ես օգտագործում եմ BLE տերմինաբանությունը ՝ պարզեցված ակնարկ տալու համար, թե ինչպես է աշխատում BLE- ն:

BLE- ն օգտագործում է հաճախորդ/սերվեր ճարտարապետություն: Մեկ սարքը սերվեր է, որը մատուցում է ծառայություններ: Մյուս սարքը ծառայություններ սպառող հաճախորդ է: Էլեկտրաէներգիայի պահանջները ցածր պահելու համար BLE- ն փոխանցում է միայն տեղեկատվության փոքր փաթեթներ, երբ փոփոխություն է տեղի ունենում: Joyոյսթիկի դեպքում ջոյսթիք սարքը սերվեր է: Որպես սերվեր, այն գովազդում է ինքն իրեն և հարցման դեպքում կփոխանցի իր մատուցած ծառայությունների ցանկը: Joyոյսթիք սարքը գովազդում է հինգ ծառայություն: Մեզ հետաքրքրող միակ ծառայությունը BLE HID (Մարդկային միջերեսային սարք) ծառայությունն է: BLE ծառայությունն ունի այն, ինչ հայտնի է որպես դրա հետ կապված բնութագրեր: Բնութագիրը սովորաբար տվյալների աղբյուր է: Theոյսթիկի HID ծառայությունն ունի տասը բնութագիր: Բնութագրերից մի քանիսը կրկնօրինակ են և անտեսված: Մեզ հետաքրքրում են միայն BLE հաշվետվության բնութագրերը, որոնք ունեն Read and Notify հնարավորություններ: Բնութագրերից երեքը համապատասխանում են այս պահանջներին և տալիս են տվյալներ ջոյսթիկի դիրքի և կոճակների վիճակի մասին: Երբ ծանուցումը միացված է, սերվերը կուղարկի տվյալների փաթեթներ, երբ համապատասխան բնութագրում փոփոխություն հայտնաբերվի:

Շրջանակը հաստատում է, որ իր գտած սերվերն ունի BLE HID ծառայություն և այնուհետև հնարավորություն կտա ծանուցումներ երեք հաշվետվությունների բնութագրերի վերաբերյալ, որոնք ապահովում են ջոյստիկի և կոճակի վիճակի տեղեկատվություն: Այնուհետև, երբ կոճակը սեղմվում կամ բաց է թողնվում կամ ջոյսթիկը տեղափոխվում է, ESP32- ը ստանում է տվյալների փաթեթ, որը տեղեկացնում է, թե որն է նոր ջոստիկի դիրքը և/կամ որոշ կոճակների վիճակը:

Քայլ 2. Սկանավորում և միացման ցուցիչներ

Շրջանակը սահմանում է երկու LEDS, GREENLED և BLUELED և դրանք վերագրում է ESP32- ի GPIO երկու կապում: GREENLED- ը լուսավորվում է, երբ ESP32- ը փնտրում է BLE ժոշտիկը: Երբ ջոյսթիկը գտնվի, GREENLED- ն անջատված է, և BLUELED- ը լուսավորված է ՝ նշելու համար, որ կապը հաստատված է, և դուք պատրաստ եք գնալ: Եթե կապը կորած է, BLUELED- ն անջատված է, ESP32- ը վերակայված է, GREENLED- ը լուսավորված է և սկանավորումը նորից սկսվում է: Եթե ջոյսթիկը չի գտնվում երեսուն վայրկյանի ընթացքում, ապա սկանավորումը դադարում է, իսկ GREENLED- ն անջատվում է: Հինգ վայրկյանից հետո սկանավորումը նորից սկսվում է, և GENENLED- ը միացված է:

Վերջնական արդյունքն այն է, որ ESP32- ը կշարունակի փնտրել ջոյսթիկը, մինչև այն չգտնի: Միացումն ավարտվելուց հետո, եթե այն այնուհետև կորչի, ESP32- ը ինքնաբերաբար կվերականգնվի և նորից կսկսի սկանավորել: ESP32- ը վերակայված է, քանի որ չկան ESP32 SDK գործառույթներ, որոնք կարող են վերականգնել Bluetooth- ը ՝ սկանավորումը վերսկսելու համար:

Քայլ 3. Jոյստիկի և կոճակի իրադարձությունների վերծանումը:

ESP32- ի հետադարձ կապի մեկ իրադարձություն սերվերից երեք տարբեր տվյալների փաթեթ է ստանում այն երեք բնութագրերի համար, որոնք ստեղծվել են ificationsանուցումներ տրամադրելու համար: Մեկ փաթեթը չորս բայթ է: Բայթերից երեքը պարունակում են X առանցքի դիրքը, Y առանցքի դիրքը և ձգան կոճակները, որոնք բիթում պատկերված են բիթերով: Մյուս երկու փաթեթները յուրաքանչյուրը երկու բայթ են և ունեն մեկ բայթ, որն ունի բիտ քարտեզագրված կոճակի վիճակ: Ստացված փաթեթները վերծանվում և պատճենվում են հիշողության մեջ բայթ զանգվածի մեջ: Joyոյսթիկի առանցքի տվյալները մտնում են X և Y տվյալների բայթերի մեջ, և երեք բիթ քարտեզագրված կոճակներից յուրաքանչյուրը ուղղվում է այդ կոճակների համար համապատասխան բայթին:

Ստեղծվում է FreeRTOS առաջադրանք ՝ ծանուցումների միջոցով ստացված տվյալների մշակման համար: Մեկ առաջադրանք ջոյսթիկի և ձգան կոճակների համար, մեկ առաջադրանք A & B կոճակների և մեկ առաջադրանք C & D կոճակների համար: Այս առաջադրանքներից յուրաքանչյուրը հստակորեն նշում է այն տարածքները, որտեղ դուք պետք է ավելացնեք ձեր ծածկագիրը `իրադարձության հետ ձեր ուզածն անելու համար: Փնտրեք «// ===== ավելացրեք ձեր կոդը այստեղ =====» մեկնաբանությունը առաջադրանքի հիմնական մասում և դրանից հետո ավելացրեք ձեր ծածկագիրը: Յուրաքանչյուր առաջադրանք ունի մեկնաբանություն, որը ցույց է տալիս, թե ինչի համար է այն օգտագործվում և օգտագործում է Serial.println () ՝ իրադարձության մասին հաղորդագրություն տպելու համար:

Ահա օրինակ A/B կոճակի առաջադրանքից.

void taskButtonAB (void *պարամետր) {uint8_t կոճակներ;

// ===== եթե առաջադրանքը պահանջում է մեկանգամյա նախաստորագրում, տեղադրեք այստեղ =====

մինչ (ճշմարիտ) {// հրաժարվել պրոցեսորից, սպասել նոր տվյալների vTaskSuspend (NULL); // մենք պարզապես արթնացանք, նոր տվյալներ կան կոճակներ = VrBoxData [VB_BTNAB]; Serial.printf ("A/B կոճակներ. %02X / n", կոճակներ); if (կոճակներ & VB_BUTTON_A) {// կոճակը A սեղմված կամ պահված է Serial.println («Կոճակ Ա»); // ===== ավելացնել ձեր կոդը այստեղ =====}

եթե (կոճակներ և VB_BUTTON_B)

{// կոճակը B սեղմված է կամ պահված է Serial.println («Կոճակ B»);

// ===== ավելացնել ձեր կոդը այստեղ =====

}} // for} // taskButtonAB

Քայլ 4: VR տուփի շահագործում. Ջոյստիկ

Եթե ջոյսթիկը մնում է կենտրոնական դիրքում, ապա ջոյստիկի մասին ծանուցումներ չեն ուղարկվում: Երբ ջոյսթիկը տեղափոխվում է կենտրոնից, յուրաքանչյուր 15 մՍ -ի մասին ուղարկվում է ծանուցման հաղորդագրություն `ջոյստիկի տվյալներով և ձգան կոճակի տվյալներով: Երբ ջոյսթիկը նորից տեղափոխվում է կենտրոն, ծանուցում, որ այն տեղափոխվել է կենտրոն, չի ուղարկվում: Այլ կերպ ասած, այն ձեզ ասում է, որ ջոիստիկը տեղափոխվել է կենտրոնից, բայց ոչ այն, որ այն տեղափոխվել է կենտրոն: Վերջնական արդյունքն այն է, որ դուք ստանում եք հաղորդագրություններ, որոնք ցույց են տալիս, որ ջիստիկը շարժվում է դեպի կենտրոն, բայց ոչ այն, որ այն հասել է կենտրոն: Շատ նյարդայնացնող: Երկու ձգան կոճակները ներառված են ջոյսթիկի տվյալներով: Theոյսթիկը կենտրոն վերադարձնելուց հետո ձգան կոճակներից մեկին սեղմելը ջոյսթիկի դիրքը զրոյի կբերի: The Framework- ում ներկառուցված է ժամանակի սպառման ժամանակաչափ, որը ավտոմատ կերպով նմանակում է ջոյսթիկի ծանուցման հաղորդագրությունը կարճ ժամանակ անց այն բանից հետո, երբ բոլոր joystick/trigger կոճակի ծանուցման հաղորդագրությունները դադարում են ժամանել: Timամաչափը ժոյսթիկը զրոյի է դնում: Joyոյսթիկը յուրաքանչյուր առանցքի վրա ունի մոտ +/- 25 միջակայք:

Քայլ 5: VR տուփի շահագործում. Գործարկեք կոճակներ

Գործարկման կոճակները մեկ անգամ սեղմելիս և նորից բաց թողնելիս կուղարկեն ծանուցման հաղորդագրություն: Սեղմված ծանուցման հաղորդագրությունը ցույց կտա սեղմված կոճակը: Թողարկման ծանուցման հաղորդագրությունը ցույց է տալիս, որ երկու կոճակներն էլ բաց են թողնված:

Ստորին ձգան կոճակը պահելը թույլ չի տա սերվերին հայտնաբերել, որ վերին ձգան կոճակը սեղմված է: Վերին ձգան կոճակը պահելը և ներքևի ձգան կոճակը սեղմելը հանգեցնում է նրան, որ սերվերը ծանուցում է ուղարկում ստորին ձգան կոճակը սեղմված լինելու մասին (վերին ձգան կոճակը կլինի զրո): Ստորին ձգան կոճակի թողարկումը կհանգեցնի նրան, որ սերվերը կուղարկի ծանուցում այն մասին, որ վերին ձգան կոճակը սեղմված է, իսկ ներքևի ձգանը ՝ ազատված:

Այլ կերպ ասած, ստորին ձգան կոճակը գերակշռում է վերին ձգան կոճակի վրա և երկուսն էլ սեղմելիս այն կփոխարինի: Դուք պետք է որոշեք, թե ինչպես վարվել երկու կոճակների սեղմման դեպքում:

Քայլ 6: VR տուփի շահագործում. A/B կոճակներ

A և B կոճակները գործում են որպես ջոյսթիք և անընդհատ ծանուցման հաղորդագրություններ են ուղարկում, երբ սեղմվում և պահվում են: Հաղորդագրությունները դադարում են, երբ կոճակը բաց է թողնվում: A և B կոճակները գործում են Trigger կոճակների նման, որովհետև A կոճակը գերակշռում է B կոճակը, ինչպես ստորին ձգան կոճակը գերակշռում է ձգանի վերին կոճակը:

Քայլ 7: VR տուփի շահագործում. C/D կոճակներ

C և D կոճակները մեկ անգամ ծանուցման հաղորդագրություն են ուղարկում սեղմելիս և նորից բաց թողնելիս: Դադարեցման դեպքում այլ հաղորդագրություններ չեն ուղարկվում, մինչև դրանք չթողարկվեն: C կամ D կոճակներից որևէ մեկին պահելը թույլ չի տա սերվերին հայտնաբերել մյուս կոճակի գործունեությունը:

Քայլ 8: Եզրակացություն

Կոճակների գործարկումը, իմ կարծիքով, մի փոքր աղոտ է: Շրջանակը նախատեսում է այն վայրերը, որտեղ ձեր կոդը գործի է դնում կոճակը սեղմելիս: Եթե դուք նույնպես պետք է հայտնաբերեք կոճակների թողարկումները, ապա ձեզ մնում է պարզել, թե ինչպես դա անել:

Լիովին ձեզնից է կախված, թե ինչ եք ուզում անել յուրաքանչյուր կոճակի համար և ինչ պետք է անի շարժիչը: Ինչպես եք կարգավորում ձգանի, A & B- ի և C&D կոճակների տարբերությունները, դա ձեզն է:

Կոդում փնտրեք; taskJoyStick (), taskButtonAB (), taskButtonCD () գործառույթները և ավելացրեք ձեր կոդը «// ===== ձեր կոդը այստեղ =====» մեկնաբանությունից հետո:

Theոյսթիքին (առաջ, հետ, աջ և ձախ) գործածելու համար ձեզ հարկավոր կլինի մինչև չորս գործառույթ և տարբեր կոճակները կարգավորելու համար մինչև վեց գործառույթ: Իրականացրեք դրանք բոլորը կամ պարզապես այն, ինչ ձեզ հարկավոր է: Ընտրությունը ձերն է:

Եթե դուք օգտագործում եք այս շրջանակը: Ես շատ կցանկանայի գոռալ այն մասին, թե ինչի համար եք այն օգտագործել, և եթե ձեզ համար հեշտ է օգտագործել այն:

Եթե ունեք հարցեր, թե ինչպես է այն աշխատում կամ օգնության կարիք ունեք այն աշխատելու համար, դիմեք ինձ:

Կոդը հասանելի է GitHub- ում այստեղ:

Վայելեք:

Խորհուրդ ենք տալիս: