一、串口操作
import serial # 引入 serial 库 port_list = list(serial.tools.list_ports.comports()) # 搜索串口列表 ser = serial.Serial(com, int(bps), timeout=int(timex)) ser.flushInput() # 清空缓冲区 count = ser.inWaiting() # 获取缓冲区字符数量 str = ser.readline(ser.in_waiting) # 读取内容并回显 str = glo.ser.read(ser.in_waiting)
1 搜索串口
class getCom(QThread):
comUpdate = pyqtSignal(list)
port_list_orignal = []
def run(self):
"""得到所有的串口号
args: NONE
return: (串口号列表: ['COM1', ...], 串口名列表: ['通信端口 (COM1)'], 串口列表: ['COM1 - 通信端口 (COM1)', ...])
"""
while(True):
port_list = list(serial.tools.list_ports.comports())
if set(port_list) != set(self.port_list_orignal):
self.port_listUpdate(port_list)
if len(port_list) == 0:
print('No serial port found!')
exit()
else:
self.comUpdate.emit(port_list)
def port_listUpdate(self, port_list):
self.port_list_orignal = port_list
2 打开串口
def serialOpen(com, bps, timex):
"""打开串口
args: com: 串口号; bps: 波特率; timex: 超时时间
return: ser: 串口对象
"""
try:
ser = serial.Serial(com, int(bps), timeout=int(timex))
if ser.isOpen():
print('open success')
return ser
else:
print('open failed')
return None
except:
print("serialOpen: 串口不存在")
return
finally:
...
3 串口数据读取
class serialRead_original(QThread):
dateReadUpdate = pyqtSignal(str) # 数据更新信号
serDisconnect = pyqtSignal() # 串口断开信号
def run(self):
"""读取串口数据
args: NONE
return: NONE
"""
print("serialRead start")
ser.flushInput() # 清空缓冲区
while(isConnected):
if serialIsOpen(ser) == False: # 串口断开 或 不存在
print("serialRead stop")
self.serDisconnect.emit()
serialClose(ser)
break
count = ser.inWaiting() # 获取缓冲区字符数量
# print("count: ", count)
if count != 0:
str = ser.readline(ser.in_waiting) # 读取内容并回显
# str = glo.ser.read(ser.in_waiting)
# str -> b'' => 二进制数据
# str = str.decode(encoding='utf-8', errors='ignore')
self.dateReadUpdate.emit(str)
# print('data:', data)
sleep(1)
文章来源地址https://www.toymoban.com/news/detail-632827.html
文章来源:https://www.toymoban.com/news/detail-632827.html
到了这里,关于Python 串口操作-pyserial的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!