樹梅派序列口通訊方法
前言:本文主要介紹樹莓派序列口通訊的主要方法和配製過程,以及注意事項。
一、樹莓派序列通訊的方法
樹莓派的序列通訊的方式主要有兩種:一種是通過樹莓派GPIO口、一種是通過USB口。
二、莓派的串列埠(UART)配置和使用
1、樹莓派上UART埠的位置
GND位於HEAD-6(也可選其他GND)
TXD位於HEAD-8
RXD位於HEAD-10
樹莓派的第一排的第三,四,五分別,也就是下圖的6,8,10三個埠分別是地、TX與RX。注意在接線時,3根線都要接,首先裝置必須共地,樹莓派的TX要連線從裝置的RX,樹莓派的RX要連線樹莓派的TX。
圖. 樹莓派 UART位置
2、樹莓派的串列埠電平
說明:TTL電平與RS232電平的區別
1)TTL電平標準
輸出 L:<0.8V ; H:>2.4V。
輸入 L:<1.2V ; H:>2.0V
TTL器件輸出低電平要小於0.8V,高電平要大於2.4V。輸入,低於1.2V就認為是0,高於2.0就認為是1。於是TTL電平的輸入低電平的噪聲容限就只有(0.8-0)/2=0.4V,高電平的噪聲容限為(5-2.4)/2=1.3V。
2)RS232標準
邏輯1的電平為-3~-15V,邏輯0的電平為+3~+15V,注意電平的定義反相了一次。
3、樹莓派的串列埠預設為一個控制檯,用於SSH除錯使用,若要使用串列埠需要修改兩處檔案。 具體的修改方法如下:
1)修改兩處檔案
【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=ext4elevator=deadline rootwait
【最終變為】
dwc_otg.lpm_enable=0 console=tty1root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
【2】/etc/inittab
【輸入以下指令】
sudo nano /etc/inittab
【註釋最後一行內容】
#T0:23:respawn:/sbin/getty -LttyAMA0 115200 vt100
2)重新啟動系統
sudo reboot
4、測試
配置完之後便可測試一下樹莓派的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功能暫時未知。
圖. minicon介面
【3】minicom傳送內容
直接在控制檯中輸入內容即可,如果minicom打開了回顯可在控制檯中觀察到輸出內容,如果回顯關閉則控制檯中沒人任何反應,千萬不要以為minicom沒有正常工作。
【4】minicom回顯控制
先Ctrl+A,再E。可翻轉回顯狀態(原來回顯開啟則此事回顯關閉)
【5】minicom退出
先Ctrl+A,再Q。
5、利用python程式通訊事例(利用pyserial,下載安裝方法見後文)
import serial
from time import sleep
ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=0.5)
def recv(serial):
data
while True:
data =serial.read(30)
if data == '':
continue
else:
break
sleep(0.02)
return data
while True:
data =recv(ser)
ser.write(data)
三、樹莓派的序列通訊(利用USB)配置和使用
首先用RS232轉USB的轉接線連線樹莓派,即可完成硬體連線。對於串列埠通訊,可以通過pyserial實現。
1、安裝pyserial模組和測試
tar zxvf pyserial-2.7.tar.gz
cd pyserial-2.7
python setup.py install
通過命令lsusb檢視串列埠是否存在:
通過命令python -m serial.tools.list_ports可以檢視大可用的埠:
2、python通訊程式
usb裝置:/dev/ttyUSB0
import serial
from time import sleep
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=0.5)
def recv(serial):
data
while True:
data =serial.read(30)
if data == '':
continue
else:
break
sleep(0.02)
return data
while True:
ser.write(data)data =recv(ser)
總結:如果你使用的是usb Hub,那麼通訊的裝置就不一定是/dev/ttyUSB0,可能是/dev/ttyUSB1,/dev/ttyUSB2,/dev/ttyUSB3等,以此類推。