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

תקשורת סדרתית של ארדואינו: 5 שלבים
תקשורת סדרתית של ארדואינו: 5 שלבים

וִידֵאוֹ: תקשורת סדרתית של ארדואינו: 5 שלבים

וִידֵאוֹ: תקשורת סדרתית של ארדואינו: 5 שלבים
וִידֵאוֹ: התקנת ארדואינו 2024, נוֹבֶמבֶּר
Anonim
ארדואינו תקשורת סדרתית
ארדואינו תקשורת סדרתית

פרויקטים רבים של Arduino מסתמכים על העברת נתונים בין כמה Arduinos.

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

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

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

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

אספקה

  • 2 ארדואינים

    מומלץ מאוד להשתמש ב- Arduinos שיש להם מספר UARTs חומרה (כלומר Arduino Mega)

  • חוט חיבור
  • התקן את SerialTransfer.h

    זמין באמצעות מנהל הספריות של Arduino IDE

שלב 1: חיבורים פיזיים

קשרים פיזיים
קשרים פיזיים

בעת שימוש בתקשורת סדרתית, יש לזכור כמה נקודות חיווט:

  • וודא שכל השטח מחובר!
  • יש לחבר את סיכת Arduino TX (Transmit) לסיכה RX (קבלה) של Arduino האחרת

שלב 2: אופן השימוש בספרייה

אופן השימוש בספרייה
אופן השימוש בספרייה

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

SerialTransfer.txBuff

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

SerialTransfer.rxBuff

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

SerialTransfer.bytesRead

מספר בתים המטען שהתקבל על ידי ה- Arduino האחרים ומאוחסן ב- SerialTransfer.rxBuff

SerialTransfer.begin (Stream & _port)

מאתחל מופע של הכיתה של הספרייה. אתה יכול להעביר כל אובייקט מחלקתי "סידורי" כפרמטר - אפילו אובייקטים ברמה "SoftwareSerial"!

SerialTransfer.sendData (const uint16_t & messageLen)

זה גורם ל- Arduino שלך לשלוח מספר בייטים "messageLen" במאגר השידור לארדואינו השני. לדוגמה, אם "messageLen" הוא 4, ארבעת הבייטים הראשונים של SerialTransfer.txBuff יישלחו באמצעות סדרתי ל- Arduino השני.

SerialTransfer.available ()

זה גורם לניתוח Arduino שלך לנתונים סדרתיים שהתקבלו מהארדואינו השני. אם פונקציה זו מחזירה את ה"אמיתי "הבולאני, פירוש הדבר שחבילה חדשה נותחה בהצלחה ונתוני החבילה שהתקבלו נשמרים/זמינים ב- SerialTransfer.rxBuff.

SerialTransfer.txObj (const T & val, const uint16_t & len, const uint16_t & index = 0)

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

SerialTransfer.rxObj (const T & val, const uint16_t & len, const uint16_t & index = 0)

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

הערה:

הדרך הקלה ביותר להעברת נתונים היא להגדיר תחילה מבנה המכיל את כל הנתונים שברצונך לשלוח. Arduino בקצה המקבל צריך להיות בעל מבנה זהה.

שלב 3: העברת נתונים בסיסיים

הסקיצה הבאה משדרת הן את ערך ה- ADC של analogRead (0) והן את הערך של analogRead (0) המומר למתח ל- Arduino #2.

העלה את הסקיצה הבאה ל- Arduino #1:

#כלול "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; מתח צף; } נתונים; הגדרת חלל () {Serial.begin (115200); סדרתי 1. התחל (115200); myTransfer.begin (Serial1); } לולאת חלל () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (נתונים, גודל (נתונים)); myTransfer.sendData (sizeof (נתונים)); עיכוב (100); }

שלב 4: קבלת נתונים בסיסיים

הקוד הבא מדפיס את ערכי ה- ADC והמתח המתקבלים מארדואינו מס '1.

העלה את הקוד הבא ל- Arduino #2:

#כלול "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; מתח צף; } נתונים; הגדרת חלל () {Serial.begin (115200); סדרתי 1. התחל (115200); myTransfer.begin (Serial1); } לולאת void () {if (myTransfer.available ()) {myTransfer.rxObj (data, sizeof (data)); Serial.print (data.adcVal); Serial.print (''); Serial.println (data.voltage); Serial.println (); } אחרת אם (myTransfer.status <0) {Serial.print ("ERROR:"); if (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); אחרת אם (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); אחרת אם (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

שלב 5: בדיקה

לאחר העלאת שני המערכונים לארדואינים המתאימים להם, תוכל להשתמש בצג הטורי ב- Arduino #2 כדי לוודא שאתה מקבל נתונים מארדואינו מספר 1!

מוּמלָץ: