樹莓派與arduino通訊

  • 2019 年 12 月 8 日
  • 筆記

一、安裝樹莓派及arduino開發環境

搭建樹莓派串口通訊開發環境

(1)安裝Python:

sudo apt-get update  sudo apt-get install python

(2)安裝python的GPIO模組,用於控制LED、電機等: wget https://sourceforge.NET/projects/raspberry-gpio-python/files/RPi.GPIO-0.6.2.tar.gz    (下載GPIO庫,因為更新,具體參考官網網址變動)

tar xvzf RPi.GPIO-0.6.2.tar.gz  (tar解壓)  cdRPi.GPIO-0.6.2               (進入解壓後的文件夾)  sudo python setup.py install     (安裝GPIO庫文件)

(3)安裝serial,用於串口通訊及USB通訊:

sudo apt-get install python-serial

(4)檢驗前三步環境安裝是否正確

     #用nano編輯器編輯一個test文件

 sudo nano test.py 

     #在test.py文件中寫入下面兩行程式碼

import serial  import RPi.GPIO

     #運行python test.py語句,如果沒有報錯說明樹莓派開發環境搭建正確。

到此樹莓派及arduino通訊開發環境搭建完畢,下面講解具體通訊實現。

二、樹莓派與arduino通過USB進行通訊

1、將樹莓派與arduino通過usb線進行連接

2、在樹莓派終端輸入 ls /dev/tty*查看兩者連接埠的名字。查看有沒有ttyACM0 這個文件(注只有在兩個硬體USB互連的情況下才會有這個。如果兩者沒有連接是不會有的) 最新的系統一般都會自動生成。看到ttyACM0就說明二者可以通訊了。

3、編寫樹莓派與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.");       }  }

把上面程式碼通過python IDE下載到arduino中,然後再再與樹莓派usb鏈接。

樹莓派程式碼:

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文件。

2、在樹莓派終端輸入sudo python communication.py運行程式。

顯示結果:

此圖是兩者之間的通訊結果:樹莓派向arduino發送一個字元『s』,arduino向樹莓派回復字元串「hello raspberry,i am arduino」。

三、樹莓派與arduino通過GPIO引腳通訊

1、連接方式:

樹莓派的RX       -----      arduino的TX

樹莓派的TX       -----      arduino的RX

樹莓派的GND      -----      arduino的GND

2、修改樹莓派配置文件(要看詳細的請移步這裡 http://www.eeboard.com/bbs/thread-8574-1-1.html)

(1)修改cmdline.txt 輸入

sudo nano /boot/cmdline.txt

看到

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

把 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 刪除 變成這樣

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

ctrl+x 按Y保存退出 2.修改inittab 然後禁止掉從串口登錄的功能, 輸入

sudo nano /etc/inittab

找到

T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

這一行 在前面加個#注釋掉這一行變成

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

ctrl+x 按Y保存退出 然後重啟樹莓派,之後樹莓派的pin8(GPIO14) pin10(GPIO15)這兩個口就可以當成普通的串口來用了 現在你可以像使用一個普通串口那樣使用/dev/ttyAMA0了。

3、實驗程式碼及效果

只需要將上面USB通訊樹莓派上的程式碼ser = serial.Serial('/dev/ttyACM1', 9600,timeout=1); 中的ttyACM1改成ttyAMA0即可。