Python之pyserial模块 串口通信

python之pyserial模块

原文链接:https://www.cnblogs.com/sureZ-learning/p/17054481.html
pyserial 模块封装了对串口的访问,兼容各种平台(Windows、Linux、MACOS等)。

其支持的特性如下:

所有平台基于类的接口相同

端口可以通过python来设置

支持不同数据长度、停止位、奇偶校验位、流量控制、RTS/CTS 和 Xon/Xoff 特性

可以设置是否超时

读取/写数据很简单,调用read或write方法(同样支持readline、readlines等方法)

端口设置为二进制传输,没有空字节、CR-LF等处理,这使得这个模块比较好用

兼容io模块

1 模块安装

特别注意要安装库名为 pyserial。错安装serial库时,要将serial库卸载删除。

pip install pyserial

2 模块使用

2.1 模块的初始化

import serial
import serial.tools.list_ports# 打印所有com列表
li = serial.tools.list_ports.comports()
for ser in li:
print(ser.name)# 打开com13,波特率115200
# 以下是windows平台,linux平台是不同的port名,如/dev/ttyS0等
ser = serial.Serial(port="COM13",
baudrate=115200,
bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
timeout=0.5)# 判断是否打开成功
if ser.isOpen():
print (f'{ser.port} is Opened')
else:
print (f'{ser.port} is Closed')# 不用串口时可以关闭
# ser.close()

2.2 模块的读写

读取/写数据很简单,调用read或write方法(同样支持readline、readlines、writelines等方法),

由于端口设置为二进制数据流传输,所以需要通过encode与decode方法将数据流加工为人们易于阅读的utf-8格式。

import serial# 读串口
# read() - 默认一次读取一个字节,可以通过传入参数指定每次读取的字节数,返回值为bytes类型
# readall() - 读取串口接收的全部数据,返回值为bytes类型
# readlines() - 读取多行数据,返回值为list类型,列表元素类型为bytes类型
ser = serial.Serial("COM13", 115200, timeout=0.5)
for line in ser.readlines():
print(line.decode('utf-8'))# 写一个字符串“hello”
write_len = ser.write("hello".encode('utf-8'))
ser.flush() # 等待所有数据写出

ser.close()

2.3 其它方法

方法 说明
ser.isOpen() 查看端口是否被打开
ser.open() 打开端口
ser.close() 关闭端口
ser.read() 从端口读字节数据,默认1个字节
ser.readall() 从端口接收全部数据 ,bytes类型
ser.write("hello".encode('utf-8')) 向端口写数据 ,bytes类型
ser.readline() 读一行数据 ,bytes类型
ser.readlines() 读多行数据,return 列表元素类型为bytes类型
in_waiting() 返回接收缓存中的字节数
flush() 等待所有数据写出
flushInput() 丢弃接收缓存中的所有数据
flushOutput() 终止当前写操作,并丢弃发送缓存中的数据参考:

1 pyserial官方文档

https://pyserial.readthedocs.io/en/latest/pyserial.html

2 python学习:python serial

https://blog.csdn.net/W295723987/article/details/128053688

二进制流处理及数据收发算法

bytes类型

举例:frame_bytes=b'\x01\x10\x00\x01\x00\x02\x10\x08'

 

通信信息是字符串,转为bytes序列用于串口接收与发送:

dataBytes =  strData.encode("uft-8")#将字符串转为bytes,用于发送

strData     =  dataBytes .decode("uft-8")#将bytes转为字符串,用于接收

通信信息是数字序列,转为bytes序列用于串口接收与发送:

 

发送第一步:

reg_byte_array = array("B") #  定义8位数据类型的数组。 参数“B”含义见下表。

 

发送第二步:

遍历,将要发送的数组转为 8位数据类型的数组

reg_byte_array.append(data & 0xFF) # 利用append 方法添加数据       

发送第三步:

将 8位数据类型的数组 转为 bytes

dataBytes =     bytes(reg_byte_array) #将array转为bytes,用于发送 

发送第四步:

调用pyserial库,发送数据

write_len = ser.write(dataBytes)

  

接收第一步:

       调用pyserial库的in_waiting()方法,串口BUFF内是否有数据 

接收第二步:

       调用pyserial库的读串口方法,得到bytes类型数据

接收第三步:

       遍历bytes类型数据,解析报文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/824747.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

没意思。

本文来自博客园,作者:一石数字欠我15w!!!,转载请注明原文链接:https://www.cnblogs.com/52-qq/p/18518526

layui内置图标

本文来自博客园,作者:已不知落在何地,转载请注明原文链接:https://www.cnblogs.com/yongweijian/p/18518513

BERT模型分析

在2018年Google提出Transformer框架后,2019年,BERT作为最早期的大模型,便应运而生,因为BERT有强大的自然语言理解能力,因此在其被提出后便风靡NLP领域。研读BERT代码,是因为BERT作为大模型起源鼻祖,比GPT起源还早,弄明白其算法思想和其主体代码具体实现逻辑,有利于理解…

mse~路由实现某个页面的灰度功能

起因 我有个网站A【蓝色服务】,要对网站A进行改版【绿色服务】,其中用户中心已经改完了,希望当用户访问时,如果http请求头中包含isGroup,并且isGroup=0时,去新的绿色服务,反之就还是去蓝色服务。 前提蓝绿服务,域名是同一个,如lind.gray.com 蓝绿服务,各个页面的URL是…

1024!一张照片定制程序员科技感写真

在这个属于代码世界的节日里,我们为你准备了一份特别的礼物,不论你是前端大牛,还是后端高手;无论是数据分析师,还是算法工程师,只需一张图片,创下你与代码共舞的瞬间,一键生成专属于你的超写实程序员写真!在这个属于代码世界的节日里,我们为你准备了一份特别的礼物,…

烟雾检测识别智慧矿山一体机水仓水位异常识别非煤矿山视频智能监控系统的重要性

非煤矿山作业环境复杂多变,存在滑坡、坍塌、爆炸等多种潜在危险。传统的人工监控方式不仅效率低下,而且难以做到全天候、无死角覆盖。智慧矿山一体机通过高清摄像头与先进的人工智能算法相结合,能够实时监测矿山内的异常情况,如人员违规操作、设备故障预警、地质结构变化等…

『模拟赛』多校A层冲刺NOIP2024模拟赛16

『模拟赛记录』多校A层冲刺NOIP2024模拟赛16Rank 依托,给我烂完了(A. 四舍五入 唐题,赛时被硬控 3h。 发现枚举 \(i\) 是一个很没前途的选择,分成三段后仍然需要 \(\mathcal{O(n)}\) 去跑 \(\left[1,\lfloor{\frac{i}{2}}\rfloor\right]\) 这一段,复杂度仍是 \(\mathcal{O…

10.31

删除上述路径文件 解决 配置 nodejs 时 配置源文件的地址 代码 出现命令不认识的问题

LINQ SelectMany的应用场景

示例 1:多层集合展平 假设你有一个列表,每个元素都是一个字符串数组,你想将所有的字符串展平成一个单一的字符串列表。 示例 2:嵌套循环 假设你有一个用户列表,每个用户有一个订单列表,你想获取所有用户的订单列表。 示例 3:多对多关系 假设你有一个学生列表,每个学生…

数据可视化 matplotlib

数据可视化数据可视化指的是通过可视化表示来探索的数据,它与数据挖掘紧密相关,而数据挖掘指的是使用代码来探索数据集的规律和关联。在基因研究、天气研究、政治经济分析等众多领域,大家都使用python来完成数据秘密集型工作。数据科学家使用python编写了一系列令人印象深刻…

算法网关视频分析网关周界入侵智慧营业厅视频管理系统设计方案

在现代商业环境中,尤其是对于金融服务、零售和客户服务等高度依赖客户互动的行业,营业厅的智能化管理变得尤为重要。为了提升服务质量、保障客户安全、优化运营效率,我们推出了一款集成了最新人工智能技术的智能视频监控解决方案。 一、项目方案 本项目包含:控制平台、AI算…

2024-2025-1 20241401 《计算机基础与程序设计》 第六周学习总结

班级链接 2024计算机基础与程序设计作业要求 第六周作业作业目标 ①Polya如何解决问题 ②简单类型与组合类型 ③复合数据结构 ④查找与排序算法 ⑤算法复杂度 ⑥递归 ⑦代码安全教材学习内容总结 《计算机科学概论》第七章如何解决问题,包括提出问题、寻找熟悉的情况、分治法、…