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

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

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

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

מהי תקשורת טורית?

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

אפילו עצם היכולת להעלות סקיצות ללוח Arduino האהוב עליך משתמשת בתקשורת טורית דרך USB.

פרוטוקולי תקשורת טורית ב- Arduino

לוחות Arduino הם צדדיים להפליא ויכולים לתקשר עם מגוון רחב של מכשירים. הם תומכים בארבעה פרוטוקולי תקשורת טוריים: Soft Serial, SPI (ממשק היקפי טורי), UART סטנדרטי (משדר מקלט אסינכרוני אוניברסלי) ו-I2C (מעגל משולב). לפרטים נוספים, עיין במדריך המקיף שלנו בנושא

instagram viewer
כיצד פועלת התקשורת הטורית של UART, SPI ו-I2C.

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

SPI (ממשק היקפי טורי)

SPI הוא פרוטוקול תקשורת טורית סינכרוני המאפשר תקשורת במהירות גבוהה בין מיקרו-בקרים והתקנים היקפיים. פרוטוקול זה דורש ארבעה חוטים לתקשורת: SCK (שעון סדרתי), MOSI (Master Out Slave In), מיסו (Master In Slave Out), ו SS (בחירת עבדים).

ה SPI.h הספרייה שימושית מאוד עבור סוג זה של תקשורת וחייבת להיכלל בראש הסקיצה שלך.

#לִכלוֹל

להלן סיכות SPI בלוח Arduino Uno:

פוּנקצִיָה

מספר PIN (דיגיטלי)

מספר PIN (כותרת ICSP)

MOS

11

4

מיסו

12

1

SCK

13

3

SS

10 (ברירת מחדל)

1 (אלטרנטיבי)

לאחר אתחול התקשורת הטורית, יהיה עליך להגדיר את פיני התקשורת.

בָּטֵללהכין(){
SPI.התחל(115200);
// הגדר מצבי סיכה עבור SS, MOSI, MISO ו- SCK
pinMode(SS, תְפוּקָה);
pinMode(MOSI, תְפוּקָה);
pinMode(מיסו, קֶלֶט);
pinMode(SCK, תְפוּקָה);

// הגדר את פין בחירת עבד (SS) גבוה כדי להשבית את התקן העבד
digitalWrite(SS, גָבוֹהַ);
}

אות ה-SS משמש כדי לומר למכשיר העבד מתי מועברים נתונים.

// בחר את העבד
digitalWrite(SS, נָמוּך);

// שלח נתונים למכשיר העבד
SPI.לְהַעֲבִיר(נתונים);

// בטל את בחירת התקן העבד
digitalWrite(SS, גָבוֹהַ);

הנה איך לחבר שני לוחות Arduino באמצעות SPI.

קוד ללוח הראשי:

#לִכלוֹל
constint slaveSelectPin = 10;
בָּטֵללהכין(){
SPI.התחל(115200);
pinMode(slaveSelectPin, תְפוּקָה);
}

בָּטֵללוּלָאָה(){
digitalWrite(slaveSelectPin, נָמוּך);
SPI.לְהַעֲבִיר('ח');
digitalWrite(slaveSelectPin, גָבוֹהַ);
לְעַכֵּב(1000);
}

קוד ללוח העבדים:

#לִכלוֹל
constint slaveSelectPin = 10;
בָּטֵללהכין(){
SPI.התחל(115200);
pinMode(slaveSelectPin, תְפוּקָה);
}

בָּטֵללוּלָאָה(){
אם (digitalRead(slaveSelectPin) == נָמוּך) {
לְהַשְׁחִיר receiveData = SPI.לְהַעֲבִיר('ל');
סידורי.println(receivedData);
}
}

ודא שהמכשירים שלך חולקים בסיס משותף לתצורה נכונה.

UART (משדר מקלט אסינכרוני אוניברסלי)

UART הוא פרוטוקול תקשורת טורית אסינכרוני המאפשר תקשורת בין מכשירים באמצעות שני חוטים בלבד: TX (שידור) ו-RX (קבלה). UART משמש בדרך כלל לתקשורת עם מכשירים כגון מודולי GPS, מודולי Bluetooth ומיקרו-בקרים אחרים. כל לוח Arduino מגיע מצויד ביציאה אחת לפחות עבור UART.

פיני UART על לוחות Arduino פופולריים כוללים:

גלשן

סיכות סדרתיות

סיכות סדרתי1

סיכות סדרתי 2

סיכות סדרתי3

אונו, ננו, מיני

0 (RX), 1 (TX)

לא

לא

לא

מגה

0 (RX), 1 (TX)

19 (RX), 18 (TX)

17 (RX), 16 (TX)

15 (RX), 14 (TX)

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

ראשית, חבר את הלוחות שלך כך:

לאחר מכן השתמש בקוד זה עבור לוח השולח:

בָּטֵללהכין(){
סידורי.התחל(9600);
}

בָּטֵללוּלָאָה(){
// שלח הודעה על סדרתי כל שנייה
סידורי.println("שלום מלוח השולח!");
לְעַכֵּב(1000);
}

קוד ללוח המקלט:

בָּטֵללהכין(){
סידורי.התחל(9600);
}

בָּטֵללוּלָאָה(){
// בדוק אם יש נתונים נכנסים
אם (סידורי.זמין() > 0) {
// קרא את הנתונים הנכנסים והדפיס אותם לצג הטורי
חוּט incomingData = סידורי.readString();
סידורי.println(IncomingData);
}
}

ה-Arduino Uno פועל ברמה לוגית של 5V בעוד שיציאת RS232 של מחשב משתמשת ברמה לוגית +/-12V.

חיבור ישיר של Arduino Uno ליציאת RS232 יכול ויגרום נזק ללוח שלך.

I2C (מעגל משולב)

I2C הוא פרוטוקול תקשורת טורית סינכרוני המאפשר תקשורת בין מכשירים מרובים באמצעות שני חוטים בלבד: SDA (Serial Data) ו-SCL (Serial Clock). I2C משמש בדרך כלל לתקשורת עם חיישנים, EEPROMs והתקנים אחרים שצריכים להעביר נתונים למרחקים קצרים.

פינים I2C על Arduino Uno הם SDA (A4) ו SCL (A5).

ניצור תוכנית פשוטה ליצירת חיבור בין שני לוחות Arduino באמצעות תקשורת I2C. אבל ראשית, חבר את הלוחות שלך כך:

קוד ללוח הראשי:

#לִכלוֹל
בָּטֵללהכין(){
חוּט.התחל(); // הצטרף לאוטובוס I2C כמאסטר
סידורי.התחל(9600);
}

בָּטֵללוּלָאָה(){
חוּט.להתחיל שידור(9); // שדר למכשיר עבד עם כתובת 9
חוּט.לִכתוֹב('א'); // שולח 'a' בייט למכשיר עבד
חוּט.endTransmission(); // להפסיק לשדר

לְעַכֵּב(500);
}

קוד ללוח העבדים:

#לִכלוֹל
בָּטֵללהכין(){
חוּט.התחל(9); // הצטרף לאוטובוס I2C כעבד עם כתובת 9
חוּט.על קבלה(receiveEvent);
סידורי.התחל(9600);
}

בָּטֵללוּלָאָה(){
לְעַכֵּב(100);
}

בָּטֵלreceiveEvent(int בתים){
בזמן(חוּט.זמין()) { // לולאה דרך כל הבתים שהתקבלו
לְהַשְׁחִיר receiveByte = חוּט.לקרוא(); // קרא כל בייט שהתקבל
סידורי.println(receivedByte); // הדפס בתים שהתקבלו על צג טורי
}
}

מה זה SoftwareSerial?

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

כדי להגדיר את SoftwareSerial, תחילה כלול את ספריית SoftwareSerial בסקיצה.

#לִכלוֹל

לאחר מכן צור מופע של האובייקט SoftwareSerial על ידי ציון ה- RX ו TX סיכות שישמשו לתקשורת.

SoftwareSerialmySerial(2, 3); // פינים RX, TX

להלן קוד לדוגמה עבור Arduino המדגים את השימוש ב-SoftwareSerial:

#לִכלוֹל
SoftwareSerialmySerial(2, 3); // פינים RX, TX
בָּטֵללהכין(){
סידורי.התחל(9600); // התחל את סדרת החומרה
mySerial.התחל(9600); // התחל סדרתי רכה
}

בָּטֵללוּלָאָה(){
אם (mySerial.זמין()) {
סידורי.לִכתוֹב(mySerial.לקרוא()); // שלח נתונים שהתקבלו לסידורי החומרה
}
אם (סידורי.זמין()) {
mySerial.לִכתוֹב(סידורי.לקרוא()); // שלח נתונים מסדרת חומרה לסדרה רכה
}
}

הספרייה הסדרתית

הספרייה הטורית היא כלי רב עוצמה ב- Arduino המאפשר תקשורת בין המיקרו-בקר למחשב או התקנים אחרים באמצעות חיבור טורי. כמה פונקציות נפוצות כוללות:

פוּנקצִיָה

תיאור

Serial.begin (מהירות)

מאתחל תקשורת טורית עם קצב נתונים מוגדר.

Serial.print (נתונים)

שולח נתונים ליציאה הטורית לשידור כטקסט ASCII.

Serial.write (נתונים)

שולח נתונים בינאריים גולמיים דרך היציאה הטורית.

Serial.available()

מחזירה את מספר הבתים הזמינים לקריאה מהמאגר הטורי.

Serial.flush()

ממתין לנתונים סדרתיים יוצאים להשלמת השידור לפני המשך.

Serial.read()

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

קצב שידור ופורמט נתונים טוריים

קצב ה-baud מתייחס למהירות שבה נתונים מועברים בחיבור הטורי. הוא מייצג את מספר הביטים המועברים בשנייה. יש להגדיר את קצב ההעברה זהה הן במכשירי השולח והן במכשירי המקלט, אחרת התקשורת עלולה להיות משובשת או לא לעבוד כלל. תעריפי הבונד הנפוצים עבור Arduino כוללים 9600, 19200, 38400 ו-115200.

פורמט נתונים טוריים מתייחס למבנה הנתונים הנשלחים דרך החיבור הטורי. ישנם שלושה מרכיבים עיקריים לפורמט נתונים סדרתי: סיביות התחלה, סיביות נתונים וסיביות סטופ.

  • פיסות מידע: מספר הסיביות המשמשות לייצוג בית נתונים בודד.
  • שִׁוּוּי: ביט אופציונלי המשמש לבדיקת שגיאות. ניתן להגדיר אותו ללא זוגיות, זוגית או זוגית, בהתאם לדרישות ערוץ התקשורת.
  • Stop Bits: מספר הסיביות המשמשות לאותת סוף בתית נתונים.

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

בָּטֵללהכין(){
// הגדר תקשורת טורית עם קצב העברת נתונים של 9600, 8 סיביות נתונים, ללא זוגיות וסיבית עצור אחת
סידורי.התחל(9600, SERIAL_8N1);
}

כאן, SERIAL_8N1 מייצג את פורמט הנתונים עם 8 סיביות נתונים, ללא זוגיות, ו 1 עצור קצת. אפשרויות נוספות כגון SERIAL_7E1, SERIAL_8O2, וכו', ניתן להשתמש בהתאם לדרישות הספציפיות של הפרויקט.

שיחה סדרתית

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