樹莓派與Arduino串口通信


咳,時隔多月又回到了熟悉的博客園。

從現在開始重新去培養寫博客的習慣。

主要是用於科研技術方面的,去記錄一些我的學習和思考。

會把問題盡量的具體化,新手化

一是記錄方便回憶,二是梳理,三也是希望為遇到相關問題的朋友提供多多少少的借鑒和幫助吧

 

回歸正題,如何實現樹莓派與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
輸入

  1. sudo nano /boot/cmdline.txt
復制代碼

看到

  1. 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 刪除

變成這樣

  1. dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
復制代碼

ctrl+x 按Y保存退出

2.修改inittab 然后禁止掉從串口登錄的功能,

  輸入

  1. sudo nano /etc/inittab
復制代碼

找到

  1. T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
復制代碼

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

  1. #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即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM