python serial模块学习

模块介绍

python对于串口,有封装好的serial模块可供使用,介绍的文章也很多了,就有封装好的serial模块可供使用,介绍的文章也很多了,就简单附个链接看看
https://blog.csdn.net/qq_15181569/article/details/93492985
本篇主要就写写自己的理解和学习的过程

层次

SerialBase

首先看serialutil里面的class SerialBase,可以看到定义的各类入参(串口参数)和对应的实例变量,这里不一一列举,就写几个主要的:

入参(串口参数)

  port=None, #端口
  baudrate=9600, #波特率
  bytesize=EIGHTBITS,#数据位
  parity=PARITY_NONE,#校验位
  stopbits=STOPBITS_ONE,#停止位
  timeout=None, #超时时间

在类中还定义了一下串口参数的一下默认值

    BAUDRATES = (50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
                 9600, 19200, 38400, 57600, 115200, 230400, 460800, 500000,
                 576000, 921600, 1000000, 1152000, 1500000, 2000000, 2500000,
                 3000000, 3500000, 4000000)
    BYTESIZES = (FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS)
    PARITIES = (PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK, PARITY_SPACE)
    STOPBITS = (STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO)

实例变量

定义了一些串口参数和状态的实例变量,后续还定义了对应的get/set 方法,可以自行去查看

        self.is_open = False
        self.portstr = None
        self.name = None
        # correct values are assigned below through properties
        self._port = None
        self._baudrate = None
        self._bytesize = None
        self._parity = None
        self._stopbits = None
        self._timeout = None
        self._write_timeout = None
        self._xonxoff = None
        self._rtscts = None
        self._dsrdtr = None
        self._inter_byte_timeout = None
        self._rs485_mode = None  # disabled by default
        self._rts_state = True
        self._dtr_state = True
        self._break_state = False
        self._exclusive = None

总结

serialutil文件中定义SerialBase类,传入串口参数,并定义对应的实例变量和状态get/set函数,作为serial模块的主体
文件中定义了SerialException、SerialTimeoutException等I/O、 timeout等错误,都是继承过来的,暂时还没了解那么深入
此外定义了一些byte转换的函数,serial转发中,估计实际转发是byte数据格式,所以会有对应的函数来支持,在后面的write和read中可以看到这方面的使用
附加了一些read操作,但基本不常用
ps:该模块中会用到一个memoryview的对象类型,这个是类型是对byte类数据的一个地址返回类型

a=b'1'
memoryview(a)
<memory at 0x0000029285FBE708>

Serialwin32

执行文件选择

serial文件下的__init.py__中会根据操作系统选择对应的串口执行文件,包含各类读写操作。
window下一般选择Serialwin32

if sys.platform == 'cli':
    from serial.serialcli import Serial
else:
    import os
    # chose an implementation, depending on os
    if os.name == 'nt':  # sys.platform == 'win32':
        from serial.serialwin32 import Serial
    elif os.name == 'posix':
        from serial.serialposix import Serial, PosixPollSerial, VTIMESerial  # noqa
    elif os.name == 'java':
        from serial.serialjava import Serial
    else:
        raise ImportError("Sorry: no implementation for your platform ('{}') available".format(os.name))

主要函数

serialwin32中定义串口常用的一些函数,如open、write、read、close等(父类中是没有定义的)
open:打开串口
close:关闭串口
inwaiting:返回当前接受缓冲区的字节数
read(size=1):读取串口数据,长度为size。若无timeout ,将持续等待知道足够数据;有timeout时,无足够数据时,会等待到timeout时间。 返回结果为byte类型
write:向串口发送数据。会对data进行byte类型转换,不支持unicode类型进行转换
其他函数暂时还没接触太多,暂不列举, 以后有涉及再更新

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值