Pyserial库使用心得
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库使用心得相关推荐
- python第三方库之学习pyserial库--串口通信
pyserial串口通信库 1.安装pyserial库 2.填写串口参数的注意事项 3.简单封装一下 4.碰到的bug 1.安装pyserial库 pip install pyserial versi ...
- Py之pyserial:Python的pyserial库的简介、安装、使用方法之详细攻略
Py之pyserial:Python的pyserial库的简介.安装.使用方法之详细攻略 目录 pyserial库的简介 pyserial库的安装 pyserial库的使用方法 pyserial库的简 ...
- C++导出EXCEL开源库xlslib库使用心得
使用教程 第一步: 下载xlslib库,本文建立在xlslib2.5.0版本基础上. 下载地址xlsLib download | SourceForge.net 第二步: 切换到解压文件目录xlsli ...
- mysql命令行如何建库_MySQL心得2--命令行方式建库和表
1.创建使用create database或create schema命令可以创建数据库.create database 库名create database if not exists 库名(创建库并 ...
- Folium库使用心得(一)
参考代码:https://nbviewer.jupyter.org/github/python-visualization/folium/tree/master/examples/ 初次接触阿里云的天 ...
- bcg库使用心得两则
作者:朱金灿 来源:http://blog.csdn.net/clever101 最近帮同事解决了两个BCG库的使用问题,特记录下来. 一是在outlook风格停靠栏上创建对话框的做法.代码如下: C ...
- muduo网络库使用心得
上个月看了朋友推荐的mudo网络库,下完代码得知是国内同行的开源作品,甚是敬佩.下了mudo使用手冊和035版的代码看了下结构,感觉是一个比較成熟并且方便使用的网络库.本人手头也有自己的网络库,尽管不 ...
- pythonturtle库使用心得_[python库]turtle库总结
turtle库总结 1.画布: (1) turtle.screensize(宽,高,背景颜色) (2) turtle.setup(width=0.?,height=0.?,startx=?,start ...
- thrift 库使用心得
前言 thrift 库的设计理念 thrift 开发常见问题 thrift 身份认知机制 大数据传输 主动抛出异常 接口异常被动保护机制 客户端多线程保护机制 C 兼容XP 系统 thrift 兼容X ...
- 【原创】Libjpeg 库使用心得(一) JPEG图像DCT系数的获取和访问
[原创]继续我的项目研究,现在采用Libjpeg库函数来进行处理,看了库函数之后发现C语言被这些人用的太牛了,五体投地啊...废话不多说,下面就进入正题. Libjpeg库在网上下载还是挺方便的,这里 ...
最新文章
- 2022-2028年中国工业大数据行业深度调研及投资前景预测报告
- e开头的正则 php,PHP正则表达式e模式
- HTML语言怎么晋升,学会提问,对你的职场晋升有很大的帮助
- Raft当初为什么会被命名为Raft?
- Hadoop HA集群的搭建
- python实现单例模式的几种方式_基于Python中单例模式的几种实现方式及优化详解...
- 简单Nlp分析套路,获取数据(爬虫),数据处理(分词,词频,命名实体识别与关键词抽取),结果展现
- 代理模式、动态代理及其应用
- hacker rank bash
- 架构师害怕程序员知道的十项技能
- 用Java判断ab大小_比例类数据的差异性检验与AB测试的终止点
- CNAS 认证机构认可规范文件清单
- 【FaceRevelio】一种用于智能手机的带有前置摄像头的 人脸活跃度检测系统
- 28岁学Java晚不晚?快30学java还来得及吗?
- 前置条件,不变性条件,后置条件 --《java并发编程实战》
- Binding的三种方式
- SSM出租车查询系统 毕业设计-附源码220915
- 软件项目需求调研过程
- CPU方案简介SSD201 - 智能网关中控
- java面试题----选择题02
热门文章
- 电子元器件商城与数据手册下载网站汇总
- 苹果分屏软件_苹果iOS14曝光,全是安卓已有的功能!
- 波兰表达式 逆波兰表达式
- Excel批量转Word
- access vba代码全部丢失_Access2016由于无法读取数据库中所含的VBA工程,因此无法打开此数据库。只有先删除VBA工程,然后才能打开数据库...
- 【AI教程】AI基础学习笔记(第1天)
- ps3手柄在linux ubuntu 下的使用
- 火狐浏览器快速代理插件(FoxyProxy Standard)
- div在html垂直居中,div 垂直居中(css div水平垂直居中六种方法)
- qt.qpa.xcb: could not connect to display qt.qpa.plugin: Could not load the Qt platform plugin “xcb“