串列埠使用例程及說明:
pyserial api
sudo apt-get install python-serial
python -m serial.tools.list_ports 此命令可以檢視裝置的檔案節點。
class serial.serial
__init__(port=none, baudrate=9600, bytesize=eightbits, parity=parity_none, stopbits=stopbits_one, timeout=none, xonxoff=false, rtscts=false, writetimeout=none, dsrdtr=false, interchartimeout=none)
port:讀或者寫埠
baudrate:波特率
bytesize:位元組大小
parity:校驗位
stopbits:停止位
timeout:讀超時設定
writetimeout:寫超時
xonxoff:軟體流控
rtscts:硬體流控
dsrdtr:硬體流控
interchartimeout:字元間隔超時
timeout 與read():
timeout = none一直等待,直到接受到資料
timeout = 0: 非阻塞
timeout = x: 等待時長
write() 預設阻塞, 除非write_timeout 被設定.
read(size=1):從串列埠讀
size
個位元組。返回讀到的資料。如果指定超時,則可能在超時後返回較少的位元組;如果沒有指定超時,則會一直等到收完指定的位元組數。
write(data):傳送
data
,並返回傳送位元組數。如果
bytes
和bytearray
可用(python 2.6
以上),則接受其作為引數;否則接受
str作為引數。
異常:serialtimeoutexception——配置了寫超時並發生超時時發生此異常。
inwaiting():返回接收快取中的位元組數
例程:
#!/usr/bin/env python
import serial
import time
def uart(port):
rv_buf=""
ch=''
while true:
ch=port.read();
rv_buf+=ch
if ch=='' or ch=='\r':
return rv_buf
send_buf=""
port=serial.serial("/dev/ttyusb0",baudrate=115200,timeout=none)
while true:
send_buf=uart(port)
port.write(send_buf)
print(send_buf)
用串列埠接受資料,單路的簡單接受我們已經除錯成功了。但是在實際應用過程中,需要用到多路。因此目前的想法是通過select來實現。
首先簡單學習一下python中的
select。
python的
select()
方法直接呼叫作業系統的
io介面,它監控
sockets,open files, and pipes(
所有帶fileno()
方法的檔案控制代碼
)何時變成
readable
和writeable,
或者通訊錯誤。
select的用法很簡單,select( iwtd, owtd, ewtd[, timeout])前三個引數是『等待物件』。這三個引數分別按順序等待輸入、輸出和異常狀態。允許空陣列
timeout
引數接受浮點數表示的秒。
如果省略 timeout 將會阻塞直到至少乙個檔案描述符準備就緒。
timeout 為0
表示從不阻塞。這裡在串列埠接收程序中是阻塞的操作,一直在阻塞,等待資料,防止資料丟失。
返回值是包含前三個引數裡面已準備就緒的物件的3個列表
.如果已經超時但是並沒有物件準備就緒,那麼返回
3個空列表
#!/usr/bin/env python
import select
import serial
import time
import multiprocessing
def uart(port):
rv_buf=""
ch=''
while true:
ch=port.read()
rv_buf+=ch
if ch=='' or ch=='\r':
return rv_buf
def uart_trans():
send_buf0=""
send_buf1=""
i=0port0=serial.serial("/dev/myuart0",baudrate=115200,timeout=0)
port1=serial.serial("/dev/ttyusb1",baudrate=115200,timeout=0)
fd0=file("/dev/myuart0","r+")
fd1=file("/dev/ttyusb1","r+")
while true:
rlist,wlist,elist=select.select([fd0,fd1],,,)
for fd in rlist:
if(fd==fd0):
send_buf0=uart(port0)
port0.write(send_buf0)
if(fd==fd1):
send_buf1=uart(port1)
port1.write(send_buf1)
if __name__ =="__main__":
uart_trans()
測試原始碼:
樹莓派串列埠通訊python 樹莓派串列埠通訊設定
實驗環境樹莓派 3b 開發板 2018 06 27 raspbian stretch 樹莓派作業系統 使用 windows 10 通過網線連線遠端登陸訪問方式控制樹莓派 實驗目的 為了將樹莓派構建成乙個智慧型家居的資料中心,我們需要在樹莓派上連線 zigbee 無線通訊模組,實現與感測器的一對多通訊...
樹莓派 pypi UART串列埠
樹莓派在linux上層支援通用的串列埠介面,用linux上通用的串列埠程式設計即可操作。樹莓派3b的板載串列埠被藍芽占用,但可以方便地使用usb串列埠模組。樹莓派的板載串列埠是給系統登入使用的,我們要先把這個功能關掉。sudo raspi config advanced options serial...
樹莓派串列埠連線
樹莓派串列埠連線需要修改udev檔案,在 etc udev rules.d資料夾下建立相應串列埠連線的rules檔案,如雷射雷達ydlidar為例,串列埠線與樹莓派主機板相連,樹莓派主機板要識別出雷射雷達,我們就需要編寫rules檔案,我們lsusb命令檢視連線到樹莓派主機板上個介面的id裡以pl2...