欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Python讀取串口函數(shù) python調(diào)用串口通信

python對串口藍(lán)牙模塊的操作

python提供了豐富的module 對串口的操作同樣有對應(yīng)的module:serial

創(chuàng)新互聯(lián)公司基于成都重慶香港及美國等地區(qū)分布式IDC機房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)服務(wù)器托管報價,主機托管價格性價比高,為金融證券行業(yè)服務(wù)器機柜租賃,ai人工智能服務(wù)器托管提供bgp線路100M獨享,G口帶寬及機柜租用的專業(yè)成都idc公司。

環(huán)境:python3.5 藍(lán)牙模塊:HC-05 波特率38400

首先導(dǎo)入serial模塊(通過pip install serial 安裝)

獲取串口ser 通過serial.Serial(地址,波特率,超時時間)

創(chuàng)建線程監(jiān)聽串口數(shù)據(jù)

使用 ser.in_waiting() 獲知數(shù)據(jù)量 這個函數(shù)返回當(dāng)前串口收到的數(shù)據(jù)長度

收取數(shù)據(jù)后進行詳細(xì)操作

python3.5 讀取串口中的數(shù)據(jù)怎么解碼

1、安裝串口庫

2、采用默認(rèn)通信參數(shù)

import serial

t = serial.Serial('com1',9600)

n = t.write('you are my world')print t.portstrprint n

str = t.read(n)print str

3、可以自己設(shè)置參數(shù)

import timeimport serialser = serial.Serial( #下面這些參數(shù)根據(jù)情況修改 port='COM1', baudrate=9600, parity=serial.PARITY_ODD, stopbits=serial.STOPBITS_TWO, bytesize=serial.SEVENBITS)data = ''while ser.inWaiting() 0: data += ser.read(1)if data != '': print data

注意:Python與多個串口通信的時候,要確定端口號。如果有時間的話,可以自己寫一個查詢所有端口的信息,不想這么麻煩的話,下載個串口助手,自己看端口信息,在py文件中修改serial.Serial()里面的端口號。

python - serial communication(串口通信)

由于測試工作的需要,在C端產(chǎn)品上經(jīng)常使用串口進行通信,而測試腳本大部分時候又采用python編寫,于是就不得不了解并熟悉python下的串口通信實現(xiàn)方法了,整理如下以備隨時使用:

一、說明

pyserial封裝了python環(huán)境下對串口的訪問,其兼容各種平臺,并有統(tǒng)一的操作接口。通過python屬性訪問串口設(shè)置,并可對串口的各種配置參數(shù)(如串口名,波特率、停止校驗位、流控、超時等等)做修改,再進行串口通信的類與接口封裝后,非常方便地被調(diào)用和移植。

二、模塊安裝

pip insatll pyserial

三、初始化與參數(shù)說明

import serial

ser = serial.Serial('COM3', 115200, timeout=0.5, ....................)

下面看看 serial.Serial 原生類

四、不同平臺下初始化

ser=serial.Serial("/dev/ttyUSB0",9600,timeout=0.5)#使用USB連接串行口ser=serial.Serial("/dev/ttyAMA0",9600,timeout=0.5)#使用樹莓派的GPIO口連接串行口ser=serial.Serial(1,9600,timeout=0.5)#winsows系統(tǒng)使用COM1口連接串行口ser=serial.Serial("COM1",9600,timeout=0.5)#winsows系統(tǒng)使用COM1口連接串行口ser=serial.Serial("/dev/ttyS1",9600,timeout=0.5)#Linux系統(tǒng)使用COM1口連接串行口

五、串口屬性

ser.name?#串口名稱

ser.port?#端口號

ser.baudrate #波特率

ser.bytesize #字節(jié)大小

ser.parity #校驗位N-無校驗,E-偶校驗,O-奇校驗

ser.stopbits #停止位

ser.timeout #讀超時設(shè)置

ser.writeTimeout #寫超時

ser.xonxoff #軟件流控

ser.rtscts #硬件流控

ser.dsrdtr #硬件流控

ser.interCharTimeout #字符間隔超時?

六、串口常用方法

isOpen():查看端口是否被打開。

open() :打開端口‘。

close():關(guān)閉端口。

read(size=1):從端口讀字節(jié)數(shù)據(jù)。默認(rèn)1個字節(jié)。

read_all():從端口接收全部數(shù)據(jù)。

write(data):向端口寫數(shù)據(jù)。

readline():讀一行數(shù)據(jù)。

readlines():讀多行數(shù)據(jù)。

in_waiting():返回輸入緩存中的字節(jié)數(shù)。

out_waiting():返回輸出緩存中的字節(jié)數(shù)。

flush():等待所有數(shù)據(jù)寫出。

flushInput():丟棄接收緩存中的所有數(shù)據(jù)。

flushOutput():終止當(dāng)前寫操作,并丟棄發(fā)送緩存中的數(shù)據(jù)。

sendBreadk(duration=0.25):發(fā)送BREAK條件,并于duration時間之后返回IDLE

setBreak(level=True):根據(jù)level設(shè)置break條件。

setRTS(level=True):設(shè)置請求發(fā)送(RTS)的控制信號

setDTR(level=True):設(shè)置數(shù)據(jù)終端準(zhǔn)備就緒的控制信號

七、類與接口封裝

import time

import serial

import serial.tools.list_ports

# 串口操作類

class serialCommunication(object):

def __init__(self, port, bps, timeout):# 可配置更多參數(shù)

? ? port_list =self.show_usable_com()

if len(port_list) 0:

if portnot in port_list:

self.port = port_list[0]

else:

self.port = port

else:

print("no usable serial, please plugin your serial board")

return

? ? self.bps = bps

self.timeout = timeout

try:

# 初始化串口,并得到串口對象,根據(jù)需要可拓展更多參數(shù)

? ? ? ? self.ser = serial.Serial(self.port, self.bps, 8, 'N', 1, timeout=self.timeout, write_timeout=self.timeout)

except Exception as e:# 拋出異常

? ? ? ? print("Exception={}".format(e))

# 顯示可用串口列表

@staticmethod

def show_usable_com():

serialport_list = []

portInfo_list =list(serial.tools.list_ports.comports())

if len(portInfo_list) =0:

print("can not find any serial port!")

else:

print(portInfo_list)

for i in range(len(portInfo_list)):

plist =list(portInfo_list[i])

print(plist)

serialport_list.append(plist[0])

print(serialport_list)

return serialport_list

# 輸出串口基本信息

def serial_infor(self):

print(self.ser.name)# 設(shè)備名字

? ? print(self.ser.port)# 讀或者寫端口

? ? print(self.ser.baudrate)# 波特率

? ? print(self.ser.bytesize)# 字節(jié)大小

? ? print(self.ser.parity)# 校驗位

? ? print(self.ser.stopbits)# 停止位

? ? print(self.ser.timeout)# 讀超時設(shè)置

? ? print(self.ser.writeTimeout)# 寫超時

? ? print(self.ser.xonxoff)# 軟件流控

? ? print(self.ser.rtscts)# 軟件流控

? ? print(self.ser.dsrdtr)# 硬件流控

? ? print(self.ser.interCharTimeout)# 字符間隔超時

# 打開串口

def serial_open(self):

try:

if not self.ser.isOpen():

self.ser.open()

except Exception as e:# 拋出異常

? ? ????print("serial_open Exception={}".format(e))

self.ser.close()

# 讀取指定大小的數(shù)據(jù)

# 從串口讀size個字節(jié)。如果指定超時,則可能在超時后返回較少的字節(jié);如果沒有指定超時,則會一直等到收完指定的字節(jié)數(shù)。

def serial_read_with_size(self, size):

try:

self.serial_open()

return self.ser.read(size).decode("utf-8")

except Exception as e:

print("serial_read_all Exception={}".format(e))

self.ser.close()

# 讀取當(dāng)前串口緩存中的所有數(shù)據(jù)

def serial_read_data(self):

try:

self.serial_open()

datalen =self.ser.inWaiting()

? ? ? ? if datalen ==0:

return None

? ? ? ? return self.ser.read(datalen).decode("utf-8")

except Exception as e:

print("serial_read_data Exception={}".format(e))

self.ser.close()

# 讀串口全部數(shù)據(jù),注意timeout的設(shè)置

# 在設(shè)定的timeout時間范圍內(nèi),如果讀取的字節(jié)數(shù)據(jù)是有效的(就是非空)那就直接返回,

# 否則一直會等到設(shè)定的timeout時間并返回這段時間所讀的全部字節(jié)數(shù)據(jù)。

def serial_read_all(self):

try:

self.serial_open()

return self.ser.read_all().decode("utf-8")

except Exception as e:

print("serial_read_all Exception={}".format(e))

self.ser.close()

# 讀一行數(shù)據(jù)

# 使用readline()時應(yīng)該注意:打開串口時應(yīng)該指定超時,否則如果串口沒有收到新行,則會一直等待。

# 如果沒有超時,readline會報異常。

def serial_read_line(self):

try:

self.serial_open()

return self.ser.readline().decode("utf-8")

except Exception as e:

print("serial_read_line Exception={}".format(e))

? ? ? ? self.ser.close()

# 讀多行數(shù)據(jù),返回行列表

def serial_read_lines(self):

try:

self.serial_open()

return self.ser.readlines().decode("utf-8")

except Exception as e:

print("serial_read_lines Exception={}".format(e))

self.ser.close()

# 寫數(shù)據(jù)

def serial_write_data(self, data):

try:

self.serial_open()

self.ser.flushOutput()

data_len =self.ser.write(data.encode('utf-8'))

return data_len

except Exception as e:

print("serial_write_data Exception={}".format(e))

return 0

# 寫行數(shù)據(jù),注意參數(shù)差異

def serial_write_lines(self, lines):

self.ser.writelines(lines)

# 清除串口緩存

def serial_clean(self):

try:

if self.ser.isOpen():

self.ser.flush()

except Exception as e:

print("serial_clean Exception={}".format(e))

# 關(guān)閉串口

def serial_close(self):

try:

if self.ser.isOpen():

self.ser.close()

except Exception as e:

print("serial_clean Exception={}".format(e))

if __name__ =='__main__':

testSerial = serialCommunication("COM10", 1500000, 0.5)

testSerial.serial_open()

testSerial.serial_infor()

testSerial.serial_write_data("ifconfig eth0\n")

time.sleep(0.1)

data = testSerial.serial_read_all()

print(data)

testSerial.serial_close()

八、其他

1)ser.VERSION表示pyserial版本;?另外,ser.name表示設(shè)備名稱

2)端口設(shè)置可以被讀入字典,也可從字典加載設(shè)置:

getSettingDict():返回當(dāng)前串口設(shè)置的字典

applySettingDict(d):應(yīng)用字典到串口設(shè)置

3)?Readline()是讀一行,以/n結(jié)束,要是沒有/n就一直讀,阻塞。注意:打開串口時應(yīng)該指定超時,否則如果串口沒有收到新行,則會一直等待。

4)serial.read_all 與?serial.read_all()區(qū)別

serial.read_all:讀取串口所有的參數(shù)信息

serial.read_all():超時時間內(nèi)從串口讀取的所有數(shù)據(jù)

5) 異常信息

exception serial.SerialException

exception serial.SerialTimeoutException

分享名稱:Python讀取串口函數(shù) python調(diào)用串口通信
路徑分享:http://chinadenli.net/article0/hghpio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站網(wǎng)站設(shè)計網(wǎng)頁設(shè)計公司小程序開發(fā)網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)