首页 > 编程语言 >Python的串口通信库

Python的串口通信库

时间:2024-09-21 09:19:45浏览次数:3  
标签:Python 通信 串口 流控制 serial pyserial

一、串口通信基础

1.1 串口通信概述

串口通信(Serial Communication),也称为串行通信,是一种将数据位按顺序一位一位地传输的通信方式。与并行通信相比,串口通信在传输速度上可能稍逊一筹,但其具有传输线少、成本低、易于实现远距离通信等优点,因此广泛应用于各种嵌入式系统、仪器仪表、计算机外设等领域。

1.2 RS-232、RS-485与RS-422

在串口通信中,最常见的标准包括RS-232、RS-485和RS-422。RS-232是最早也是最常用的标准之一,它定义了数据终端设备(DTE)和数据通信设备(DCE)之间的物理接口和电气特性。然而,RS-232的传输距离有限(通常不超过15米),且信号电平较高,不适合长距离和高速率的通信。相比之下,RS-485和RS-422则采用了差分信号传输技术,具有更强的抗干扰能力和更远的传输距离,适用于工业现场等恶劣环境。

1.3 波特率与数据格式

串口通信中的波特率(Baud Rate)表示每秒传输的符号数(或比特数),是衡量数据传输速度的重要指标。常见的波特率有9600、19200、38400、57600、115200等。此外,串口通信还需要定义数据格式,包括数据位(Data Bits)、停止位(Stop Bits)和校验位(Parity Bit)等参数,以确保数据的正确传输和接收。

二、Python串口通信库:pyserial

2.1 pyserial简介

pyserial是Python中用于串口通信的一个非常流行的第三方库。它提供了一个简单的接口来访问串行端口,使得Python程序能够轻松地与串口设备进行数据交换。pyserial支持Windows、Linux和MacOS等多个操作系统平台,并且与Python的标准库(如threadingselect等)无缝集成,方便用户进行多线程、非阻塞等高级编程。

2.2 pyserial的安装

安装pyserial非常简单,可以通过Python的包管理工具pip直接安装:

pip install pyserial
安装完成后,即可在Python代码中导入并使用pyserial了。

2.3 pyserial的核心功能

pyserial提供了丰富的API来支持串口通信的各个方面,主要包括以下几个方面:

  • 串口列表获取:可以使用serial.tools.list_ports.comports()函数列出当前系统中可用的串口。
  • 串口对象创建:通过serial.Serial()类创建一个串口对象,并指定端口名、波特率、数据位、停止位、校验位等参数。
  • 数据读写:串口对象提供了read()readline()readlines()等方法来读取数据,以及write()方法来发送数据。
  • 串口配置:可以在创建串口对象时指定配置参数,也可以在对象创建后通过修改属性来动态调整配置。
  • 流控制:支持硬件流控制和软件流控制,以应对不同场景下的数据传输需求。
  • 超时设置:可以设置读写操作的超时时间,以避免程序因等待数据而陷入无限循环。
三、pyserial实战应用

3.1 基本串口通信示例

以下是一个使用pyserial进行基本串口通信的示例代码:

import serial  
import time  
  
# 创建串口对象  
ser = serial.Serial('COM3', 9600, timeout=1)  # 假设串口名为COM3,波特率为9600  
  
try:  
    # 发送数据  
    ser.write(b'Hello, Serial Port!\n')  # 注意发送的是字节串  
      
    # 接收数据  
    while True:  
        if ser.in_waiting > 0:  # 判断缓冲区中是否有数据  
            incoming_data = ser.readline().decode('utf-8').rstrip()  # 读取一行数据并解码,去除末尾的换行符  
            print("Received:", incoming_data)  
        time.sleep(0.1)  # 稍作延时,避免过度占用CPU  
  
except KeyboardInterrupt:  
    print("Program interrupted by user.")  
  
finally:  
    # 关闭串口  
    ser.close()
3.2 多线程串口通信

在实际应用中,经常需要同时处理多个串口或同时进行数据的读写操作。这时,可以使用Python的threading模块来实现多线程串口通信。以下是一个简单的示例:

import serial  
import threading  
  
def read_from_serial(ser):  
    while True:  
        if ser.in_waiting > 0:  
            data = ser.readline().decode('utf-8').rstrip()  
            print("Received:", data)  
  
# 创建串口对象  
ser = serial.Serial('COM3', 9600, timeout=1)  
  
# 创建并启动读线程  
read_thread = threading.Thread(target=read_from_serial, args=(ser,))  
read_thread.start()  
  
# 主线程可以执行其他任务,如发送数据等  
# ...  
  
# 注意:在实际应用中,通常需要在程序退出前正确地停止线程并关闭串口  
# 这里为了简化示例,省略了这些步骤
3.3 错误处理与异常捕获

在进行串口通信时,可能会遇到各种异常情况,如串口打开失败、读写超时、数据格式错误等。因此,在编写串口通信程序时,需要合理地处理这些异常情况。pyserial本身会抛出一些异常来指示错误情况,如serial.SerialExceptionserial.SerialTimeoutException等。开发者可以通过try-except语句来捕获这些异常,并采取相应的处理措施。

四、pyserial的高级应用

4.1 非阻塞串口通信

在某些场景下,需要实现非阻塞的串口通信,即在没有数据可读时,程序不会停留在读操作上等待,而是继续执行其他任务。pyserial本身并不直接支持非阻塞模式,但可以通过设置超时时间或使用selectpoll等机制来实现类似的效果。

4.2 串口通信的流控制

pyserial支持硬件流控制和软件流控制。硬件流控制通常通过串口线的RTS/CTS或DTR/DSR信号来实现,而软件流控制则通过特定的字符(如XON/XOFF)来控制数据的发送和接收。在使用流控制时,需要根据实际设备和通信协议的要求来选择合适的流控制方式。

4.3 串口数据的解析与处理

串口接收到的数据通常是原始的字节流,需要根据具体协议进行解析和处理才能得到有意义的信息。这可能需要编写额外的解析代码,或使用现有的解析库来辅助完成。在处理复杂的数据格式时,还需要考虑数据的同步、校验和错误恢复等问题。

五、pyserial与其他技术的集成

5.1 与GUI框架的集成

在开发具有图形用户界面的串口通信程序时,可以将pyserial与Python的GUI框架(如Tkinter、PyQt、wxPython等)集成起来。通过GUI框架提供的控件和事件处理机制,可以方便地实现串口配置、数据显示、用户交互等功能。

5.2 与网络技术的集成

在某些应用场景下,需要将串口数据通过网络传输到远程服务器或客户端。这时,可以将pyserial与Python的网络编程库(如socket、requests等)集成起来,实现串口数据与网络数据的转换和传输。此外,还可以使用TCP/IP协议、MQTT协议等网络通信协议来优化数据传输的效率和可靠性。

5.3 与数据库的集成

在某些需要持久化存储串口数据的场景中,可以将pyserial与Python的数据库编程库(如sqlite3、pymysql、psycopg2等)集成起来。通过数据库提供的存储和查询功能,可以方便地管理串口数据,并为其他应用程序提供数据支持。

标签:Python,通信,串口,流控制,serial,pyserial
From: https://blog.csdn.net/weixin_45710581/article/details/142411122

相关文章

  • python提问及解析
    在看答案之前,可以先试试自己做哦!1.图书馆借书还书系统问题描述问题:设计一个Python程序,该程序模拟一个大型图书馆的图书管理系统。图书馆拥有成千上万的书籍,每本书都有一个唯一的ISBN号、书名、作者、出版年份和所在书架的位置。系统需要支持以下功能:添加书籍:能够添加新书到......
  • python+Flask + vue 的博客系统
    python+Flask+vue的博客系统。系统包含源码➕数据库➕仑纹(ppt)。开发技术:Python flaskvuemysql。项目内容:博客系统设计主要有管理员和用户两个功能模块。以下将对这两个功能的作用进行详细的剖析。管理员模块:管理员是系统中的核心用户,管理员登录后,可以对后台系统进......
  • 基于Python flask的医院管理学院,医生能够增加/删除/修改/删除病人的数据信息,有可视化
    研究背景随着信息技术的飞速发展,医疗行业逐渐进入了数字化管理的时代。传统的医院管理方式通常依赖于手动记录和纸质文件,不仅工作量巨大,而且容易导致数据的丢失或错误,无法及时、准确地反映病人的健康状况和医院的运营效率。在这种背景下,基于现代信息技术的医院管理系统应运而......
  • 计算机毕业设计 基于Python的汽车销售管理系统 Python+Django+Vue 前后端分离 附源码
    ......
  • python爬虫之json数据的提取
    json数据提取需要安装jsonpath库并且只对json数据有用#一个data字典data={}#取出python从入门到精通的价格print(data['库存']['书籍'][0]['价格'])#jsonpathimportjsonpath#jsonpath。jsonpath(数据,'语法规则')#$代表根节点#..不管位置,选择符合条件的数......
  • Python安装库的镜像源
    众所周知,我们在安装python库的时候经常报错,原因是国内的下载过慢,这时候我们就要使用一个镜像源来下载,常用的镜像源已经列举在下面啦1.清华大学(完全度和速度都很好,是一个优秀的pip镜像源)https://pypi.tuna.tsinghua.edu.cn/simple2.阿里云(完全度和速度也很好,是一个不错的选......
  • python函数三:拆包和交换变量值、引用、匿名函数
    文章目录1.拆包和交换变量值1.1拆包1.2交换变量值2.引用2.1了解引用2.1把引用当作参数传递3.匿名函数3.1lambda语法3.2lambda的应用3.3使用使用函数形式来求解某天是该年的第几天?1.拆包和交换变量值1.1拆包拆包:把组合形成的元组形式的数据,拆分出单个......
  • 探索 Python 的火焰:Fire 库的神秘力量
    文章目录......
  • 调试、开发板、串口、Vitis、源码。
    ###调试和编译步骤1.**准备工作**:  -在开始调试之前,请确保开发板已通电,并且正确连接了开发板上的串口(USB-232)。查看串口号可以通过设备管理器进行确认。2.**编译项目**:  -右击项目,在弹出的菜单中选择编译选项来编译工程。3.**启动调试**:  -右击“he......
  • 未来通信抢先看!遨游通讯2024年中国国际信息通信展亮点剧透
    2024年中国国际信息通信展览会将于9月25日-27日在北京国家会议中心举行,本界展会以“推动数实深度融合,共筑新质生产力”为主题。在通信技术日新月异的今天,卫星通信、人工智能、低碳节能等技术理念正引领着通信行业迈向新的高度。遨游通讯作为“危、急、特”赛道的开创者,同时作为......