Python中使用pyserial实现串口通信

1|0简介

pyserial是基于Python实现的,用于操作串口的第三方库,它支持 Windows、Linux、OSX、BSD等多个平台。

本文主要讲解在Windows环境下使用pyserial来实现串口通信的基本方法。

2|0安装

2|1环境

  • Python 2.7 或 Python 3.4+
  • Windows 7+

2|2pip安装

pip install pyserial

3|0基本操作步骤

3|1确定串口号

本地电脑通过usb连接设备,打开设备管理器可以在端口中看到如下信息

usb-to-serial

上面的COM75就是对应的串口号

或者执行以下代码列出当前连接的串口设备

import serial.tools.list_ports ports_list = list(serial.tools.list_ports.comports()) for comport in ports_list: print(comport[0], comport[1])

结果如下:

COM1 通信端口 (COM1) COM75 Prolific USB-to-Serial Comm Port (COM75)

3|2打开串口

1|0参数说明

__init__(port=None, baudrate=9600, bytesize=EIGHTBITS, parity=PARITY_NONE, stopbits=STOPBITS_ONE, timeout=None, xonxoff=False, rtscts=False, write_timeout=None, dsrdtr=False, inter_byte_timeout=None, exclusive=None)
  • port – 串口名称或 None
  • baudrate (int) – 波特率, 如 9600、115200等
  • bytesize – 数据位,可取值为: FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS
  • parity – 校验位,可取值为: PARITY_NONE, PARITY_EVEN, PARITY_ODD PARITY_MARK, PARITY_SPACE
  • stopbits – 停止位,可取值为: STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO
  • timeout (float) – 读超时时间,可取值为 None, 0 或者其他具体数值(支持小数)。当设置为 None 时,表示阻塞式读取,一直读到期望的所有数据才返回;当设置为 0 时,表示非阻塞式读取,无论读取到多少数据都立即返回;当设置为其他数值时,表示设置具体的超时时间(以秒为单位),如果在该时间内没有读取到所有数据,则直接返回
  • xonxoff (bool) – 软件流控,可取值为 True, False
  • rtscts (bool) – 硬件 [RTS(请求发送)/CTS(清除发送)] 流控,可取值为 True, False
  • dsrdtr (bool) – 硬件 [DSR(数据终端准备好)/DTR(数据准备好)] 流控,可取值为 True, False
  • write_timeout (float) – 写超时时间,可取值为 None, 0 或者其他具体数值(支持小数)

1|0简单示例

import serial.tools.list_ports s = serial.Serial('COM75', 115200, timeout=0.5) print(s.isOpen()) # True

3|3发送数据

发送数据使用write()方法,发送的数据只能是bytes类型,因此需要对发送的字符串进行编码操作

cmd = 'ifconfig\r\n' # 命令带换行符 length = s.write(cmd.encode('utf-8')) print(length) # 发送的字节数为10

3|4读取数据

读取数据可以使用以下方法

  • read() - 默认一次读取一个字节,可以通过传入参数指定每次读取的字节数,返回值为bytes类型
  • readall() - 读取串口接收的全部数据,返回值为bytes类型
  • readlines() - 读取多行数据,返回值为list类型,列表元素类型为bytes类型
print(s.read(1024)) # print(s.readlines()) # print(s.readall())

3|5关闭串口

关闭串口很简单,直接调用 close() 方法即可

s.close()

3|6其他方法

  • in_waiting():返回接收缓存中的字节数。
  • flush():等待所有数据写出。
  • flushInput():丢弃接收缓存中的所有数据。
  • flushOutput():终止当前写操作,并丢弃发送缓存中的数据。

3|7完整代码

import serial s = serial.Serial('COM75', 115200, timeout=0.5) cmd = 'ifconfig\r\n' s.write(cmd.encode('utf-8')) res = s.readall().decode() print(res) s.close()

4|0其它

以上就是pyserial库的基本使用方法,想了解更多可以去pyserial官方文档查阅。


__EOF__

本文作者蓝莓薄荷
本文链接https://www.cnblogs.com/blueberry-mint/p/16854960.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   蓝莓薄荷  阅读(5589)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示