1. 程式人生 > >樹莓派與arduino序列通訊

樹莓派與arduino序列通訊

樹莓派與arduino都有一個序列口,都是TTL電平,可以直接連線。不同的是樹莓派是5V供電,而arduino是3.3V供電。

1、連線方式:

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

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

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

2、樹莓派序列口配置

    樹莓派的串列埠在啟動時預設為控制檯,給SSH除錯使用,若要使用串列埠需要修改兩處檔案。

【1】/boot/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     【最終變為】 dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait 【2】/etc/inittab     【輸入以下指令】
    sudo nano /etc/inittab     【註釋最後一行內容】 #T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100 3、樹莓派使用minicom     配置完之後便可測試一下樹莓派的UART是否正常工作,而minicom便是一個簡單好用的工具。minicom是linux平臺串列埠除錯工具,相當於windows上的串列埠除錯助手。     【1】minicom安裝     sudo apt-get install minicom     【2】minicom啟動     minicom -b 9600 -o -D /dev/ttyAMA0     -b代表波特率,-D代表埠,/dev/ttyAMA0 類似於windows中的COM1
,-o功能暫時未知。

    圖2 minicon介面     【3】minicom傳送內容         直接在控制檯中輸入內容即可,如果minicom打開了回顯可在控制檯中觀察到輸出內容,如果回顯關閉則控制檯中沒人任何反應,千萬不要以為minicom沒有正常工作。     【4】minicom回顯控制         先Ctrl+A,再E。可翻轉回顯狀態(原來回顯開啟則此事回顯關閉)     【5】minicom回顯關閉         先Ctrl+A,再Q。 4、樹莓派使用pyserial     minicom僅滿足除錯用途,如果需要程式設計解決問題那麼python的serial擴充套件庫——pyserial則是一個不錯的選擇。pyserial模組非常好用,後面的文章還會分析如何使用pyserial控制GPRS模組。     【pyserial安裝】     安裝pyserial擴充套件庫有很多種方法,可使用pip或者easy_install安裝,也可以直接選擇apt-get工具安裝。     若使用apt-get工具安裝,可輸入以下指令     sudo apt-get install python-serial    【串列埠回顯程式】     非常簡單的一個串列埠程式,樹莓派通過串列埠返回接收的內容。
  1. # -*- coding: utf-8 -*
  2. import serial  
  3. import time  
  4. # 開啟串列埠
  5. ser = serial.Serial("/dev/ttyAMA0"9600)  
  6. def main():  
  7.     whileTrue:  
  8.         # 獲得接收緩衝區字元
  9.         count = ser.inWaiting()  
  10.         if count != 0:  
  11.             # 讀取內容並回顯
  12.             recv = ser.read(count)  
  13.             ser.write(recv)  
  14.         # 清空接收緩衝區
  15.         ser.flushInput()  
  16.         # 必要的軟體延時
  17.         time.sleep(0.1)  
  18. if __name__ == '__main__':  
  19.     try:  
  20.         main()  
  21.     except KeyboardInterrupt:  
  22.         if ser != None:  
  23.             ser.close()