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

תקשורת נתונים ישירה ESP8266: 3 שלבים
תקשורת נתונים ישירה ESP8266: 3 שלבים

וִידֵאוֹ: תקשורת נתונים ישירה ESP8266: 3 שלבים

וִידֵאוֹ: תקשורת נתונים ישירה ESP8266: 3 שלבים
וִידֵאוֹ: Home Assistant - חבר את קלטת הכתובת WS2812B דרך ESP8266 עם קושחת WLED 2024, יולי
Anonim
תקשורת נתונים ישירה ESP8266
תקשורת נתונים ישירה ESP8266

מבוא

בזמן שעשיתי כמה פרויקטים עם מודולי Arduinos ו- nRF24l01 תהיתי אם אוכל לחסוך קצת מאמץ באמצעות מודול ESP8266 במקום זאת. היתרון במודול ESP8266 הוא בכך שהוא מכיל בקר מיקרו על הלוח, כך שאין צורך בלוח Arduino נוסף. בנוסף גודל הזיכרון של ה- ESP8266 גדול בהרבה ובנוגע למהירות ה- ESP8266 פועל במהירות של 160 מגה -הרץ במקום 16 מגה -הרץ של הארדואינו. כמובן שיש כמה צדדים שליליים.

ה- ESP8266 פועל על 3.3V בלבד, בעל פחות סיכות וחסר את הכניסות האנלוגיות הנחמדות שיש ל- Arduino (יש לו אחת, אך רק עבור 1.0V ולא 3.3V). בנוסף ישנן דוגמאות קוד רבות נוספות ל- Arduino + nRF24l01, וישנן עבור ESP8266 במיוחד בכל הנוגע להעברת נתונים ישירה.

אז עם פרויקט בראש, בדקתי את הנושא של העברת נתונים מהירה וקלת משקל בין שני ESP8266 ללא כל הדברים WWW ו-

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

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

שלב 1: גבולות ורקעים (TCP נגד UDP)

כדי להגיע לשם, יש להבהיר כמה גבולות בהשוואה ל- nRF24l01.

כדי להשתמש ב- ESP8266 בתוך סביבת Arduino, הספרייה הבסיסית לשימוש היא ה- ESP8266WiFi.h. יתכן שהדוגמאות שונות, אך רוב הדוגמאות משתמשות ב. בעת שימוש זה, עליך להביא את התקשורת שלך לרמת WiFi.

לכן, כדי לתקשר צריך להיות לפחות נקודת גישה (AP) / שרת ולקוח. ה- AP מספק את שם הרשת וכתובות ה- IP והלקוח יתחבר לשרת זה.

אז בהשוואה ל- nRF24l01, כאשר הקוד משני קצותיו פחות או יותר זהה (למעט ערוצי השידור) הקוד של ESP8266 שונה מהותית, מכיוון שהאחד מוגדר כ- AP והשני כלקוח.

הנושא הבא הוא שבמקום לשלוח כמה בייטים ל- nRF24l01, יש להקפיד על פרוטוקולי העברה של ESP8266.

ישנם שני פרוטוקולים נפוצים: TCP ו- UDP.

TCP (Protocol Control Protocol) הוא פרוטוקול המאפשר העברה ללא הפסד בין שרת ללקוח. הפרוטוקול כולל "לחיצות ידיים" (הרבה דגלים ואנקולוגים שנשלחו בין שני הצדדים) ומספור מנות וגילוי לזיהוי ושידור חוזר של מנות שאבדו. בנוסף, באמצעות כל לחיצות הידיים הללו הפרוטוקול מונע אובדן נתונים עקב מנות רבות שנשלחות בו זמנית ברשת. מנות נתונים ממתינות עד לקבלתן.

ה- UDP (פרוטוקול User Datagram) חסר את כל לחיצות הידיים, מספור מנות ושידור חוזר. התקורה שלה לכן קטנה יותר ואין צורך בכל לחיצות הידיים כדי לשמור על חיבור. UDP משלב כמה זיהוי שגיאות בסיסי, אך ללא תיקון (החבילה הפגומה נזרקה). הנתונים נשלחים, ללא ידיעה אם הצד המקבל חופשי לקבל את הנתונים. במקביל, מספר מנות יכולות להתנגש, מכיוון שכל צד שולח את הנתונים בכל פעם שהוא נחוץ. על ידי השמטת כל לחיצות הידיים, קיימת תכונה נוספת נחמדה של UDP הנקראת "שידור רב" ו"שידור ". במקרה "רב שידור" מנות נתונים נשלחות לקבוצה מוגדרת מראש של חברים, ב"שידור "מנות נתונים נשלחות לכל החברים המחוברים. זה מקטין את העברת הנתונים במידה ניכרת במקרה של זרמים שיתקבלו על ידי מספר חברים (למשל על ידי שליחת הזנת וידאו למספר מקלטים או על ידי שליחת הזמן הנוכחי למספר מכשירים מחוברים).

יש כמה סרטונים טובים ביוטיוב שמסבירים את זה אפילו טוב יותר.

לכן בעת שליחת נתונים, חשוב לדעת את הצרכים שלך:

  • נתונים לא פגומים, ניהול מספר עמיתים בלחיצות יד → TCP
  • נתונים בזמן אמת, חיבור מהיר → UDP

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

הסקיצות להלן מכילות TCP ו- UDP במשותף לכך שהן:

  • אינם תלויים בכל רשת WiFi קיימת. אז זה יעבוד בכל מקום רחוק מהאינטרנט ומהנתבים המחוברים.
  • שולחים נתוני ASCII להדפסה באמצעות הצג הטורי.
  • שולחים נתונים המתקבלים על ידי הפונקציה millis (), לניתוח מהירות השידור.
  • אינם נבדקים עבור מספר לקוחות (בשל החומרה להתקנת הרשת כרגע)

שלב 2: חומרה

חוּמרָה
חוּמרָה
חוּמרָה
חוּמרָה
חוּמרָה
חוּמרָה
חוּמרָה
חוּמרָה

כדי לבדוק את כל ההתקנה השתמשתי בשני מודולים ESP8266. מודול אחד הוא מתאם ESP-01 + USB-to-UART. המודול הנוסף הוא מודול מבוסס ESP-12 הכולל חיבור USB, ווסת מתח וכמה דברים מהנים כמו מתגים, LDR ו- LED רב צבעים.

היה צריך לשנות מעט את מודול ה- USB-to-UART ל- ESP-01 כדי שיוכל להשתמש בו כמתכנת (שוב Youtube מאת Csongor Varga).

על מנת להריץ את הסקיצות, עליך להתקין את ספריות ESP8266 (כמתואר במקומות רבים באינטרנט). בשני המקרים (TCP ו- UDP) יש שרטוט שרת ולקוח כל אחד. איזו מערכון נטען לאיזה מודול לא משנה.

הכרות

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

שלב 3: הסקיצות

הקוד מורכב משתי סקיצות כל אחת (כפי שהוסבר), שרטוט שרת ושרטוט לקוח, עבור TCP ו- UDP כל אחת.

מוּמלָץ: