Python 串口操作-pyserial

一、串口操作

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)

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bayyys

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值