Мазмұны:

ESP32 Bluetooth BLE қашықтан басқару құралы: 8 қадам
ESP32 Bluetooth BLE қашықтан басқару құралы: 8 қадам

Бейне: ESP32 Bluetooth BLE қашықтан басқару құралы: 8 қадам

Бейне: ESP32 Bluetooth BLE қашықтан басқару құралы: 8 қадам
Бейне: ESP32 Tutorial 15 - DC Motor Speed Control with ESP32 L293D | SunFounder's ESP32 IoT Learnig kit 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 -ге қалай қосудың мысалы. Код ESP32 қосымшасы бар Arduino IDE Ver 1.8.5 көмегімен жазылған. Қолданылатын BLE джойстигі - бұл коммерциялық құрылғы, оны Интернетте 20,00 доллардан төмен немесе жергілікті 5BELoW дүкенінен 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 өзгеріс болған кезде ғана ақпараттың шағын пакеттерін жібереді. Джойстик жағдайында джойстик құрылғысы сервер болып табылады. Сервер ретінде ол өзін жарнамалайды және сұраған кезде ұсынатын қызметтердің тізімін жібереді. Джойстик құрылғысы бес қызметті жарнамалайды. Бізді қызықтыратын жалғыз қызмет - бұл BLE HID (Human Interface Device) қызметі. BLE қызметінде онымен байланысты сипаттамалар бар. Сипаттама әдетте деректер көзі болып табылады. Джойстиктің HID қызметі он сипаттамаға ие. Кейбір сипаттамалар қайталанған және еленбейді. Бізді тек оқу және хабарлау мүмкіндіктері бар BLE есеп сипаттамалары қызықтырады. Сипаттамалардың үшеуі осы талаптарға сәйкес келеді және джойстиктің орналасуы мен түймелердің күйі туралы мәліметтер береді. Хабарландыру қосылған кезде, байланысқан сипаттамада өзгеріс анықталған кезде сервер деректер пакеттерін жібереді.

Рамка табылған серверде BLE HID қызметі бар екенін тексереді, содан кейін джойстик пен түйме күйі туралы ақпаратты беретін үш есеп сипаттамасы туралы хабарландыруларды қосады. Содан кейін, түйме басылғанда немесе босатылғанда немесе джойстик жылжытылғанда, ESP32 жаңа джойстиктің орналасуы және/немесе кейбір түймелердің күйі туралы мәліметтер пакетін алады.

2 -қадам: сканерлеу және қосылу көрсеткіштері

Рамка GREENLED және BLUELED екі жарықдиодты анықтайды және оларды ESP32 GPIO түйреуіштерінің екеуіне тағайындайды. GREENLED ESP32 BLE джойстикін іздеген кезде жанады. Джойстик табылғанда, GREENLED өшіріледі, ал КӨК көк жанып тұрады, бұл байланыс орнатылғанын және сіз баруға дайын екеніңізді білдіреді. Егер байланыс үзілсе, КӨК түс өшіріледі, ESP32 қалпына келтіріледі, ЖАСЫЛ жарықтандырылады және сканерлеу қайтадан басталады. Егер джойстик отыз секунд ішінде табылмаса, сканерлеу тоқтайды және GREENLED өшеді. Бес секундтан кейін сканерлеу қайтадан басталады және GREENLED қосылады.

Ақырғы нәтиже - ESP32 джойстикті тапқанша іздеуді жалғастырады. Байланыс орнатылғаннан кейін, егер ол жоғалса, ESP32 автоматты түрде қалпына келтіріліп, қайта қарап шығуды бастайды. ESP32 қалпына келтіріледі, себебі сканерлеуді қайта бастау үшін Bluetooth стегін қалпына келтіретін ESP32 SDK функциялары жоқ.

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 («А түймесі»); // ===== кодты осында қосыңыз =====}

егер (түймелер & VB_BUTTON_B)

{// B түймесі басылды немесе Serial.println («В батырмасы») ұстап тұр;

// ===== кодты осында қосыңыз =====

}} // // үшін} // taskButtonAB

4 -қадам: VR Box жұмыс: джойстик

