Агуулгын хүснэгт:
- Алхам 1: Bluetooth бага энерги (BLE) талаар бага зэрэг
- Алхам 2: Скан хийх ба холболтын үзүүлэлтүүд
- Алхам 3: Joystick болон Button үйл явдлыг тайлах
- Алхам 4: VR хайрцагны ажиллагаа: Joystick
- Алхам 5: VR хайрцагны ажиллагаа: Trigger товчлуурууд
- Алхам 6: VR хайрцагны ажиллагаа: A/B товчлуурууд
- Алхам 7: VR хайрцагны ажиллагаа: C/D товчлуурууд
- Алхам 8: Дүгнэлт
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:04
Энэхүү төсөл нь хямд үнэтэй Bluetooth BLE joystick -ийг ESP32 -тэй холбох жишээ юм. Кодыг ESP32 addon бүхий Arduino IDE Ver 1.8.5 ашиглан бичсэн болно. Ашигласан 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 заавар биш юм. Би код хэрхэн ажилладаг талаар нарийвчлан тайлбарлахгүй. Би joystick -ийн зарим онцлог шинж чанарыг тайлбарлахын тулд BLE нэр томъёог ашиглах болно. Төслийнхөө хувьд өөрчлөх шаардлагатай хэсгийг нарийвчлан тайлбарлаж, үүнийг өөрчлөхөд туслах болно. Энэхүү зааврыг богино байлгахын тулд хамрах хүрээ хязгаарлагдмал бөгөөд joystick -ийг ашиглахад чиглэсэн болно.
Алхам 1: Bluetooth бага энерги (BLE) талаар бага зэрэг
Энэ нь BLE -ийн зааварчилгаа биш юм. Би энэ төслийг эхлүүлэхдээ BLE болон Classic Bluetooth -ийн ялгааг мэдэхгүй байсан. Би худалдаж авсан джойстикээ ESP32 дээр ажиллах боломжтой эсэхийг харахыг л хүссэн юм. Дараагийн текстэнд би BLE нэр томъёог ашиглан BLE хэрхэн ажилладаг талаар хялбарчилсан тоймыг өгөх болно.
BLE нь үйлчлүүлэгч/серверийн архитектурыг ашигладаг. Нэг төхөөрөмж нь үйлчилгээ үзүүлдэг сервер юм. Нөгөө төхөөрөмж нь үйлчилгээг ашигладаг үйлчлүүлэгч юм. Цахилгаан хангамжийн шаардлагыг бууруулахын тулд BLE нь өөрчлөлт гарсан тохиолдолд зөвхөн жижиг багц мэдээллийг дамжуулдаг. Жойстикийн хувьд джойстик төхөөрөмж нь сервер юм. Серверийн хувьд энэ нь өөрийгөө сурталчилж, асуусан тохиолдолд үзүүлж буй үйлчилгээнийхээ жагсаалтыг дамжуулах болно. Жойстик төхөөрөмж нь таван үйлчилгээг сурталчилдаг. Бидний сонирхож буй цорын ганц үйлчилгээ бол BLE HID (Human Interface Device) үйлчилгээ юм. BLE үйлчилгээ нь үүнтэй холбоотой онцлог шинж чанаруудтай байдаг. Онцлог шинж чанар нь ихэвчлэн мэдээллийн эх сурвалж болдог. Joystick -ийн HID үйлчилгээ нь арван онцлог шинж чанартай. Зарим шинж чанарууд нь давхардсан бөгөөд тэдгээрийг үл тоомсорлодог. Бид зөвхөн унших, мэдэгдэх чадвартай BLE тайлангийн шинж чанарыг сонирхож байна. Гурван шинж чанар нь эдгээр шаардлагыг хангаж, joystick -ийн байрлал, товчлууруудын төлөв байдлын талаархи мэдээллийг өгдөг. Мэдэгдэл идэвхжсэн үед холбогдох шинж чанар дээр өөрчлөлт гарсан тохиолдолд сервер өгөгдлийн пакет илгээх болно.
Хүрээ нь олсон сервер нь BLE HID үйлчилгээтэй эсэхийг шалгадаг бөгөөд дараа нь joystick болон товчлуурын төлөв байдлын мэдээллийг өгдөг гурван тайлангийн шинж чанарын талаархи мэдэгдлийг идэвхжүүлдэг. Дараа нь товчлуурыг дарах эсвэл суллах эсвэл джойстикийг хөдөлгөхөд ESP32 нь джойстикийн шинэ байрлал, зарим товчлууруудын төлөв байдлын талаар өгөгдлийн багцыг хүлээн авдаг.
Алхам 2: Скан хийх ба холболтын үзүүлэлтүүд
Хүрээ нь GREENLED, BLUELED гэсэн хоёр LED -ийг тодорхойлж, ESP32 -ийн GPIO хоёр зүү рүү хуваарилдаг. ESP32 нь BLE joystick -ийг хайж байх үед GREENLED асдаг. Жойстик олдвол GREENLED -ийг унтрааж, ХӨХ гэрэл асааж, холболт үүсч, та явахад бэлэн байгааг илтгэнэ. Хэрэв холболт тасарсан бол Цэнхэр өнгийг унтрааж, ESP32 -ийг дахин тохируулж, НОГООН хэсгийг асааж, дахин скан хийж эхэлнэ. Хэрэв гучин секундын дотор джойстик олдохгүй бол сканнердахаа больж, НОГООН нь унтарна. Таван секундын дараа дахин скан хийж, GREENLED асаалттай байна.
Эцсийн үр дүн нь ESP32 нь joystick -ийг олох хүртэл хайсаар байх болно. Холболт хийсний дараа ESP32 өөрөө дахин тохируулагдаж дахин сканнердах болно. Сканыг дахин эхлүүлэхийн тулд Bluetooth стекийг дахин тохируулах ESP32 SDK функц байхгүй тул ESP32 -ийг дахин тохируулна.
Алхам 3: Joystick болон Button үйл явдлыг тайлах
ESP32 дээрх нэг дуудлага хийх үйл явдал нь мэдэгдэл өгөхөөр тохируулсан гурван шинж чанарын хувьд серверээс гурван өөр өгөгдлийн пакет хүлээн авдаг. Нэг пакет нь дөрвөн байтын урттай. Гурван байт нь X тэнхлэгийн байрлал, Y тэнхлэгийн байрлал, гох товчлууруудыг агуулдаг бөгөөд эдгээр нь байт дээр битээр дүрслэгддэг. Нөгөө хоёр пакет нь тус бүрдээ хоёр байт бөгөөд битийн зураглалын товчлуурын төлөвтэй ганц байттай. Хүлээн авсан пакетуудыг задалж, санах ойд байтын массив болгон хуулж авдаг. Жойстик тэнхлэгийн өгөгдөл нь X ба Y өгөгдлийн байт руу ордог бөгөөд гурван битийн зураг бүхий товчлуурын байт тус бүр нь эдгээр товчлууруудын зохих байт руу чиглэгддэг.
Мэдэгдэл хүлээн авсан өгөгдлийг зохицуулахын тулд FreeRTOS даалгавар бий болно. Joystick болон гох товчлууруудын нэг даалгавар, 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 (button & VB_BUTTON_A) {// товчлуур A дарагдсан эсвэл дарагдаж байгаа Serial.println ("А товч"); // ===== энд кодоо оруулна уу =====}
хэрэв (товчлуурууд & VB_BUTTON_B)
{// B товчлуурыг дарсан эсвэл дарж байна Serial.println ("B товч");
// ===== энд кодоо оруулна уу =====
}} // for} // taskButtonAB
Алхам 4: VR хайрцагны ажиллагаа: Joystick
Хэрэв джойстикийг төвийн байрлалд үлдээсэн бол joystick -ийн мэдэгдлийг илгээдэггүй. Жойстикийг төвөөс нь холдуулсны дараа ойролцоогоор 15 мС тутамд джойстик болон гох товчлуурын өгөгдөл бүхий мэдэгдэл илгээдэг. Жойстикийг буцааж төв рүү зөөхөд төв рүү шилжсэн тухай мэдэгдлийг илгээдэггүй. Өөрөөр хэлбэл, энэ нь джойстик төвөөс нүүсэн гэдгийг хэлж байгаа боловч төв рүү шилжсэн гэсэн үг биш юм. Эцсийн үр дүн нь та джойстик төв рүү чиглэж байгааг харуулсан мессеж хүлээн авах боловч төвд хүрсэн гэсэн үг биш юм. Маш ядаргаатай. Хоёр гох товчлуур нь джойстикийн өгөгдөлд багтсан болно. Жойстикийг төв рүү буцааж өгсний дараа гох товчлууруудын аль нэгийг дарахад joystick -ийн байрлал тэг болж шинэчлэгдэх болно. Framework нь цаг дуусах цаг хэмжигчтэй бөгөөд джойстик/гох товчлуурын бүх мэдэгдэл ирэхээ больсны дараа удалгүй автоматаар джойстикийн мэдэгдлийг дуурайдаг. Таймер нь джойстикийг тэг болгож тохируулдаг. Жойстик нь тэнхлэг бүрт +/- 25 орчим байдаг.
Алхам 5: VR хайрцагны ажиллагаа: Trigger товчлуурууд
Гох товчлуурууд нь дарсны дараа нэг удаа, суллагдсан тохиолдолд дахин мэдэгдэл илгээх болно. Дарагдсан мэдэгдлийн зурвас дээр дарагдсан товчлуурыг харуулна. Суллах тухай мэдэгдэл нь хоёр товчлуурыг суллаж байгааг харуулж байна.
Доод гох товчлуурыг дарахад сервер дээд гох товчлуур дарагдсан болохыг илрүүлэхээс сэргийлнэ. Дээд гох товчлуурыг дарж, доод гох товчлуурыг дарахад сервер нь доод гох товч дарагдсан тухай мэдэгдэл илгээдэг (дээд гох товч тэг болно!). Доод гох товчлуурыг гаргаснаар сервер дээд гох товчлуурыг дарж, доод гохыг суллах тухай мэдэгдэл илгээх болно.
Өөрөөр хэлбэл, доод гох товч нь дээд гох товчлуур дээр давамгайлах бөгөөд хоёуланг нь дарахад үүнийг дарах болно. Хоёр товчлуур дарагдсан тохиолдолд та хэрхэн ажиллахаа тодорхойлох ёстой.
Алхам 6: VR хайрцагны ажиллагаа: A/B товчлуурууд
А ба В товчлуурууд нь джойстик шиг ажилладаг бөгөөд дарж, барьсны дараа тасралтгүй мэдэгдэл илгээдэг. Товчлуурыг суллахад зурвасууд зогсдог. А ба В товчлуурууд нь Trigger товчлууруудтай адил ажилладаг, учир нь доод товчлуур нь дээд гох товчлуурыг дардаг шиг А товч нь В товчлуурыг давамгайлдаг.
Алхам 7: VR хайрцагны ажиллагаа: C/D товчлуурууд
C ба D товчлуурууд нь дарахад нэг удаа, суллагдсан тохиолдолд дахин мэдэгдэл илгээдэг. Хэрэв түр зогсоовол суллагдах хүртэл өөр мессеж илгээхгүй. C эсвэл D товчлууруудын аль нэгийг дарахад сервер нөгөө товчлуур дээрх үйлдлийг илрүүлэхээс сэргийлнэ.
Алхам 8: Дүгнэлт
Миний бодлоор товчлууруудын ажиллагаа арай л ойлгомжгүй байна. Framework нь товчлуур дарагдсан үед таны кодыг ажиллуулах газруудыг өгдөг. Хэрэв та товчлуурын хувилбарыг илрүүлэх шаардлагатай бол үүнийг хэрхэн хийхээ шийдэх болно.
Товчлуур бүрээс юу хийхийг хүсч байгаагаа, джойстик ямар хөдөлгөөн хийх ёстойг та өөрөө шийдэх болно. A & B, C & D товчлууруудын ялгааг хэрхэн зохицуулах нь танаас хамаарна.
Дараах кодыг харна уу; taskJoyStick (), taskButtonAB (), taskButtonCD () функцуудыг хийж, "// ===== энд кодоо нэмэх =====" гэсэн комментийн дараа кодоо нэмээрэй.
Жойстикийг удирдахын тулд дөрвөн хүртэлх функц (урагш, хойш, баруун, зүүн), янз бүрийн товчлуурыг удирдах зургаан хүртэлх функц шаардлагатай болно. Тэдгээрийг бүгдийг нь эсвэл танд хэрэгтэй зүйлээ хэрэгжүүлээрэй. Сонголт чинийх.
Хэрэв та энэ хүрээг ашигладаг бол. Та үүнийг юунд ашигласан тухай, хэрэв танд ашиглахад хялбар санагдсан бол би хашгирахыг хүсч байна.
Хэрэв танд энэ нь хэрхэн ажилладаг талаар асуулт байвал эсвэл түүнийг ажиллуулахад туслах шаардлагатай бол надтай холбоо барина уу.
Кодыг GitHub дээр эндээс авах боломжтой.
Зугаацаарай.
Зөвлөмж болгож буй:
ТВ -ийн алсын удирдлага нь RF -ийн алсын удирдлага болжээ -- NRF24L01+ заавар: 5 алхам (зурагтай)
ТВ -ийн алсын удирдлага нь RF -ийн алсын удирдлага болжээ || NRF24L01+ заавар: Энэхүү төсөл дээр би алдартай nRF24L01+ RF IC ашиглан LED зурвасын гэрэлтүүлгийг телевизийн алсын удирдлагын ашиггүй гурван товчлуураар утасгүйгээр тохируулах аргыг танд үзүүлэх болно. Эхэлцгээе
IRduino: Arduino алсын удирдлага - Алдагдсан алсын зайн дууриамал: 6 алхам
IRduino: Arduino Remote Control - Алдагдсан алсын удирдлагыг дуурайгаарай: Хэрэв та ТВ эсвэл DVD тоглуулагчийнхаа алсын удирдлагыг алдаж байсан бол төхөөрөмж дээрх товчлуур руу алхаж, хайж олох, ашиглах нь ямар их урам хугарахыг та мэднэ. Заримдаа эдгээр товчлуурууд нь алсын удирдлагатай ижил функцийг санал болгодоггүй. Хүлээн авах
Энгийн алсын удирдлагатай иж бүрдэл нь дөрвөн сувгийн RC тоглоомын алсын удирдлага болж хувирсан: 4 алхам
Ердийн алсын удирдлагатай иж бүрдэл нь дөрвөн сувагтай RC тоглоомын алсын удирдлага болж хувирав: 如何 将 通用 器 套件 转换 为 模型 中 遥控 的改造 方法 简单。 只需
IR алсын удирдлагаа RF алсын удирдлага руу хөрвүүлэх: 9 алхам (зурагтай)
IR алсын удирдлагаа RF -ийн удирдлага руу хөрвүүлэх: Өнөөдрийн зааварчилгаанд би ерөнхий хянагчийн модулийг микроконтроллергүйгээр хэрхэн ашиглахыг танд харуулах болно. Алсын удирдлага. Хөрвүүлэх гол давуу тал нь
Цахилгаан хэрэгслээ телевизийн алсын удирдлагаар (алсын удирдлага) температур ба чийгшлийн дэлгэцээр удирдана: 9 алхам
Цахилгаан хэрэгслээ ТВ -ийн алсын удирдлагаар (алсын удирдлага) температур ба чийгшлийн дэлгэцээр удирдана уу: Сайн байна уу, би бол Абхай, энэ бол Instructables -ийн анхны блог бөгөөд өнөөдөр би үүнийг ашиглан телевизийн алсын удирдлагаараа цахилгаан хэрэгслээ хэрхэн удирдахыг үзүүлэх болно. энгийн төсөл. Материалыг дэмжиж, өгсөн атл лабораторид баярлалаа