אז אחרי ההכרות הבסיסית עם BeagleBone אפשר לומר שניתן לעשות איתו הכול, היתרון המרכזי כמובן זה המעבד ה 32 Bit וה MMU שמאפשרים לנו להריץ מערכות הפעלה מתקדמות כמו Linux וכמובן לחבר רכיבים מתוחכמים יותר בעזרת תקשורות רבות שבאות עם הלוח, במאמר הזה אני יסביר כיצד ניתן לדבר עם ה Arduino בעזרת פקודות פשוטות ב SSH.
יש לחבר את הלוח לרשת , לאתר את הכתובת שלו ולהיכנס בעזרת Putty.
דרישות:
- Beaglebone
- Arduino Uno
- Led
- 330ohm Resistor
- Wires
לפני שנחיל לדבר חשוב לזכור שכל פין ב BeagleBone יכול לעבוד ב 8 מצבים שונים, כלומר ניתן לנתב את הפינים לכל מיני רכיבים בלוח לדוגמה הכניסות של ה Uart יכולות לשמש במצב אחר עבור I2C לכן חשוב למצוא את המצב המתאים על מנת שנוכל לדבר סיראלית, תחילה נמצא את הפינים עבור Uart1 ב Expansion Header:
נדאג שה Arduino יקבל חשמל דרך הכניסות של ה 5V וה GND שב BeagleBone, שימו לב מומלץ לעבוד עם ספק כח חיצוני ולשנות את ה PIN של ה 5 V מ 7 ל 5, לאחר מכן נמצא את ה Mode שאותו צריכים להגדיר לפינים שנבחרו על מנת שידברו עם רכיב ה Uart1 שנמצא בלוח.
נגדיר את כניסת ה TX ב BeagleBone שתתחבר לכניסה RX שב Arduino:
root@beaglebone:~# echo 0 > /sys/kernel/debug/omap_mux/uart1_txd
root@beaglebone:~# cat /sys/kernel/debug/omap_mux/uart1_txd
name: uart1_txd.uart1_txd (0x44e10984/0x984 = 0x0000), b NA, t NA
mode: OMAP_PIN_OUTPUT | OMAP_MUX_MODE0
signals: uart1_txd | mmc2_sdwp | d_can1_rx | i2c1_scl | NA | pr1_uart0_txd_mux1 | NA | gpio0_15
name: uart1_txd.uart1_txd (0x44e10984/0x984 = 0x0000), b NA, t NA
mode: OMAP_PIN_OUTPUT | OMAP_MUX_MODE0
signals: uart1_txd | mmc2_sdwp | d_can1_rx | i2c1_scl | NA | pr1_uart0_txd_mux1 | NA | gpio0_15
ניתן לראות שה Pin מוגדר על Mode 0 ומצביע על GPIO_15.
נגדיר את כניסת ה RX ב BeagleBone שתתחבר לכניסה TX שב Arduino:
root@beaglebone:~# echo 20 > /sys/kernel/debug/omap_mux/uart1_rxd
root@beaglebone:~# cat /sys/kernel/debug/omap_mux/uart1_rxd
name: uart1_rxd.uart1_rxd (0x44e10980/0x980 = 0x0020), b NA, t NA
mode: OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE0
signals: uart1_rxd | mmc1_sdwp | d_can1_tx | i2c1_sda | NA | pr1_uart0_rxd_mux1 | NA | gpio0_14
ניתן לראות שה Pin מוגדר על Mode 0 ומצביע על GPIO_14.name: uart1_rxd.uart1_rxd (0x44e10980/0x980 = 0x0020), b NA, t NA
mode: OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE0
signals: uart1_rxd | mmc1_sdwp | d_can1_tx | i2c1_sda | NA | pr1_uart0_rxd_mux1 | NA | gpio0_14
בגרסת ה Angstrom שמגיעה עם הלוח יש כלי נחמד שנקרא Minicom שמאפשר לנו לשלוח ולקבל מידע דרך חיבור סיראלי, יש להגדיר את התוכנית על ה Device שמייצג את ה Uart ב Linux במקרה שלנו ttyO1 שווה ל Uart1 לא לשכוח להריץ ב Terminal מקביל.
root@beaglebone:~# minicom -b 9600 -D /dev/ttyO1
מה שנשאר לנו הוא להריץ את הפקודה המתאימה:
//say to arduino to active the led
root@beaglebone:~# echo C1O > /dev/ttyO1
//say to arduino to deactive the led
root@beaglebone:~# echo C1F > /dev/ttyO1
נפתח 2 Terminals במקביל על מנת לראות את מה שמקבל ה Arduino:
הקוד עצמו מאוד פשוט, ה Arduino מאזין בחיבור הסיראלי לפקודה שתגיע מה BeagleBone שתדליק או תכבה led , בנוסף הוא יחזיר את מה שהוא קיבל על מנת שנוכל לעקוב ב Beaglebone.
//*** Serial Connection Demo Arduino Listener ***
//*** proxytype.blogspot.com ***
//GPIO pin 12
int ledpin = 12;
//buffer counter
int counter = 0;
//buffer
char cmd[4];
//flush buffer
void flushArr()
{
for(int i = 0; i < 3; i++)
{
cmd[i] = 0;
}
}
//set pin status
void setled(int _status)
{
digitalWrite(ledpin, _status);
}
void setup()
{
Serial.begin(9600);
}
void loop()
{
while (Serial.available() > 0)
{
cmd[counter] = Serial.read();
//write the char output for diagnose
Serial.print(cmd[counter]);
Serial.print("\n");
counter = counter + 1;
delay(10);
}
//C1O set led on
if(cmd[0] == 'C' && cmd[1] == '1' && cmd[2] == 'O')
setled(HIGH);
//C1F set led off
else if(cmd[0] == 'C' && cmd[1] == '1' && cmd[2] == 'F')
setled(LOW);
if(counter > 2)
{
counter =0;
flushArr();
}
delay(10);
}
מבנה סופי
סרט הדגמה
סיכום:
החיבור בין ה Beaglebone עם Arduino מאפשר לנו לבנות פרוייקטים מורכבים, ה Beaglebone נהפך למוח בזמן שה Arduino ממתין לפקודות מרחוק, ניתן לשלב Arduinos נוספים ולתקשר איתם בעזרת שאר חיבורי ה UART שעל הלוח.
זיווג משמיים!
סיכום:
החיבור בין ה Beaglebone עם Arduino מאפשר לנו לבנות פרוייקטים מורכבים, ה Beaglebone נהפך למוח בזמן שה Arduino ממתין לפקודות מרחוק, ניתן לשלב Arduinos נוספים ולתקשר איתם בעזרת שאר חיבורי ה UART שעל הלוח.
זיווג משמיים!
אין תגובות:
הוסף רשומת תגובה