咳,時隔多月又回到了熟悉的博客園。
從現在開始重新去培養寫博客的習慣。
主要是用於科研技術方面的,去記錄一些我的學習和思考。
會把問題盡量的具體化,新手化
一是記錄方便回憶,二是梳理,三也是希望為遇到相關問題的朋友提供多多少少的借鑒和幫助吧
回歸正題,如何實現樹莓派與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即可。