ה- Raspberry Pi ו- Arduino יכולים לתקשר זה עם זה באמצעות פרוטוקולים שונים, כולל סדרתי (UART), I2C ו- SPIו מדריך זה יראה לך כיצד להגדיר תקשורת בין Raspberry Pi לארדואינו באמצעות ממשק סדרתי (UART), שהיא השיטה הנפוצה והפשוטה ביותר.
מה תצטרך
- Raspberry Pi (כל דגם עם תמיכה ב- GPIO, למשל, pi 3, pi 4)
- ארדואינו (למשל, אונו, מגה, ננו)
- כבל USB (לחיבור הארדואינו לפטל PI)
- חוטי מגשר (אם משתמשים בתקשורת סדרתית של GPIO)
- פיתון מותקן על ה- Raspberry Pi
- Arduino Ide מותקן ב- Raspberry Pi או במחשב נפרד
שלב 1: חיבור הארדואינו ל- Raspberry Pi
אתה יכול לחבר את ה- Raspberry Pi לארדואינו באמצעות USB או סיכות GPIO.
שיטה 1: חיבור USB (מומלץ)
- חבר את Arduino ל- Raspberry Pi באמצעות כבל USB.
- ה- Raspberry Pi יאתר את הארדואינו כמכשיר סדרתי (למשל,
/dev/ttyUSB0
אוֹ/dev/ttyACM0
).
שיטה 2: שימוש בסיכות GPIO (סידורי חומרה)
- חבר את Arduino TX (סיכה 1) אֶל Raspberry Pi Rx (GPIO 15, PIN 10).
- חבר את Arduino RX (סיכה 0) אֶל Raspberry Pi TX (GPIO 14, PIN 8).
- לְחַבֵּר GND ל- GND.
- השבת את המסוף הסדרתי המובנה של Raspberry Pi:
sudo raspi-config
- נווט אל אפשרויות ממשק> יציאה סדרתית.
- השבת את מעטפת ההתחברות על סידורי אך הפעל את חומרת היציאה הסדרתית.
- אתחל מחדש את ה- Raspberry Pi:
sudo reboot
שלב 2: התקן ספריות נדרשות
ודא של- Raspberry Pi שלך יש את כלי התקשורת הסדרתיים הנדרשים.
sudo apt update
sudo apt install python3-serial
לבדיקת יציאות סדרתיות זמינות:
ls /dev/tty*
לחיבור USB, חפש /dev/ttyUSB0
אוֹ /dev/ttyACM0
.
שלב 3: העלה סקיצה של ארדואינו
כדי לשלוח נתונים מהארדואינו ל- Raspberry Pi, העלה את זה פשוט סקיצת ארדואינו באמצעות Arduino Ide.
void setup() {
Serial.begin(9600); // Start serial communication
}
void loop() {
Serial.println("Hello from Arduino!"); // Send message
delay(1000);
}
שלב 4: קרא נתונים סידוריים ב- Raspberry Pi
צור סקריפט פייתון ב- Raspberry Pi כדי לקרוא את הנתונים מהארדואינו.
דוגמה לקוד פיתון
import serial
import time
# Open the serial port (Change ttyUSB0 if necessary)
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
time.sleep(2) # Wait for connection
try:
while True:
if ser.in_waiting > 0:
data = ser.readline().decode('utf-8').strip()
print(f"Received: {data}")
except KeyboardInterrupt:
print("Exiting...")
ser.close()
- להבטיח זאת
/dev/ttyUSB0
תואם את היציאה הסדרתית שלך. - הפעל את התסריט:
python3 serial_read.py
- אתה צריך לראות "שלום מארדואינו!" נדפס כל שנייה.
שלב 5: שליחת נתונים מה- Raspberry Pi ל- Arduino
שנה את קוד ארדואינו לקבלת נתונים מ- Raspberry Pi:
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
String received = Serial.readStringUntil('\\n');
Serial.print("Raspberry Pi Sent: ");
Serial.println(received);
}
}
שנה את קוד פייתון לשלוח נתונים לארדואינו:
ser.write(b"Hello from Raspberry Pi!\\n")
- כעת, הארדואינו יקבל הודעות שנשלחו על ידי ה- Raspberry Pi.
שיטות תקשורת אלטרנטיביות
-
תקשורת i2c (למספר ארדוינים)
- Raspberry Pi פועל כמו לִשְׁלוֹט, ארדואינו פועל כמו עֶבֶד.
- אפשר i2c:
sudo raspi-config
- התקן ספריות נדרשות:
sudo apt install python3-smbus i2c-tools
- לְהִשְׁתַמֵשׁ
Wire.h
בצד ארדואינו לתקשורת i2c.
-
תקשורת SPI (להעברת נתונים במהירות גבוהה)
- דורש Arduino המאפשרת SPI וכן
SPI.h
סִפְרִיָה. - מהיר יותר מ- UART ו- I2C אך דורש חיווט נוסף.
- דורש Arduino המאפשרת SPI וכן
פתרון בעיות
-
ארדואינו לא זוהה ב- Raspberry Pi
- לָרוּץ
ls /dev/tty*
לבדיקת מכשירים טוריים זמינים. - ודא כי יציאת הסדרה הנכונה מוגדרת בתסריט Python.
- לָרוּץ
-
שגיאה שנדחתה הרשאה
- הוסף את המשתמש שלך ל
dialout
קְבוּצָה:sudo usermod -aG dialout $USER sudo reboot
- הוסף את המשתמש שלך ל
-
תווי זבל בפלט
- לְהַבטִיחַ שני המכשירים משתמשים באותו קצב baud (לְמָשָׁל.,
9600
). - הוסף עיכוב קטן (
time.sleep(2)
) לפני קריאת נתונים בפיתון.
- לְהַבטִיחַ שני המכשירים משתמשים באותו קצב baud (לְמָשָׁל.,
מַסְקָנָה
על ידי ביצוע מדריך זה תוכלו להקים תקשורת סדרתית בין ארדואינו ל- PI פטל, ומאפשר להם להחליף נתונים עבור פרויקטים של IoT, שילוב חיישנים ומערכות אוטומציהו התנסו I2c ו- spi ליישומים מתקדמים יותר!