Егер джойстик орталық күйде қалдырылса, джойстик туралы хабарламалар жіберілмейді. Джойстик орталықтан жылжытылғаннан кейін, әр 15 мС сайын джойстик деректері мен триггер түймесі туралы мәліметтер бар хабарлама жіберіледі. Джойстик қайтадан орталыққа жылжытылған кезде, оның орталыққа жылжытылғандығы туралы хабарлама жіберілмейді. Басқаша айтқанда, бұл сізге джойстиктің орталықтан жылжытылғанын айтады, бірақ оның орталыққа жылжытылғанын білдірмейді. Ақырғы нәтиже - джойстиктің орталыққа қарай жылжып бара жатқанын көрсететін хабарламалар, бірақ ол орталыққа жеткен жоқ. Өте тітіркендіргіш. Екі триггер түймесі джойстик деректерімен бірге берілген. Джойстикті ортасына қайтарғаннан кейін триггер түймелерінің бірін басу джойстиктің орнын нөлге дейін жаңартады. Framework-те барлық джойстик/триггер түймесі туралы хабарлама келмей қалғаннан кейін қысқа уақыт ішінде джойстик туралы хабарландыру автоматты түрде имитациялайтын күту уақыты таймері бар. Таймер джойстикті нөлге қояды. Джойстиктің әр осінде шамамен +/- 25 диапазоны бар.

5 -қадам: VR қорапшасының жұмысы: іске қосу түймелері

Іске қосу түймелері басылған кезде бір рет және босатылған кезде тағы да хабарлама жібереді. Басылған хабарландыру хабарламасы басылған түймені көрсетеді. Босату туралы хабар екі түйменің де босатылғанын көрсетеді.

Төменгі триггер түймесін басып тұру серверге жоғарғы триггер түймесінің басылғанын анықтауға мүмкіндік бермейді. Жоғарғы триггер түймесін басып тұрып, төменгі триггер түймесін басу серверге төменгі триггер түймесі басылғандығы туралы хабарлама жіберуге әкеледі (жоғарғы триггер түймесі нөлге тең болады!). Төменгі триггер түймесін босату серверге жоғарғы триггер түймесі басылып, төменгі триггер босатылғандығы туралы хабарлама жібереді.

Басқаша айтқанда, триггердің төменгі түймесі жоғарғы триггердің үстінен басым болады және екеуі де басылған кезде оны басады. Сіз екі түймені басу жағдайында қалай әрекет ету керектігін анықтауыңыз керек.

6 -қадам: VR Box жұмыс: A/B түймелері

A және B түймелері джойстик сияқты әрекет етеді және басылғанда және ұстап тұрғанда хабарлама хабарламаларын үздіксіз жібереді. Түйме босатылған кезде хабарламалар тоқтайды. A және B түймелері Trigger түймелеріне ұқсас жұмыс істейді, себебі A түймесі B түймешігін басқарады, дәл төменгі триггер жоғарғы триггер түймесінде басым.

7 -қадам: VR қорапшасының жұмысы: C/D түймелері

C және D түймелері бір рет басылғанда және босатылғанда тағы бір рет хабарлама жібереді. Егер ұстап тұрсаңыз, олар шығарылмайынша басқа хабарламалар жіберілмейді. C немесе D түймелерінің біреуін басып тұру серверге басқа батырмадағы әрекетті анықтауға жол бермейді.

8 -қадам: Қорытынды

Түймелердің жұмысы, менің ойымша, аздап қауіпті. Framework түймені басқан кезде сіздің кодыңыздың әрекет ететін орындарын ұсынады. Егер сізге түйменің шығарылуын анықтау қажет болса, бұл сізге қалай істеу керектігін түсінуге мүмкіндік береді.

Әр түйменің не істегіңіз келетінін және джойстиктің не істеу керектігін өзіңіз шешесіз. Триггердегі айырмашылықты қалай шешу керек, A & B және C & D түймелері сізге байланысты.

Үшін кодты қараңыз; taskJoyStick (), taskButtonAB (), taskButtonCD () функциялары және «// ===== кодты осында қосу =====» түсініктемесінен кейін кодты қосыңыз.

Джойстикті басқару үшін сізге төрт функция қажет (алға, артқа, оңға және солға) және әр түрлі түймелерді басқару үшін алты функцияға дейін. Олардың барлығын немесе сізге қажет нәрсені орындаңыз. Таңдау сіздікі.

Егер сіз бұл негізді қолдансаңыз. Сіз оны не үшін қолданғаныңыз туралы айқайлағым келеді, егер сіз оны оңай қолдансаңыз.

Егер сізде оның қалай жұмыс істейтіні туралы сұрақтарыңыз болса немесе оны іске қосуға көмек қажет болса, маған хабарласыңыз.

Бұл код GitHub -да қол жетімді.

Ләззат алыңыз.

Ұсынылған: