首页 > 编程语言 >Python中使用pyserial实现串口通信

Python中使用pyserial实现串口通信

时间:2022-11-03 16:47:46浏览次数:60  
标签:None Python list timeout 串口 print pyserial

简介

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

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

安装

环境

  • Python 2.7 或 Python 3.4+
  • Windows 7+

pip安装

pip install pyserial

基本操作步骤

确定串口号

本地电脑通过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)

打开串口

参数说明

__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 或者其他具体数值(支持小数)

简单示例

import serial.tools.list_ports

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

发送数据

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

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

读取数据

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

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

关闭串口

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

s.close()

其他方法

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

完整代码

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()

其它

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

标签:None,Python,list,timeout,串口,print,pyserial
From: https://www.cnblogs.com/blueberry-mint/p/16854960.html

相关文章

  • python中iterable和iterator
    iterable:可迭代对象可以一个一个的返回它的成员,比如list,str,tuple,dict,fileobjects它可以在forloop种使用,forloopin后面接的必须是一个可迭代对象iterator:迭代......
  • python 中print函数实现输出不换行
     001、[root@pc1test3]#python2##python2Python2.7.5(default,Jun282022,15:30:04)[GCC4.8.520150623(RedHat4.8.5-44)]onlinux2Type"help......
  • python 创建 dll 到 c++ 调用
    1.如果想要在c++中debug模式调试模式运行,windows下的话,需要安装时安装debug库2.安装cython3.编写pyx文件,例如demo.pyx:#cython:language_level=3cdefpub......
  • 【Web开发】Python实现Web图表功能(pyecharts入门学习)
    <fontcolor=purpleface=华文行楷size="5">"柳丝榆荚自芳菲,不管桃飘与李飞;"1、简介APythonEchartsPlottingLibrary.ApacheEcharts是一个由百度开源的数据可视化......
  • Python json模块
    一、JSON介绍JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,易于人阅读和编写。二、常用方法方法描述json.loads()将JSON字符串转化为Python......
  • Python实验报告——第10章 文件及目录操作
    实验报告【实验目的】 1.掌握Python自带的函数进行基本文件操作。2.掌握Python内置的os模块及其子模块os.path进行目录相关的操作。【实验条件】1.PC机或者远程编......
  • 【Python_pytest】出错:PytestAssertRewriteWarning: Module already imported so cann
    pytest测试时pytest_check模块错误错误信息:PytestAssertRewriteWarning:Modulealreadyimportedsocannotberewritten:pytest_checkself._mark_plugins_for_......
  • Python定义变量的方法
    什么是变量我们只要与生活中的数学做类型就可以清楚的了解什么是变量 在Python中,变量的概念基本上和初中代数的方程变量是一致的。例如,对于方程式y=x*x,x就是变量。当......
  • 第七章Python实训
    test7-1    test7-2   test7-3    test7-4    test7-5   ......
  • [面试]-- python常见面试问题
    1、哪些对象是可迭代的?怎样实现迭代协议?答:(1)实现了迭代协议的对象都可以迭代,如元组、列表、字典表等    (2)对象中包含内置的next()和__next__()函数,如果迭代对象......