python串口通信 - serial

本文介绍了Python进行串口通信的方法,包括安装步骤及测试代码示例。讲解了波特率与传输速率的关系,并提供了两个测试代码,其中一个展示了在并发write操作时可能出现的超时异常情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装
pip install pyserial
方法
# 获取当前系统内的所有检测到的串口信息
serial.tools.list_ports.comports()

"""
- 根据设置的波特率发送数量,bytes_data数量不会影响效率
- 传入字节类型数据, 成功时返回传入数据长度
    - 当被cancel_write函数中断后(结果见测试代码1输出)
        - Windows、Linux返回0
        - Mac返回已写入数据长度
- 超时抛出异常(serial.serialutil.SerialTimeoutException: Write timeout) 
- 异常出现情况
    - 设置超时时间(write_timeout)后,单次写入超过超时时间
    - (???, 见测试代码2)同时进行多次write, 当耗时长的write结束时将抛出该异常
"""
serial.write(bytes_data)

"""
- 从串行端口读取大小字节。如果设置了超时,则可以按要求返回较少的字符。
如果没有超时,它将阻塞直到读取请求的字节数。
    - 当被cancel_read函数中断后
        - Windows返回0
        - Linux、Mac返回已读取的数据
- 设置超时时间(timeout), 不会抛出异常
- 超时后继续read不丢包
"""
serial.read(size)  

# 中断write
cancel_write() 

# 中断read
cancel_read()

串口每秒传输的字节数 = 波特率 / 10 , 10为 8 bit + 2bit的帧头帧尾

  • 测试代码如下
import serial, threading
import serial.tools.list_ports
import time
# 读取当前系统内的串口信息
for i in serial.tools.list_ports.comports():
    print(i)


def write(ser, data):
    # 超时后跑出异常(serial.serialutil.SerialTimeoutException: Write timeout)
    st = time.time()
    write_length = ser.write(data)
    print("write length: ", write_length)
    write_time = time.time() - st
    print("write time: ", write_time)</
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值