תוכן עניינים:

שלט רחוק ESP32 Bluetooth BLE: 8 שלבים
שלט רחוק ESP32 Bluetooth BLE: 8 שלבים

וִידֵאוֹ: שלט רחוק ESP32 Bluetooth BLE: 8 שלבים

וִידֵאוֹ: שלט רחוק ESP32 Bluetooth BLE: 8 שלבים
וִידֵאוֹ: Control your Arduino and ESP32 remote car using the Bluetooth Joystick app 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 $ או מחנות חמשת החנויות המקומית שלך ב- FiveBELoW תמורת 5.00 $.

הג'ויסטיק בו השתמשתי לפרויקט זה הוא בקר מרחוק Bluetooth של Spektrum VR Control. הוא משווק כעבודה עם טאבלטים של Android ו- IOS כג'ויסטיק/עכבר לשימוש עם אוזניות VR.

לבקר מרחוק Bluetooth לשלוט VR יש ג'ויסטיק יחיד עם ציר X ו- Y, שני לחצני הדק מלפנים ושישה כפתורים בידית. שניים מהכפתורים מיועדים להפעלה/כיבוי ושליטה במצב. ניתן להשתמש בארבעת הכפתורים האחרים לכל מה שתרצו. פרויקט זה הוא שלד או מסגרת המטפלת בכל ממשקי Bluetooth ופענוח הכפתורים והג'ויסטיק. כל שעליך לעשות הוא להוסיף שיחות פונקציה כדי לטפל במה שאתה רוצה שהלחצנים והג'ויסטיק יעשו. אינך צריך לדעת דבר על Bluetooth כדי להשתמש במסגרת זו.

ישנם אתרי אינטרנט רבים עם הוראות מפורטות להתקנת ה- Arduino IDE והתוסף ESP32. אני לא מתכוון לחזור על המידע הזה כאן. חפש בגוגל ופעל לפי ההנחיות.

המסגרת היא התאמה של דוגמא ללקוח BLE שפורסם על ידי IoT Sharing. אתה יכול למצוא אותו כאן. אתה יכול ללמוד קוד זה כדי לקבל מושג כיצד 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: מחווני סריקה וחיבור

המסגרת מגדירה שני נוריות LED, GREENLED ו- BLUELED ומקצה אותן לשניים מסיכות GPIO של ה- ESP32. ה- GREENLED נדלק כאשר ה- ESP32 מחפש את הג'ויסטיק BLE. כאשר נמצא הג'ויסטיק ה- GREENLED כבוי וה- BLUELED נדלק כדי לציין שהחיבור נוצר ואתה מוכן לצאת לדרך. אם החיבור נותק, ה- BLUELED כבוי, ה- ESP32 מתאפס, ה- GREENLED נדלק והסריקה מתחילה מחדש. אם הג'ויסטיק לא נמצא בתוך שלושים שניות אז הסריקה מפסיקה וה- GREENLED נכבה. לאחר חמש שניות הסריקה מתחילה מחדש וה- GREENLED מופעל.

התוצאה הסופית היא ש- ESP32 ימשיך לסרוק את הג'ויסטיק עד שימצא אותו. לאחר חיבור החיבור, אם הוא אבד אז ESP32 יאפס את עצמו ויתחיל לסרוק שוב. ה- ESP32 מאופס מכיוון שאין פונקציות ESP32 SDK לאיפוס מחסנית Bluetooth להפעלה מחדש של הסריקה.

שלב 3: פענוח אירועי ג'ויסטיק ולחצן

אירוע התקשרות אחד ב- ESP32 מקבל שלוש חבילות נתונים שונות מהשרת עבור שלושת המאפיינים שהוגדרו לספק הודעות. חבילה אחת אורכה ארבעה בתים. שלושה מהבתים מכילים את מיקום ציר ה- X, מיקום ציר ה- Y ואת לחצני ההדק, אשר ממופים בביט. שתי החבילות האחרות הן שני בתים כל אחד ויש להם בתים בודדת המכילה את מצב הכפתור הממופה. המנות שהתקבלו מפוענחות ומועתקות למערך בתים בזיכרון. נתוני ציר הג'ויסטיק נכנסים לבתי הנתונים של X ו- Y וכל אחד מבתי הכפתורים הממופים של 3 סיביות מופנה לבייט המתאים לאותם לחצנים.

נוצרת משימת FreeRTOS לטיפול בנתונים המתקבלים מההודעות. משימה אחת לכפתורי הג'ויסטיק וההדק, משימה אחת לכפתורי A & B ומשימה אחת ללחצני C & D. כל אחת מהמשימות הללו מסומנת בבירור אזורים שבהם עליך להוסיף קוד כדי לעשות מה שאתה רוצה עם האירוע. חפש את ההערה "// ===== הוסף את הקוד שלך כאן =====" בגוף המשימה והוסף את הקוד לאחריו. לכל משימה יש הערה המציינת למה היא משמשת ומשתמש ב- Serial.println () להדפסת הודעה על האירוע שאירע.

להלן דוגמא ממשימת הכפתורים A/B;

