Სარჩევი:
- ნაბიჯი 1: ცოტა Bluetooth დაბალი ენერგიის შესახებ (BLE)
- ნაბიჯი 2: სკანირება და კავშირის მაჩვენებლები
- ნაბიჯი 3: ჯოისტიკისა და ღილაკის მოვლენების გაშიფვრა
- ნაბიჯი 4: VR ყუთის მოქმედება: ჯოისტიკი
- ნაბიჯი 5: VR ყუთის მოქმედება: გააქტიურეთ ღილაკები
- ნაბიჯი 6: VR ყუთის მოქმედება: A/B ღილაკები
- ნაბიჯი 7: VR ყუთის მოქმედება: C/D ღილაკები
- ნაბიჯი 8: დასკვნა
ვიდეო: ESP32 Bluetooth BLE დისტანციური მართვა: 8 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:19
ეს პროექტი არის მაგალითი იმისა, თუ როგორ უნდა დააკავშიროთ იაფი 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 და კლასიკურ Bluetooth– ს შორის. მე უბრალოდ მინდოდა მენახა, შეძლებდა თუ არა ჯოისტიკის შეძენას ESP32– ით სამუშაოდ. მომდევნო ტექსტში მე ვიყენებ BLE ტერმინოლოგიას, რათა გამარტივებული მიმოხილვა მივიღო იმაზე, თუ როგორ მუშაობს BLE.
BLE იყენებს კლიენტის/სერვერის არქიტექტურას. ერთი მოწყობილობა არის სერვერი, რომელიც უზრუნველყოფს მომსახურებას. სხვა მოწყობილობა არის კლიენტი, რომელიც მოიხმარს მომსახურებებს. ენერგიის მოთხოვნების შესანარჩუნებლად, BLE გადასცემს ინფორმაციის მხოლოდ მცირე პაკეტებს, როდესაც ხდება ცვლილება. ჯოისტიკის შემთხვევაში ჯოისტიკის მოწყობილობა არის სერვერი. როგორც სერვერი, ის რეკლამირებს საკუთარ თავს და გადასცემს იმ სერვისების ჩამონათვალს, რასაც იგი ითხოვს. ჯოისტიკი აცხადებს ხუთ მომსახურებას. ერთადერთი სერვისი, რომელიც ჩვენ გვაინტერესებს არის BLE HID (ადამიანის ინტერფეისის მოწყობილობა) სერვისი. BLE სერვისს აქვს ის, რაც ცნობილია როგორც მასთან დაკავშირებული მახასიათებლები. მახასიათებელი, როგორც წესი, მონაცემთა წყაროა. ჯოისტიკის HID სერვისს აქვს ათი მახასიათებელი. ზოგიერთი მახასიათებელი დუბლიკატია და იგნორირებულია. ჩვენ გვაინტერესებს მხოლოდ BLE ანგარიშის მახასიათებლები, რომლებსაც აქვთ წაკითხვისა და შეტყობინების შესაძლებლობები. სამი მახასიათებელი აკმაყოფილებს ამ მოთხოვნებს და იძლევა მონაცემებს ჯოისტიკის პოზიციისა და ღილაკების მდგომარეობის შესახებ. როდესაც შეტყობინება ჩართულია, სერვერი გაგზავნის მონაცემთა პაკეტებს, როდესაც ცვლილებები გამოვლინდება ასოცირებულ მახასიათებელში.
ჩარჩო ადასტურებს, რომ სერვერს, რომელსაც აღმოაჩენს აქვს BLE HID სერვისი და შემდეგ გააქტიურებს შეტყობინებებს ანგარიშების სამ მახასიათებელზე, რომლებიც უზრუნველყოფენ ჯოისტიკისა და ღილაკების მდგომარეობის ინფორმაციას. შემდეგ, როდესაც ღილაკს დააჭერთ ან გაათავისუფლებთ ან ჯოისტიკი გადაადგილდება, ESP32 იღებს მონაცემების პაკეტს, რომელიც ეუბნება რა არის ჯოისტიკის ახალი პოზიცია და/ან ზოგიერთი ღილაკის მდგომარეობა.
ნაბიჯი 2: სკანირება და კავშირის მაჩვენებლები
ჩარჩო განსაზღვრავს ორ LEDS- ს, GREENLED- ს და BLUELED- ს და ანიჭებს მათ ESP32– ის GPIO ორ პინს. GREENLED განათებულია, როდესაც ESP32 ეძებს BLE ჯოისტიკს. როდესაც ჯოისტიკი მოიძებნება GREENLED გამორთულია და ცისფერი ანათებს იმის მანიშნებლად, რომ კავშირი დამყარდა და თქვენ მზად ხართ წასასვლელად. თუ კავშირი დაიკარგა, BLUELED გამორთულია, ESP32 გადატვირთულია, GREENLED განათებულია და სკანირება კვლავ იწყება. თუ ჯოისტიკი არ იქნა ნაპოვნი ოცდაათ წამში, სკანირება ჩერდება და GREENLED გამორთულია. ხუთი წამის შემდეგ, სკანირება კვლავ იწყება და 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 ღილაკები;
// ===== თუ ამოცანა მოითხოვს ერთჯერადი ინიციალიზაციას, დადეთ აქ =====
სანამ (ჭეშმარიტი) {// უარი თქვით პროცესორზე, დაელოდეთ ახალ მონაცემებს vTaskSuspend (NULL); // ჩვენ უბრალოდ გავიღვიძეთ, ახალი მონაცემები ხელმისაწვდომია ღილაკები = VrBoxData [VB_BTNAB]; Serial.printf ("A/B ღილაკები: %02X / n", ღილაკები); if (ღილაკები & VB_BUTTON_A) {// ღილაკი A დაჭერილია ან დაჭერილია Serial.println ("ღილაკი A"); // ===== დაამატეთ თქვენი კოდი აქ =====}
თუ (ღილაკები და VB_BUTTON_B)
{// ღილაკი B დაჭერილი ან დაკავებულია Serial.println ("ღილაკი B");
// ===== დაამატეთ თქვენი კოდი აქ =====
}} // for} // taskButtonAB
ნაბიჯი 4: VR ყუთის მოქმედება: ჯოისტიკი
თუ ჯოისტიკი დარჩა ცენტრალურ პოზიციაში, ჯოისტიკის შეტყობინებები არ იგზავნება. მას შემდეგ, რაც ჯოისტიკი გადატანილია ცენტრიდან, შეტყობინების შეტყობინება ჯოისტიკების მონაცემებით და ტრიგერის ღილაკის მონაცემებით იგზავნება ყოველ 15 წუთში ერთხელ. როდესაც ჯოისტიკი გადატანილია ცენტრში, შეტყობინება, რომ ის გადავიდა ცენტრში, არ იგზავნება. სხვა სიტყვებით რომ ვთქვათ, ის გეუბნებათ, რომ ჯოისტიკი გადავიდა ცენტრიდან, მაგრამ არა ის რომ გადავიდა ცენტრში. საბოლოო შედეგი არის ის, რომ თქვენ იღებთ შეტყობინებებს, რომლებიც მიუთითებენ, რომ ჯოისტიკი მოძრაობს ცენტრისკენ, მაგრამ არა იმას, რომ მან მიაღწია ცენტრს. ძალიან მაღიზიანებს. ორი გამშვები ღილაკი მოყვება ჯოისტიკის მონაცემებს. ჯოისტიკის ცენტრში დაბრუნების შემდეგ ერთ -ერთი გამშვები ღილაკის დაჭერა ჯოისტიკის პოზიციას ნულამდე განაახლებს. ჩარჩოს აქვს ჩამონტაჟებული დროის ჩამწერი, რომელიც ავტომატურად ახდენს ჯოისტიკით შეტყობინების შეტყობინების სიმულაციას მოკლე დროში მას შემდეგ, რაც ყველა ჯოისტიკის/ტრიგერის ღილაკის შეტყობინების შეტყობინებები შეწყვეტს ჩამოსვლას. ქრონომეტრი ჯოისტიკს ნულამდე აყენებს. ჯოისტიკს აქვს დიაპაზონი დაახლოებით +/- 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 () ფუნქციონირებს და დაამატეთ თქვენი კოდი "// ===== დაამატეთ თქვენი კოდი აქ =====" კომენტარის შემდეგ.
თქვენ დაგჭირდებათ ოთხამდე ფუნქცია ჯოისტიკისთვის (წინ, უკან, მარჯვნივ და მარცხნივ) და ექვსამდე ფუნქციას სხვადასხვა ღილაკების დასამუშავებლად. განახორციელეთ ისინი ყველა ან უბრალოდ რაც გჭირდებათ. Არჩევანი შენზეა.
თუ იყენებთ ამ ჩარჩოს. მე მიყვარს ყვირილი იმის შესახებ, თუ რისთვის იყენებდით მას და თუ თქვენთვის ადვილი გამოსაყენებელი იყო.
თუ თქვენ გაქვთ შეკითხვები, თუ როგორ მუშაობს იგი ან გჭირდებათ დახმარება მის მუშაობაში, დამიკავშირდით.
კოდი ხელმისაწვდომია GitHub– ზე აქ.
მიირთვით.
გირჩევთ:
LED RF დისტანციური მართვის დისტანციური მართვა "არაფრის"!: 5 ნაბიჯი
LED RF დისტანციური მართვის დისტანციური მართვა "არაფრის"!: ამ პროექტში მე გაჩვენებთ თუ როგორ უნდა გამოიყენოთ LED RF დისტანციური მართვის პულტი იმისათვის, რომ გააკონტროლოთ თითქმის ყველაფერი რაც გსურთ. ეს ნიშნავს, რომ ჩვენ უფრო ახლოს შევხედავთ RF დისტანციური გადაცემის პროცესს, წაიკითხავთ გაგზავნილ მონაცემებს Arduino µC– ით
ხის Bluetooth დისტანციური მართვა Lego Duplo მატარებლისთვის: 3 ნაბიჯი (სურათებით)
ხის Bluetooth დისტანციური მართვა ლეგოს დუპლოს მატარებლისთვის: ჩემს ბავშვებს უყვარდათ ეს პატარა ლეგო დუპლოს მატარებელი, განსაკუთრებით ჩემი უმცროსი, რომელიც იბრძვის სიტყვებთან ურთიერთობისთვის, ასე რომ მინდოდა აეშენებინა მისთვის ისეთი რამ, რაც დაეხმარება მას მატარებლით ეთამაშა დამოუკიდებლად მოზრდილებისა თუ ტელეფონების/ტაბლეტებისგან. რაღაც, რაც
დისტანციური Arduino დისტანციური მართვა: 5 ნაბიჯი
უსაფრთხო Arduino დისტანციური: ეს არის მაგალითი იმისა, თუ როგორ უნდა გააკეთოთ ულტრა უსაფრთხო უკაბელო (ავტოფარეხი) დისტანციური. ჩვეულებრივ დისტანციურ დისკებს აქვს მოძრავი კოდის ტიპის უსაფრთხოება, რომლის გვერდის ავლით ნებისმიერი მოწინავე ქურდი შეძლებს. ეს დისტანციური სისტემა ეყრდნობა 16 ბაიტიანი ღილაკის გამოყენებას, ასე რომ მისი გატეხვა იქნება
"რეტრო მომავალი" Bluetooth დისტანციური მართვა: 9 ნაბიჯი (სურათებით)
"Retro Future" Bluetooth დისტანციური მართვის პულტი: მე ყოველთვის მიყვარდა "ხვალინდელი სამყაროს" გარეგნობა და შეგრძნება; ჩვენ წარმოვადგინეთ შუა საუკუნეების სამეცნიერო ფანტასტიკა და კონცეფციის პროდუქტები. კარგი, ეს სიმართლეს არ შეესაბამება. როდესაც პატარა ვიყავი, მეგონა, რომ ვარსკვლავურ გზაზე ტრიკოდერი მახინჯი და მოუხერხებელი იყო, მაგრამ
დისტანციური დისტანციური მართვა: 11 ნაბიჯი (სურათებით)
დისტანციური მართვა: მე მყავს ახალშობილი ბავშვი და ის არ ფიქრობს, რომ მან უნდა დაიძინოს მანამ, სანამ მე და ჩემმა ცოლმა მასაც ვუსურვოთ. ერთი რამ, რაც მას ბედნიერს ხდის თავის საწოლში არის მობილური, რომელიც მის თავზეა ჩამოკიდებული. ასე რომ, როდესაც ის გაიღვიძებს, თუ ჩვენ გვჭირდება კიდევ 25 წუთი ან მეტი