樹莓派串列埠

2021-08-11 02:10:32 字數 3088 閱讀 6336

串列埠使用例程及說明:

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...