Мазмуну:

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

Video: ESP32 Bluetooth BLE Алыстан башкаруу: 8 кадам

Video: ESP32 Bluetooth BLE Алыстан башкаруу: 8 кадам
Video: ЖИЗНЬ В ГОРНЫХ СЁЛАХ ДАГЕСТАНА (Отрывок из Большого фильма про Дагестан) #Дагестан #Кавказ 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 addon менен Arduino IDE Ver 1.8.5 аркылуу жазылган. Колдонулган BLE джойстиги - бул коммерциялык түзмөк, аны Интернеттен 20.00 доллардан төмөн же жергиликтүү 5BELoW дүкөнүңүздөн 5.00 долларга сатып алсаңыз болот.

Мен бул долбоор үчүн колдонгон джойстик - бул Spektrum VR Control Bluetooth алыстан башкаргычы. Бул VR гарнитурасы менен колдонуу үчүн джойстик/чычкан катары Android жана IOS планшеттери менен иштөө катары сатылып жатат.

VR Control Bluetooth Remote Controllerде 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 деген эки LEDди аныктайт жана аларды ESP32нин GPIO казыктарынын экөөнө дайындайт. GREENLED ESP32 BLE джойстигин издеп жатканда күйөт. Джойстик табылганда GREENLED өчүрүлөт жана BLUELED күйөт жана байланыштын орнотулгандыгын жана сиз барууга даяр экениңизди билдирет. Эгерде байланыш үзүлсө, КӨК өчүрүлөт, 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 *parameter) {uint8_t баскычтары;

// ===== эгерде тапшырма бир жолку инициализацияны талап кылса, бул жерге коюңуз =====

while (true) {// CPUдан баш тартуу, 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 баскычы") кармалып турат;

// ===== бул жерге кодуңузду кошуңуз =====

}} // // үчүн} // taskButtonAB

4 -кадам: VR кутусунун иштеши: джойстик

Эгерде джойстик борбордук позицияда калтырылса, джойстик эскертмелери жөнөтүлбөйт. Джойстик борбордон жылдырылгандан кийин, джойстиктин маалыматтары жана триггер баскычынын маалыматы бар ар бир 15 мС жөнүндө билдирүү жөнөтүлөт. Джойстик кайра борборго жылдырылганда, анын борборго жылгандыгы тууралуу билдирүү жөнөтүлбөйт. Башкача айтканда, бул джойстиктин борбордон жылганын, бирок борборго жылганын эмес. Жыйынтык - бул джойстиктин борборго карай жылганын көрсөткөн билдирүүлөрдү аласыз, бирок ал борборго жеткен жок. Абдан тажатма. Эки триггер баскычы джойстиктин маалыматтары менен кошо берилет. Джойстикти борборго кайтаргандан кийин триггер баскычтарынын бирин басуу джойстиктин абалын нөлгө чейин жаңыртат. Frameworkта тайм-тайм орнотулган, ал джойстик/триггер баскычы билдирүүлөрү келбей калгандан кийин бир аздан кийин автоматтык түрдө джойстиктин билдирүүсүн симуляциялайт. Таймер джойстикти нөлгө коёт. Джойстиктин ар бир огунда болжол менен +/- 25 диапазону бар.

5 -кадам: VR кутусунун иштеши: Триггер баскычтары

Триггер баскычтары басылганда бир жолу жана бошотулганда дагы бир жолу билдирүү жөнөтөт. Басылган билдирүү билдирүүсүндө басылган баскыч көрсөтүлөт. Релиздин билдирүүсү эки баскычтын тең кое берилгенин билдирет.

Төмөнкү триггер баскычын кармап туруу сервердин жогорку триггер баскычы басылганын аныктоосуна жол бербейт. Триггердин жогорку баскычын кармап, төмөнкү триггер баскычын басуу сервердин төмөнкү триггер баскычы басылгандыгы жөнүндө билдирүү жөнөтүүсүнө алып келет (жогорку триггер баскычы нөлгө барабар болот!). Төмөнкү триггер баскычын кое берүү сервердин жогорку триггер баскычы басылып, төмөнкү триггер бошотулгандыгы жөнүндө билдирүү жөнөтүүсүнө алып келет.

Башкача айтканда, төмөнкү триггер баскычы үстүнкү триггердин үстүнөн үстөмдүк кылат жана экөө тең басылганда аны жокко чыгарат. Сиз эки баскычтын басылганын кантип чечүү керектигин чечишиңиз керек.

6 -кадам: VR кутусунун иштеши: A/B баскычтары

А жана В баскычтары джойстик сыяктуу иштейт жана басылганда жана басылганда тынымсыз билдирүү билдирүүлөрүн жөнөтүп турат. Баскыч басылганда билдирүүлөр токтойт. А жана В баскычтары Trigger баскычтарына окшош иштейт, анткени А баскычы В баскычын төмөнкү триггер баскычы үстүнкү триггер баскычына үстөмдүк кылат.

7 -кадам: VR кутусунун иштеши: C/D баскычтары

C жана D баскычтары басылганда бир жолу жана бошотулганда дагы билдирүү жөнөтөт. Эгер кармалып калса, алар чыгарылмайынча башка билдирүүлөр жөнөтүлбөйт. C же D баскычтарынын бирин кармап туруу сервердин башка баскычтагы аракеттерди аныктоосуна жол бербейт.

8 -кадам: Жыйынтык

Кнопкалардын иштеши, менин оюмча, бир аз кызыксыз. Framework баскыч басылганда кодуңузду иштете турган жерлерди камсыздайт. Эгерде сиз дагы баскычтын релиздерин табышыңыз керек болсо, анда сиз муну кантип жасоону билүү үчүн каласыз.

Ар бир баскычты эмне кылгыңыз келгенин жана джойстик эмне кылышы керектигин чечүү толугу менен сизге байланыштуу. Триггердеги айырмачылыктарды кантип чечүү керек, A & B жана C & D баскычтары сизге байланыштуу.

Үчүн кодду караңыз; taskJoyStick (), taskButtonAB (), taskButtonCD () функциялары жана "// ===== кодуңузду бул жерге кошуу =====" комментарийинен кийин кодуңузду кошуңуз.

Джойстикти иштетүү үчүн төрт функцияга чейин (алдыга, артка, оңго жана солго) жана ар кандай баскычтарды иштетүү үчүн алты функцияга чейин керек болот. Алардын бардыгын же сизге керектүү нерсени ишке ашырыңыз. Тандоо сеники.

Эгер сиз бул алкакты колдонсоңуз. Сиз аны эмне үчүн колдонгонуңузду жана эгер сиз аны оңой колдонсоңуз, кыйкыргым келет.

Эгерде сизде анын кантип иштээри жөнүндө суроолор болсо же аны иштетүүгө жардам керек болсо, мага кайрылыңыз.

Код GitHubда жеткиликтүү бул жерде.

Ырахат.

Сунушталууда: