樹莓派與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即可。