void taskButtonAB (void *parameter) {uint8_t לחצנים;

// ===== אם המשימה דורשת אתחול חד פעמי, שים אותה כאן =====

בעוד (true) {// לוותר על המעבד, המתן לנתונים חדשים vTaskSuspend (NULL); // בדיוק התעוררנו, נתונים חדשים זמינים לחצנים = VrBoxData [VB_BTNAB]; Serial.printf ("לחצני A/B: %02X / n", כפתורים); אם (לחצנים & VB_BUTTON_A) {// כפתור A נלחץ או מוחזק Serial.println ("כפתור A"); // ===== הוסף את הקוד שלך כאן =====}

אם (לחצנים & VB_BUTTON_B)

{// כפתור B נלחץ או מוחזק Serial.println ("כפתור B").

// ===== הוסף את הקוד שלך כאן =====

}} // עבור} // taskButtonAB

שלב 4: הפעלת תיבת VR: הג'ויסטיק

אם הג'ויסטיק נשאר במיקום המרכזי, לא נשלחות התראות ג'ויסטיק. לאחר העברת הג'ויסטיק למרכז, הודעת התראה עם נתוני ג'ויסטיק ונתוני לחצני ההפעלה נשלחת בערך כל 15 ms. כאשר הג'ויסטיק מועבר חזרה למרכז, הודעה על כך שהוא עבר למרכז לא נשלחת. במילים אחרות, הוא אומר לך שהג'ויסטיק זז ממרכז, אך לא שהוא עבר למרכז. התוצאה הסופית היא שאתה מקבל הודעות המצביעות על הג'ויסטיק זז לכיוון מרכז, אך לא שהגיע למרכז. מאוד מעצבן. שני לחצני ההדק כלולים עם נתוני הג'ויסטיק. לחיצה על אחד מכפתורי ההדק לאחר החזרת הג'ויסטיק למרכז תעדכן את מיקום הג'ויסטיק לאפס. למסגרת יש טיימר פסק זמן מובנה שמדמה אוטומטית הודעת התראה על ג'ויסטיק זמן קצר לאחר שכל הודעות ההתראה על לחצן הג'ויסטיק/ההדק מפסיקות להגיע. הטיימר מגדיר את הג'ויסטיק לאפס. לג'ויסטיק יש טווח של כ- +/- 25 בכל ציר.

שלב 5: הפעלת תיבת VR: לחצני הדק

כפתורי ההפעלה ישלחו הודעת התראה פעם אחת בעת לחיצה ושוב בעת שחרורה. הודעת ההתראה שנלחצה תציין את הלחצן שנלחץ. הודעת הודעת השחרור מציינת ששני הכפתורים משוחררים.

החזקת כפתור ההדק התחתון תמנע מהשרת לזהות שלחיצה על כפתור ההדק העליון. לחיצה על כפתור ההדק העליון ולחיצה על כפתור ההדק התחתון גורמת לשרת לשלוח הודעת התראה שלחיצה על כפתור ההדק התחתון (כפתור ההדק העליון יהיה אפס!). שחרור כפתור ההדק התחתון יגרום לשרת לשלוח הודעה על כפתור ההדק העליון ולחיצה על ההדק התחתון.

במילים אחרות, כפתור ההדק התחתון דומיננטי על כפתור ההדק העליון ויחליף אותו כאשר תלחץ על שניהם. עליך לקבוע כיצד לטפל במקרה של לחיצה על שני הכפתורים.

שלב 6: הפעלת תיבת VR: לחצני A/B

לחצני A ו- B מתנהגים כמו הג'ויסטיק ושולחים ללא הרף הודעות התראה בלחיצה ארוכה. ההודעות נעצרות כאשר הכפתור משתחרר. כפתורי A ו- B פועלים בדומה ללחצני ההדק בכך שכפתור A שולט על כפתור B בדיוק כמו כפתור ההדק התחתון שולט על כפתור ההדק העליון.

שלב 7: הפעלת תיבת VR: לחצני C/D

כפתורי C ו- D שולחים הודעת התראה פעם אחת כאשר לוחצים עליה ושוב כאשר משוחררים. אם הם נלחצים, לא נשלחות הודעות נוספות עד שהן משוחררות. לחיצה ממושכת על אחד מכפתורי C או D תמנע מהשרת לזהות פעילות בכפתור השני.

שלב 8: סיכום

פעולת הכפתורים היא לדעתי מעט מפגרת. המסגרת מספקת מקומות להפעיל את הקוד שלך כאשר לוחצים על כפתור. אם אתה גם צריך לזהות שחרור כפתורים, זה נשאר לך להבין כיצד לעשות.

זה לגמרי תלוי בך לקבוע מה אתה רוצה שכל כפתור יעשה ומה צריך להזיז את הג'ויסטיק. איך אתה מתמודד עם ההבדלים בטריגר, A & B ולחצני C & D תלוי בך.

חפש בקוד את ה-; taskJoyStick (), taskButtonAB (), taskButtonCD () פונקציות והוסף את הקוד שלך לאחר ההערה "// ===== הוסף את הקוד שלך =====".

אתה צריך עד ארבע פונקציות כדי לטפל בג'ויסטיק (קדימה, אחורה, ימין ושמאל) ועד שישה פונקציות לטיפול בכפתורים השונים. יישמו את כולם או בדיוק מה שאתם צריכים. הבחירה בידיים שלך.

אם אתה משתמש במסגרת זו. אשמח לצעוק על מה השתמשת בו ואם מצאת שזה קל לשימוש.

אם יש לך שאלות לגבי אופן הפעולה או שאתה זקוק לעזרה בהפעלתו, צור איתי קשר.

הקוד זמין ב- GitHub כאן.

תהנה.

מוּמלָץ: