פרוטוקולי תקשורת של Arduino
על ידי שימוש בפרוטוקולי תקשורת, אנו יכולים לשלוח ולקבל נתונים של כל חיישן ב- Arduino.
כמה חיישנים פשוטים כמו אינפרא אדום (IR) יכולים לתקשר ישירות עם Arduino אבל חלק מהחיישנים המורכבים כמו מודול Wi-Fi, מודול כרטיס SD וג'ירוסקופ לא יכולים לתקשר ישירות עם Arduino ללא כל פרוטוקולי תקשורת. לכן, זו הסיבה שהפרוטוקולים הללו הם חלק בלתי נפרד מתקשורת Arduino.
ל- Arduino יש מספר ציוד היקפי מחובר אליו; ביניהם ישנם שלושה ציוד תקשורת המשמש בלוחות Arduino.
פרוטוקולי תקשורת של Arduino
התקשורת בין מכשירים אלקטרוניים שונים כמו Arduino סטנדרטית בין שלושת הפרוטוקולים הללו; זה מאפשר למעצבים לתקשר בין מכשירים שונים בקלות ללא בעיות תאימות. העבודה של שלושת הפרוטוקולים האלה זהה מכיוון שהם משרתים את אותה מטרת תקשורת, אבל הם שונים ביישום בתוך מעגל. תיאור נוסף של פרוטוקולים אלה נדון להלן.
UART
UART ידוע בשם משדר מקלט אסינכרוני אוניברסלי. UART הוא פרוטוקול תקשורת טורית שמשמעותו סיביות נתונים מועברות בצורה רציפה אחת אחרי השנייה. להגדרת תקשורת UART אנחנו צריכים שני קווים. האחד הוא פין Tx (D1) של לוח Arduino והשני הוא פין Rx(D0) של לוח Arduino. Pin Tx מיועד להעברת נתונים למכשירים ופין Rx משמש לקבלת נתונים. ללוחות Arduino שונים יש פיני UART מרובים.
Pin Digital Arduino | Pin UART |
ד1 | Tx |
D0 | Rx |
כדי ליצור תקשורת טורית באמצעות יציאת UART, עלינו לחבר שני התקנים בתצורה המוצגת להלן:
ב-Arduino Uno, יציאה טורית אחת מוקדשת לתקשורת המכונה בדרך כלל יציאת USB. כפי שהשם מרמז על אוטובוס טורי אוניברסלי, כך שמדובר ביציאה טורית. באמצעות יציאת ה-USB Arduino יכול ליצור תקשורת עם מחשבים. יציאת ה-USB מחוברת לפינים המשולבים Tx ו-Rx של Arduino. באמצעות הפינים הללו, אנו יכולים לחבר כל חומרה חיצונית מלבד מחשב דרך USB. Arduino IDE מספק ספריית SoftwareSerial (SoftwareSerial.h) מה שמאפשר למשתמשים להשתמש בפיני GPIO כסיכות Tx Serial ו-Rx.
- UART פשוט לתפעול עם Arduino
- UART לא צריך שום אות שעון
- יש להגדיר את קצב ה-baud בתוך מגבלת 10% מהמכשירים המתקשרים כדי למנוע אובדן נתונים
- התקנים מרובים עם Arduino בתצורת Master Slave אינם אפשריים עם UART
- UART הוא חצי דופלקס, מה שאומר שמכשירים לא יכולים לשדר ולקבל נתונים בו-זמנית
- רק שני מכשירים בו-זמנית יכולים לתקשר עם פרוטוקול UART
ממשק היקפי טורי (SPI)
SPI הוא ראשי תיבות של ממשק היקפי טורי שתוכנן במיוחד עבור מיקרו-בקרים לתקשר איתם. SPI פועל במצב דופלקס מלא, כלומר SPI יכול לשלוח ולקבל נתונים בו זמנית. בהשוואה ל-UART ו-I2C זהו ציוד התקשורת ההיקפי המהיר ביותר בלוחות Arduino. הוא נפוץ בשימוש כאשר נדרש קצב נתונים גבוה כמו תצוגת LCD ויישומי כרטיסי Micro SD.
פינים דיגיטליים SPI ב- Arduino מוגדרים מראש. עבור Arduino Uno SPI תצורת פינים היא כדלקמן:
קו SPI | GPIO | פין כותרת ICSP |
SCK | 13 | 3 |
מיסו | 12 | 1 |
עָשָׁן | אחד עשר | 4 |
SS | 10 | – |
- MOSI מייצג Master Out Slave In , MOSI הוא קו העברת נתונים עבור מאסטר לעבד.
- SCK הוא א קו שעון המגדיר את מהירות ההעברה ומאפייני ההתחלה.
- SS מייצג בחר עבדים ; קו SS מאפשר למאסטר לבחור התקן Slave מסוים כאשר הוא פועל בתצורת מספר Slave.
- MISO מייצג מאסטר ב-Slave Out ; MISO הוא קו תמסורת Slave to Master עבור נתונים.
אחד הדגשים העיקריים של פרוטוקול SPI הוא תצורת Master-Slave. באמצעות SPI התקן אחד ניתן להגדיר כמאסטר כדי לשלוט בכמה התקני Slave. מאסטר בשליטה מלאה על התקני Slave באמצעות פרוטוקול SPI.
SPI הוא פרוטוקול סינכרוני, מה שאומר שהתקשורת מקושרת לאות שעון משותף בין מאסטר ל-Slave. SPI יכול לשלוט במכשירים מרובים כ-Slave על קו שידור וקבלה בודד. כל העבדים מחוברים למאסטר באמצעות משותף מיסו לקבל קו יחד עם עָשָׁן קו שידור משותף אחד. SCK הוא גם קו השעון הנפוץ בין מכשירי מאסטר ו-Slave. ההבדל היחיד במכשירי עבד הוא שכל מכשיר עבד נשלט באמצעות נפרד SS בחר שורה. משמעות הדבר היא שכל Slave צריך פין GPIO נוסף מלוח Arduino אשר ישמש בתור בחירה עבור התקן Slave המסוים.
כמה מהדגשים העיקריים של פרוטוקול SPI מפורטים להלן:
- SPI הוא הפרוטוקול המהיר ביותר מ-I2C ו-UART
- אין צורך בסיביות התחלה ועצירה כמו ב-UART מה שאומר שהעברת נתונים רציפה אפשרית
- ניתן לטפל בקלות ב-Slave בגלל תצורת Master Slave פשוטה
- עבור כל Slave סיכה נוספת תפוסה על לוח Arduino. למעשה, מאסטר אחד יכול לשלוט ב-4 מכשירי Slave
- אישור נתונים חסר כמו בשימוש ב-UART
- תצורת מספר מאסטר אינה אפשרית
פרוטוקול תקשורת I2C
Inter Integrated Circuit (I2C) הוא פרוטוקול תקשורת נוסף המשמש את לוחות Arduino. I2C הוא הפרוטוקול הקשה והמסובך ביותר ליישום עם Arduino ומכשירים אחרים. למרות הסיבוך שלו, הוא מציע תכונות מרובות שחסרות בפרוטוקולים אחרים כמו מספר רב של תצורות מאסטר ומספר עבדים. I2C מאפשר חיבור של עד 128 מכשירים ללוח Arduino הראשי. זה אפשרי רק בגלל ש-I2C חולק חוט יחיד בין כל מכשירי ה-Slave. I2C ב-Arduino משתמש במערכת כתובות, כלומר לפני שליחת נתונים למכשיר Slave Arduino חייב לבחור תחילה במכשיר Slave על ידי שליחת כתובת ייחודית. I2C משתמש רק בשני חוטים שמפחיתים את ספירת הפינים הכוללת של Arduino, אבל הצד הרע שלו הוא I2C איטי יותר מפרוטוקול SPI.
סיכה אנלוגית של ארדואינו | פין I2C |
A4 | SDA |
A5 | SCL |
ברמת החומרה I2C מוגבל לשני חוטים בלבד, אחד עבור קו נתונים המכונה SDA (נתונים סדרתיים) והשני עבור קו השעון SCL (שעון סדרתי). במצב סרק הן SDA והן SCL נמשכות גבוה. כאשר יש צורך להעביר נתונים קווים אלו נמשכים נמוך באמצעות מעגלי MOSFET. שימוש ב-I2C בפרויקטים חובה להשתמש נגדי pull up בדרך כלל בערך של 4.7Kohm. נגדי משיכה אלו מבטיחים שגם קווי SDA וגם קווי SCL יישארו גבוהים בהתחלת הסרק שלהם.
כמה מהדגשים העיקריים של פרוטוקולי I2C הם:
- מספר הסיכות הנדרש נמוך מאוד
- ניתן לחבר התקני Master Slaves מרובים
- משתמש רק ב-2 חוטים
- המהירות איטית יותר בהשוואה ל-SPI עקב נגדים משיכה
- נגדים צריכים יותר מקום במעגל
- עלייה במורכבות הפרויקט עם עלייה במספר המכשירים
השוואה בין UART לעומת I2C לעומת SPI
נוהל | UART | SPI | 2C |
מְהִירוּת | הכי איטי | הכי מהיר | מהיר יותר מ-UART |
מספר מכשירים | עלה ל 2 | 4 מכשירים | עד 128 מכשירים |
נדרשים חוטים | 2(Tx,Rx) | 4(SCK, SMOKE,EYES,SS) | 2(SDA,SCL) |
מצב דופלקס | מצב דופלקס מלא | מצב דופלקס מלא | חצי דופלקס |
מספר עבדים מאסטר אפשרי | יחיד מאסטר-שפחה יחידה | מאסטר יחיד - עבדים מרובים | מאסטרים מרובים - עבדים מרובים |
מוּרכָּבוּת | פָּשׁוּט | יכול לשלוט בקלות במספר מכשירים | מורכב עם עלייה במכשירים |
קצת הכרה | לא | לא | כן |
סיכום
במאמר זה, כיסינו השוואה מקיפה של כל שלושת הפרוטוקולים UART, SPI ו-I2C המשמשים ב- Arduino. הכרת כל הפרוטוקולים חשובה מכיוון שהיא נותנת הזדמנויות אינסופיות לשילוב התקנים מרובים. הבנת כל ציוד התקשורת ההיקפי תחסוך זמן ותעזור לייעל פרויקטים לפי הפרוטוקול הנכון.