首页 > 编程语言 >Python之pyserial模块 串口通信

Python之pyserial模块 串口通信

时间:2024-10-31 17:46:57浏览次数:1  
标签:ser Python 端口 bytes 串口 serial 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类型数据,解析报文

标签:ser,Python,端口,bytes,串口,serial,pyserial
From: https://www.cnblogs.com/excellentHellen/p/18518544

相关文章

  • Python深度学习进阶与前沿应用(注意力机制详解、生成式模型详解、自监督学习模型详解、
    近年来,伴随着以卷积神经网络(CNN)为代表的深度学习的快速发展,人工智能迈入了第三次发展浪潮,AI技术在各个领域中的应用越来越广泛。注意力机制、Transformer模型(BERT、GPT-1/2/3/3.5/4、DETR、ViT、SwinTransformer等)、生成式模型(变分自编码器VAE、生成式对抗网络GAN、扩散模型Di......
  • ChatGPT、Python和OpenCV支持下的空天地遥感数据识别与计算(地质监测、城市规划、农业
    在科技飞速发展的时代,遥感数据的精准分析已经成为推动各行业智能决策的关键工具。从无人机监测农田到卫星数据支持气候研究,空天地遥感数据正以前所未有的方式为科研和商业带来深刻变革。原文链接:ChatGPT、Python和OpenCV支持下的空天地遥感数据识别与计算(地质监测、城市规划、......
  • 使用MicroPython开发ESP32系列单片机程序入门
    请参考网络ESP32教程地址:https://www.itprojects.cn/coursecenter-hardware.html以ESP32-S3为例讲述烧录固件过程1、下载Micropython固件。首次使用ESP32时,需要将micropython固件烧录到ESP32内。不同芯片,Micropython固件不同。固件下载地址 为:https://micropython.org/dow......
  • centos安装最新Python
    1.卸载现有Python版本sudoyumremovepython2.安装开发工具sudoyumgroupinstall"DevelopmentTools"-ysudoyuminstallopenssl-develbzip2-devellibffi-devel-y3.下载Python源代码curl-Ohttps://www.python.org/ftp/python/3.11.4/Python-......
  • socket在python下的使用
    socket在python下的使用-创建套接字对象-套接字对象方法-socket缓冲区与阻塞-粘包(数据的无边界性)-案例之模拟ssh命令-案例之文件上传1.1创建套接字对象Linux中的一切都是文件,每个文件都有一个整数类型的文件描述符;socket也可以视为一个文件对象,也有文件描述符。im......
  • Python GUI编程 tkinter编程
    tkinter编程思路比喻对于tkinter编程,主要用两个比喻来描述,重点理解容器、组件和布局管理器。 第一个,作画。我们都见过美术生写生的情景,先支一个画架,放上画板,蒙上画布,构思内容,用铅笔画草图,组织结构和比例,调色板调色,最后画笔勾勒。相应的,对应到tkinter编程,那么我们的显示屏就是支......
  • python实战(五)——构建自己的大模型助手
    一、任务目标    本文将利用大语言模型强大的对话能力,搭建一个PC端问答助手。具体来说,我们将使用API来调用我们想要的大模型,并结合Prompt让大模型根据任务类型生成对应的输出。为了更方便地调用大模型助手,我们将结合python第三方库中的语音识别库进行开发,实现调用麦克......
  • Python工具箱系列:Pandas 数据清洗与预处理详解
    目录一、数据清洗与预处理的重要性二、Pandas简介三、Pandas数据清洗与预处理技巧1.读取数据2.查看数据3.处理缺失值4.处理重复值5.处理异常值6.处理数据类型不一致7.处理数据格式不一致8.数据标准化和归一化9.数据编码四、案例:使用Pandas进行数据清......
  • Python数据类型之自定义类型——Class与面向对象编程详解
    目录引言一、面向对象编程基础二、类的定义与对象的创建三、封装性四、继承性五、多态性六、特殊方法与数据类七、使用dataclass装饰器八、面向对象编程的优势结论引言Python是一门功能强大的编程语言,其面向对象编程(OOP)的特性更是为开发者提供了极大的灵活性和......
  • python小白入手第一章基础知识
    单行注释:用#开头,#右边的部分即为所要注释的内容多行注释:用一对三个双引号引起来例子:print("Hi")#print("hello"),相应的第二个print语句不会执行钱包案例:目前学习的三种数据类型:string、int、floattype()语句的使用:在print语句中,直接输出类型信息,同时也可以将数据存储到变量中,......