Pyserial的使用心得

  • Pyserial库的安装
  • Serial对象
    • 常用属性
    • 常用方法
  • 例子
  • 小结

Pyserial库的安装

将python版本更新到2.7及以上,或3.4及以上,然后直接使用pip安装:

pip install pyserial

Serial对象

导入pyserial包后使用serial.Serial创建。
此处因为业务需要,需要同时在windows和linux或macos下访问此应用。
在windows和linux中,端口名称不相同。
在windows下,端口名形如【COMx】(x为整数);
在linux下,端口名形如【/dev/xxxxx】(x为具体端口名)。
因此还引入了platform来判断系统以获取不同系统下的端口。

import serialdef create_connection(self, port):if self._system.lower() == "darwin":self.ser = serial.Serial(port="/dev/{}".format(port),baudrate=115200, #波特率bytesize=8, #字节大小stopbits=1) #停止位elif self._system.lower() == "windows":self.ser = serial.Serial(port=port,baudrate=115200,bytesize=8,stopbits=1)

此处应根据实际业务需求设置【校验位】,【超时时间】等属性。

常用属性

以下为Serial对象所有的属性:

port: str #端口名
baudrate: int #波特率
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 #超时时长
xonxoff: bool #软件流控制的开关
rtscts: bool #硬件(RTS/CTS)流控制的开关
dsrdtr: bool #硬件(DSR/DTR)流控制的开关
write_timeout: float #输出的超时时间
inter_byte_timeout: float #字符间隔超时时长,默认设置为None以禁用
in_waiting: int #返回输入缓冲区(待接收)中的字符数量
out_waiting: int #返回输出缓冲区(待发送)中的字符数量
  • 其中【port】【baudrate】【bytesize】【parity】【stopbits】【in_waiting】很常用。
  • 【timeout】的设置会影响read()方法的行为:
    • 设置为None时,read()会一直从缓冲区中读取数据,直到指定的字符数量已被读取。
    • 设置为0时,read()会立即返回读到的从0到指定数量的字符。
    • 设置为x(x为整数)时,read()会在达到x秒时返回读到的所有字符,或在此之前返回指定数 量的字符。

常用方法


def serial.tool.list_ports()
"""返回所有检测到的串口
"""serial.Serial.open()
"""打开串口
"""serial.Serial.close()
"""关闭串口
"""serial.Serial.read(size=1)
"""从串口中读取最多【size】个的字符
"""serial.Serial.write(data)
"""向串口发送数据【data】,【data】的类型为bytes, bytearray或str。
"""serial.Serial.flush()
"""等待所有数据发送完毕
"""

例子

封装案例:

import serialimport serial.tools.list_portsimport platformfrom time import sleepclass PortManager(object):"""操作串口的类Attributes:_system: str - 当前应用所在环境的系统类型ser: serial.Serial - 串口链接的对象_serial_port: str - 串口名称"""_system = platform.system()ser: serial.Serial_serial_port: strdef set_port(self, port):"""_serial_port的setter"""self._serial_port = portdef get_port(self):"""_serial_port的getter"""return self._serial_portdef list_ports(self):"""获取并返回所有的串口"""list_p = list(serial.tools.list_ports.comports())list_ports_name = []if self._system.lower() == "darwin":list_ports_name = [str(i.name) for i in list_p]elif self._system.lower() == "windows":list_ports_name = [str(i.device) for i in list_p]return list_ports_namedef create_connection(self, port):"""创建串口链接"""if self._system.lower() == "darwin":self.ser = serial.Serial(port="/dev/{}".format(port),baudrate=115200,bytesize=8,stopbits=1)elif self._system.lower() == "windows":self.ser = serial.Serial(port=port,baudrate=115200,bytesize=8,stopbits=1)def send_data(self, value):"""向串口发送数据"""write_data = bytearray.fromhex(value)try:sleep(0.1)if self.ser.out_waiting:self.ser.reset_output_buffer()if self.ser.write(write_data):self.ser.flush()else:if self.ser.write(write_data):self.ser.flush()self.ser.reset_output_buffer()return Trueexcept Exception as e:print(e)self.ser.reset_output_buffer()return Falsedef read_data(self):"""从串口读取数据"""try:sleep(0.1)if self.ser.in_waiting:bs = self.ser.read(self.ser.in_waiting).hex()self.ser.reset_input_buffer()res = ''for i in range(len(bs)):res += bs[i]if i % 2 == 1:res += ' 'res = res.rstrip(' ')return reselse:sleep(0.1)if self.ser.in_waiting:bs = self.ser.read(self.ser.in_waiting).hex()self.ser.reset_input_buffer()res = ''for i in range(len(bs)):res += bs[i]if i % 2 == 1:res += ' 'res = res.rstrip(' ')return reselse:self.ser.reset_input_buffer()return ""except Exception as e:print(e)self.ser.reset_input_buffer()return Nonedef close(self, *ser):"""关闭串口"""if ser:ser[0].close()else:self.ser.close()

小结

这是用bootstrap构建的一个web app,主要用途是配置测试公司客制化的继电器板卡。
此app就是利用pyserial与串口通信。

配置组模式:

板卡控制面板:

板卡配置面板:

连接错误处理:

多板卡级联时的板卡切换:

Pyserial库使用心得相关推荐

  1. python第三方库之学习pyserial库--串口通信

    pyserial串口通信库 1.安装pyserial库 2.填写串口参数的注意事项 3.简单封装一下 4.碰到的bug 1.安装pyserial库 pip install pyserial versi ...

  2. Py之pyserial:Python的pyserial库的简介、安装、使用方法之详细攻略

    Py之pyserial:Python的pyserial库的简介.安装.使用方法之详细攻略 目录 pyserial库的简介 pyserial库的安装 pyserial库的使用方法 pyserial库的简 ...

  3. C++导出EXCEL开源库xlslib库使用心得

    使用教程 第一步: 下载xlslib库,本文建立在xlslib2.5.0版本基础上. 下载地址xlsLib download | SourceForge.net 第二步: 切换到解压文件目录xlsli ...

  4. mysql命令行如何建库_MySQL心得2--命令行方式建库和表

    1.创建使用create database或create schema命令可以创建数据库.create database 库名create database if not exists 库名(创建库并 ...

  5. Folium库使用心得(一)

    参考代码:https://nbviewer.jupyter.org/github/python-visualization/folium/tree/master/examples/ 初次接触阿里云的天 ...

  6. bcg库使用心得两则

    作者:朱金灿 来源:http://blog.csdn.net/clever101 最近帮同事解决了两个BCG库的使用问题,特记录下来. 一是在outlook风格停靠栏上创建对话框的做法.代码如下: C ...

  7. muduo网络库使用心得

    上个月看了朋友推荐的mudo网络库,下完代码得知是国内同行的开源作品,甚是敬佩.下了mudo使用手冊和035版的代码看了下结构,感觉是一个比較成熟并且方便使用的网络库.本人手头也有自己的网络库,尽管不 ...

  8. pythonturtle库使用心得_[python库]turtle库总结

    turtle库总结 1.画布: (1) turtle.screensize(宽,高,背景颜色) (2) turtle.setup(width=0.?,height=0.?,startx=?,start ...

  9. thrift 库使用心得

    前言 thrift 库的设计理念 thrift 开发常见问题 thrift 身份认知机制 大数据传输 主动抛出异常 接口异常被动保护机制 客户端多线程保护机制 C 兼容XP 系统 thrift 兼容X ...

  10. 【原创】Libjpeg 库使用心得(一) JPEG图像DCT系数的获取和访问

    [原创]继续我的项目研究,现在采用Libjpeg库函数来进行处理,看了库函数之后发现C语言被这些人用的太牛了,五体投地啊...废话不多说,下面就进入正题. Libjpeg库在网上下载还是挺方便的,这里 ...

最新文章

  1. 2022-2028年中国工业大数据行业深度调研及投资前景预测报告
  2. e开头的正则 php,PHP正则表达式e模式
  3. HTML语言怎么晋升,学会提问,对你的职场晋升有很大的帮助
  4. Raft当初为什么会被命名为Raft?
  5. Hadoop HA集群的搭建
  6. python实现单例模式的几种方式_基于Python中单例模式的几种实现方式及优化详解...
  7. 简单Nlp分析套路,获取数据(爬虫),数据处理(分词,词频,命名实体识别与关键词抽取),结果展现
  8. 代理模式、动态代理及其应用
  9. hacker rank bash
  10. 架构师害怕程序员知道的十项技能
  11. 用Java判断ab大小_比例类数据的差异性检验与AB测试的终止点
  12. CNAS 认证机构认可规范文件清单
  13. 【FaceRevelio】一种用于智能手机的带有前置摄像头的 人脸活跃度检测系统
  14. 28岁学Java晚不晚?快30学java还来得及吗?
  15. 前置条件,不变性条件,后置条件 --《java并发编程实战》
  16. Binding的三种方式
  17. SSM出租车查询系统 毕业设计-附源码220915
  18. 软件项目需求调研过程
  19. CPU方案简介SSD201 - 智能网关中控
  20. java面试题----选择题02

热门文章

  1. 电子元器件商城与数据手册下载网站汇总
  2. 苹果分屏软件_苹果iOS14曝光,全是安卓已有的功能!
  3. 波兰表达式 逆波兰表达式
  4. Excel批量转Word
  5. access vba代码全部丢失_Access2016由于无法读取数据库中所含的VBA工程,因此无法打开此数据库。只有先删除VBA工程,然后才能打开数据库...
  6. 【AI教程】AI基础学习笔记(第1天)
  7. ps3手柄在linux ubuntu 下的使用
  8. 火狐浏览器快速代理插件(FoxyProxy Standard)
  9. div在html垂直居中,div 垂直居中(css div水平垂直居中六种方法)
  10. qt.qpa.xcb: could not connect to display qt.qpa.plugin: Could not load the Qt platform plugin “xcb“