兩大開源硬體樹莓派與Arduino的USB串列埠通訊
本文參考並結合兩篇相關文章進行操作。
1、搭建樹莓派串列埠通訊開發環境
樹莓派中安裝python的GPIO模組(庫檔案),在樹莓派中總連結不上,所以建議直接登入網址手動下載,並且可以選擇最新版本(博主此時用的是RPi.GPIO-0.6.3)
通過SSH方式(不在此介紹,博主用的是filezilla進行SSH傳輸)傳輸到樹莓派中
tar xvzf RPi.GPIO-0.6.3.tar.gz(tar解壓)
cd RPi.GPIO-0.6.3 (進入解壓後的資料夾)
sudo python setup.py install (安裝GPIO庫檔案)
安裝serial,用於串列埠或者USB通訊
sudo apt-get install python-serial
測試環境(nano/vi/vim,如果出現命令錯誤的三個都可以試一下,博主這裡因為系統不支援vim命令所以用了vi)
sudo vi test.py
編輯如下程式碼
import serial
import RPi.GPIO
儲存退出然後執行
sudo python test.py
沒有報錯說明環境搭建成功
2、安裝串列埠除錯工具
sudo apt-get install minicom
配置minicom
sudo minicom -s
啟動出現配置選單
選serial port setup →進入串列埠配置
輸入A →配置串列埠驅動為/dev/ttyAMA0
輸入E →配置速率為9600 8N1
輸入F →將 Hardware Flow Control 設 為 NO
回車→退出
修改Modem and dialing,將Init string,Reset string,Hang-up string設定為空。
設定完成後,在配置選單選Save setup as df1儲存(將當前設定儲存為預設設定)
選Exit→退出。
3、樹莓派與arduino通過USB進行通訊
①將樹莓派與arduino通過usb線進行連線
②在樹莓派終端輸入
ls /dev/tty*
檢視兩者連線埠的名字。檢視是否出現ttyACM0 。看到ttyACM0就說明二者可以通訊了
另一篇則提出是ttyUSB0或者ttyUSB1,博主無法解釋,歡迎有大牛在評論解釋一下。
所以博主認為可以在二者連線之前可以執行一次ls /dev/tty*,連線之後再執行一次ls /dev/tty*,看哪個是多出來的就知道是哪個了。
③編寫樹莓派與arduino通訊程式碼。
Arduino:
void setup()
{
Serial.begin(9600); // 9600 bps
}
void loop()
{
if ( Serial.available())
{
if('s' == Serial.read())
Serial.println("Hello Raspberry,I am Arduino.");
}
}
把上面程式碼燒錄到arduino中,再與樹莓派usb連結。
RPI(樹莓派)
import serial #import serial module
ser = serial.Serial('/dev/ttyACM1', 9600,timeout=1); #open named port at 9600,1s timeot#try and exceptstructure are exception handler
try:
while 1:
ser.write('s');#writ a string to port
response = ser.readall();#read a string from port
print response;
except:
ser.close();
上面程式碼在樹莓派中儲存為communication.py檔案。
注:這裡千萬不要命名為serial.py,否則後面執行會出現 AttributeError: 'module' object has no attribute 'Serial' 的錯誤。
對程式碼的簡單說明:樹莓派向arduino傳送一個字元‘s’,arduino向樹莓派回覆字串“hello raspberry,i am arduino”。
④執行程式
在樹莓派終端執行
sudo python communication.py
實際上博主是在做mfrc522,所以效果圖略有不同,只要顯示Hello Raspberry,I am Arduino.就說明可以了。
參考連結: