SPI (ממשק היקפי טורי) ב-ESP32 באמצעות Arduino IDE

Spi Mmsq Hyqpy Twry B Esp32 B Mz Wt Arduino Ide



ללוחות ESP32 יש תמיכה במספר פרוטוקולי תקשורת. פרוטוקולים אלה כוללים USART סדרתי, I2C (IIC) ו-SPI. יחד עם לוחות ESP32 אלו ישנם גם פרוטוקולי תקשורת אלחוטיים זמינים כגון WiFi, Bluetooth כפול, ESP-Now, LoRa ועוד רבים. היום נתמקד בפרוטוקול ESP32 SPI (Serial Peripheral interface).

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

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







תקשורת SPI תומכת בתצורת עבד מאסטר יש תמיד א אחד לִשְׁלוֹט השולט במספר עבדים. זה דופלקס מלא תקשורת כך שניתן להחליף נתונים בו-זמנית מאדון לעבד ומעבד למאסטר.




תקשורת SPI בצורכי ESP32 ארבע סיכות שונות לשידור ולקבל נתונים למכשירים. להלן ארבע הסיכות הללו:



  1. SCK: קו השעון קובע את מהירות השידור
  2. מיסו: מאסטר בעבד החוצה הוא סיכת שידור מעבד לאדון
  3. עָשָׁן: Master out slave in הוא קו תמסורת עבור נתוני אב לעבד
  4. SS: קו בחירת עבדים עוזר ל-ESP32 לבחור עבד מסוים ולשדר או לקבל נתונים מאותו עבד

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





    • מיסו מוחלף ב SDO (נתונים סדרתיים יצאו)
    • עָשָׁן מוחלף ב SDI (נתונים סדרתיים)

פיני SPI ב-ESP32

לוח ESP32 מגיע עם 4 ציוד היקפי מסוג SPI שונים המשולבים עם המיקרו-בקר שלו.

    • SPI0: לתקשורת זיכרון פנימית בלבד- לא ניתן להשתמש בהתקני SPI חיצוניים
    • SPI1: לתקשורת זיכרון פנימית בלבד- לא ניתן להשתמש בהתקני SPI חיצוניים
    • SPI2: (HSPI) יש אותות אוטובוס עצמאיים. כל אוטובוס יכול לגזור 3 מכשירי עבדים
    • SPI3: אות האוטובוס (VSPI) הוא בלתי תלוי. כל אוטובוס יכול לגזור 3 מכשירי עבדים

רוב לוחות ה-ESP32 מגיעים עם פיני SPI שהוקצו מראש הן עבור SPI2 והן עבור SPI3. עם זאת, אם לא הוקצה נוכל תמיד להקצות סיכות SPI בקוד. להלן פיני SPI שנמצאים ברוב לוח ה-ESP32 אשר מוקצים מראש:



ממשק SPI עָשָׁן מיסו SCLK CS
VSPI GPIO 23 GPIO 19 GPIO 18 GPIO 5
HSPI GPIO 13 GPIO 12 GPIO 14 GPIO 15



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

כיצד למצוא פיני SPI ברירת מחדל של ESP32

הקוד שנכתב להלן יעזור למצוא את פיני ברירת המחדל של SPI בלוח ESP32. פתח את Arduino IDE חבר את ESP32 למחשב, בחר את היציאה הנכונה והעלה את הקוד. לאחר מכן המתן לפלט. זהו זה! ככה זה פשוט

קוד למציאת פיני SPI ברירת מחדל של ESP32

הקוד המופיע להלן ידפיס את פיני ברירת המחדל של ESP32 SPI על הצג הטורי.

הגדרה בטלה ( ) {
Serial.begin ( 115200 ) ;
Serial.print ( 'PIN MOSI GPIO: ' ) ;
Serial.println ( עָשָׁן ) ;
Serial.print ( 'פין MISO GPIO: ' ) ;
Serial.println ( מיסו ) ;
Serial.print ( 'SCK GPIO Pin: ' ) ;
Serial.println ( SCK ) ;
Serial.print ( 'Pin SS GPIO: ' ) ;
Serial.println ( SS ) ;
}
לולאה ריקה ( ) {
}


הקוד מתחיל בהגדרת קצב הביאוד וממשיך בקריאה לפין ברירת המחדל של GPIO עבור פרוטוקול תקשורת ESP32 SPI.

תְפוּקָה

כאן במקרה שלנו הצג הטורי הציג את הפין 23, 19, 18 ו-5 עבור MOSI, MISO, SCK ו-SS בהתאמה.

כיצד להשתמש בסיכות SPI מותאמות אישית ב-ESP32

הודות לתכונות ריבוי ESP32 ניתן להגדיר כל פין של לוח ESP32 כ-UART, I2C, SPI ו-PWM. צריך רק להקצות אותם בקוד. כעת נגדיר פיני SPI חדשים ונדפיס אותם על הצג הטורי לאישור.

הקלד את הקוד שניתן להלן בעורך Arduino IDE.

#include
הגדרה בטלה ( ) {
Serial.begin ( 115200 ) ;
Serial.print ( 'PIN של MOSI GPIO המוגדר כברירת מחדל:' ) ;
Serial.println ( עָשָׁן ) ;
Serial.print ( 'PIN של MISO GPIO המוגדר כברירת מחדל:' ) ;
Serial.println ( מיסו ) ;
Serial.print ( 'Pin SCK GPIO ברירת מחדל:' ) ;
Serial.println ( SCK ) ;
Serial.print ( 'Pin SS GPIO ברירת מחדל:' ) ;
Serial.println ( SS ) ;
#define SCK 25
#define MISO 32
#define MOSI 26
#define CS 33
/* Library_Name חיישן_שם ( CS, MOSI, MISO, SCK ) ; // להתקשר לסיכות SPI חדשות */
Serial.print ( 'PIN של MOSI NEW GPIO: ' ) ;
Serial.println ( עָשָׁן ) ;
Serial.print ( 'פין MISO NEW GPIO: ' ) ;
Serial.println ( מיסו ) ;
Serial.print ( 'SCK NEW GPIO Pin: ' ) ;
Serial.println ( SCK ) ;
Serial.print ( 'PIN של SS NEW GPIO: ' ) ;
Serial.println ( SS ) ;
}
לולאה ריקה ( ) {
}


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

תְפוּקָה

הפלט המוצג על הצג הטורי מדפיס את כל פיני ה-SPI החדשים עבור לוח ה-ESP32.

ESP32 עם התקני SPI מרובים

ל-ESP32 שני אוטובוסים SPI, וכל אוטובוס יכול לשלוט 3 התקנים כלומר ניתן לשלוט בסך הכל על 6 מכשירים באמצעות SPI של ESP32. כדי לשלוט במכשירים נוספים, אנו יכולים להשתמש בטכניקות ריבוי שונות.

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


התחביר הבא יעקוב אחר אם נרצה להגדיר את CS ל-LOW.

digitalWrite ( CS, נמוך ) ;


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

digitalWrite ( CS_1, גבוה ) ; // השבת פין CS של SLAVE 1
digitalWrite ( CS_2, נמוך ) ; // אפשר CS PIN של SLAVE שתיים

סיכום

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