1. 程式人生 > >兩大開源硬體樹莓派與Arduino的USB串列埠通訊

兩大開源硬體樹莓派與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.就說明可以了。

參考連結: