python实现串口通信
python实现串口通信是一件简单的事情,只要通过pyserial模块就可以实现。
一、串口通信
1、什么是串口通信?
串口通信是一种通过串行接口(Serial Port)进行数据传输的通信方式。在串口通信中,数据位按顺序一位一位地传输,相比并行通信,串口通信只需要几根线缆就能实现数据传输。串口通信通常用于连接计算机与外部设备,例如传感器、打印机、微控制器等。串口通信主要有两种标准:RS-232和RS-485。
(1)RS-232:RS-232是一种单点通信协议,适用于连接两台设备,其中一台设备作为主设备(例如计算机),另一台设备作为从设备。RS-232使用多根线缆,包括数据线、控制线和地线。RS-232通信距离较短,通常在15米以内。
(2)RS-485:RS-485是一种多点通信协议,适用于连接多个设备。RS-485可以连接多达128个设备,其中每个设备都有独特的地址。RS-485使用两根线缆(A线和B线)进行数据传输,这种差分信号传输方式使得RS-485通信距离可以达到1200米,同时具备抗干扰能力。
串口通信通常以串行数据的形式传输,其中数据位逐位传输,通信的两端使用同样的波特率、数据位、停止位和校验位等参数,以确保正确的数据传输。串口通信在工业自动化、嵌入式系统等领域广泛应用。
2、RS-232与RS-485在串口通信编程上有啥区别?
没啥区别。特别是单点通信上是一致的。至于RS-485的多点通信,一般依赖于基于串口通信上的协议,如ModbusRTU。因此,无论是RS-232还是RS-485通信,通用的步骤都需要遵循:
(1)选择合适的串口库: 使用Python中的串口库(如PySerial)来建立串口连接。
(2)配置串口参数: 包括波特率(Baud Rate)、数据位、停止位、校验位等。通信的两端必须使用相同的参数配置。
(3)打开串口连接: 使用串口库打开串口连接,可以指定串口名称(例如COM1、/dev/ttyS0等)和波特率等参数。
(4)发送和接收数据: 使用串口库提供的方法发送和接收数据。发送时,数据通常需要编码为字节流;接收时,接收到的字节流需要解码为可读的数据。
(5)关闭串口连接: 在通信结束后,记得关闭串口连接,释放串口资源。
3、波特率、数据位、停止位、校验位是怎么定义的?
在串口通信中,波特率、数据位、停止位和校验位是用来定义数据传输的参数。它们的具体含义如下:
(1)波特率(Baud Rate): 波特率是指每秒钟传送的比特数(位数)。它表示在单位时间内可以传输多少个比特。通常用“波特(Baud)”表示,它的单位是每秒钟的比特数,例如9600波特就表示每秒钟可以传输9600个比特。发送和接收双方必须使用相同的波特率设置,否则数据无法正常传输。
(2)数据位(Data Bits): 数据位指每个字符的位数,即每个字节的位数。通常可以选择 5、6、7 或 8 位数据。例如,8位数据表示每个字节由8个比特组成。发送和接收双方必须使用相同的数据位设置,以保证数据的正确传输。
(3)停止位(Stop Bits): 停止位用于确定一个字符的传输结束。通常可以选择 1 或 2 个停止位。例如,在使用1个停止位时,数据位和停止位的传输顺序是:起始位、数据位、校验位(如果有)、停止位。停止位的设置也需要发送和接收双方保持一致。
(4)校验位(Parity Bit): 校验位用于检测数据传输中的错误。通常可以选择奇校验(Odd)、偶校验(Even)、无校验(None)、标记校验(Mark)或空格校验(Space)。在奇校验中,校验位被设置为确保数据位中的1的个数为奇数;在偶校验中,校验位被设置为确保数据位中的1的个数为偶数。无校验表示不使用校验位。
这些参数的正确设置非常重要,它们决定了数据在串口间的传输方式。通常,两个通信设备之间的串口参数必须保持一致,否则数据传输可能会出现错误。
二、串口通信的python实现
1、一个Demo
import serial# 打开串口
ser = serial.Serial('COM46', 9600, timeout=1) # 'COM1'是你的串口号,9600是波特率,timeout是超时时间(单位为秒)
# 向串口发送数据
ser.write(b's')
# 从串口接收数据
received_data = ser.readline()
print("Received data: ", received_data)
# 关闭串口
ser.close()
在这个例子中,serial.Serial()
函数用于打开串口。你需要指定串口号(例如'COM1'
或'/dev/ttyS0'
),波特率(例如9600
),以及超时时间(timeout,单位为秒,表示等待串口数据的最长时间)。
ser.write()
用于向串口发送数据。注意,write()
函数接受的是字节串(bytes),所以需要使用b''
前缀。
ser.readline()
用于从串口接收数据,直到遇到换行符(\n
)为止。如果你知道接收的数据长度,也可以使用 ser.read(n)
来读取固定长度的数据。
最后,ser.close()
用于关闭串口连接。
请根据你的具体需求修改串口号、波特率和其他参数。
2、serial.Serial都有哪些参数?
serial.Serial()
函数可以接受多个参数,以下是其中一些常用的参数:
(1)port: 串口号,例如 'COM1'
或 '/dev/ttyS0'
。
(2)baudrate: 波特率,例如 9600
,表示每秒钟传输9600位。
(3)timeout: 读取超时时间,单位为秒。如果设置为None
,则read()
操作会一直等待数据到达;如果设置为0,read()
操作会立即返回;如果设置为一个正数,read()
操作会等待指定秒数,如果在这个时间内没有数据到达,则返回空。
(4)bytesize: 数据位的位数,默认为8。
(5)parity: 校验位,可以是serial.PARITY_NONE
(无校验)、serial.PARITY_EVEN
(偶校验)、serial.PARITY_ODD
(奇校验)、serial.PARITY_MARK
(标记校验)或serial.PARITY_SPACE
(空格校验)。
(6)stopbits: 停止位的位数,默认为1。
(7)xonxoff: 控制软件流控(XON/XOFF)。
(8)rtscts: 控制硬件流控(RTS/CTS)。
(9)dsrdtr: 控制硬件流控(DSR/DTR)。
(10)write_timeout: 写入超时时间,单位为秒。
(11)inter_byte_timeout: 字节间超时时间,单位为秒。
(12)exclusive: 如果为True
,在打开串口时,将确保没有其他程序可以打开同一个串口。
这些参数可以根据你的具体需求进行设置。请注意,不同操作系统(例如Windows、Linux、macOS)可能对串口号的表示方式有所不同,需要根据你的操作系统来设置正确的串口号。
相关文章:
python实现串口通信
python实现串口通信是一件简单的事情,只要通过pyserial模块就可以实现。 一、串口通信 1、什么是串口通信? 串口通信是一种通过串行接口(Serial Port)进行数据传输的通信方式。在串口通信中,数据位按顺序一位一位地传…...

No module named ‘cv2’ 解决方法
目录 解决方案1解决方案2 解决方案1 一般情况下的解决方案 在自己的虚拟环境里面安装就行 pip install opencv-python解决方案2 但是我遇到的情况没有这么简单,我使用了pip list | grep open 搜索含有open字样的opencv的包,结果显示已经安装了 我直接进入我的自定义的虚拟…...

65、内网安全-域环境工作组局域网探针方案
目录 案例1-基本信息收集操作演示案例2-网络信息收集操作演示案例3-用户信息收集操作演示案例4-凭据信息收集操作演示案例5-探针主机域控架构服务操作演示涉及资源 我们攻击内网一般是借助web攻击,直接进去,然后再去攻击内网,那么攻击的对象一…...
C#:EXCEL列名、列序号之间互相转换
EXCEL的列名与列序号 之前的关系如下 A1B2C3D4E5F6G7H8I9J10K11L12M13N14O15P16Q17R18S19T20U21V22W23X24Y25Z26AA27AB28 /// <summary>/// 根据给的EXCEL列序号,得出列名字母/// </summary>/// <param name"iColNum">序号</param&…...

云原生微服务实战 Spring Cloud Alibaba 之 Nacos
系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay 第八章 Sprin…...
ubuntu gcc版本降级 Reset gcc version from 11.3 to 11.2 on Ubuntu 22.04
aptitude 需要自己安装 sudo apt-get install aptitude # 安装# aptitude的一些常用的操作: sudo aptitude update # 更新软件源 sudo aptitude search 软件名称 # 查看软件 sudo aptitude install 软件名称 …...

基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉 计算机竞赛
文章目录 0 简介1 二维码检测2 算法实现流程3 特征提取4 特征分类5 后处理6 代码实现5 最后 0 简介 🔥 优质竞赛项目系列,今天要分享的是 基于机器学习的二维码识别检测 - opencv 二维码 识别检测 机器视觉 该项目较为新颖,适合作为竞赛课…...

Windows客户端下pycharm配置跳板机连接内网服务器
问题:实验室服务器仅限内网访问,无法在宿舍(外网)访问实验室的所有内部服务器,但同时实验室又提供了一个外网可以访问的跳板机,虽然可以先ssh到跳板机再从跳板机ssh到内网服务器,但这种方式不方…...

美国IP代理如何获取?适用于哪些场景?
美国代理IP可以是静态(不会改变)或动态(周期性更改),并且可以由专业的代理服务提供商提供。不同的代理IP服务提供商可能提供不同类型的代理,包括数据中心代理、住宅代理和移动代理,以满足不同用…...

Java工具库——FastJson的40个常用方法
那些想看却没看的书,在心里摆满一个图书馆… 工具库介绍 阿里巴巴的 FastJSON,也被称为 Alibaba FastJSON 或阿里巴巴 JSON,是一个高性能的 Java JSON 处理库,用于在 Java 应用程序中解析和生成 JSON 数据。FastJSON 以其卓越的性…...

基于ssm的宠物医院管理系统的设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...
RocketMQ学习笔记(一)
RocketMQ学习笔记 消息中间件应用场景 应用解耦削峰填谷数据分发 常见的消息中间件 ActiveMQ:Apache出品,比较老的一个开源的消息中间件,以前在中小企业应用广泛Kafka:Apache软件基金会开发的一个开源流处理平台,由…...

JavaScript-2-菜鸟教程
字符串 可以使用 索引 位置访问字符串中的每个字符 可以使用内置属性 length 来计算字符串的长度 var txt "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var sln txt.length;<script>var x "John"; // x是一个字符串// 使用 new 关键字将字符…...
发布开源项目到 jitpack
--- theme: github highlight: a11y-dark --- # 发布项目到 jitpack ## *(Gradle7.x 的版本已不适用 android-maven 的方法发布)* ## 1.在要发布android module下的 build.grdle 添加,多个module就添加多个 plugins{ id maven-publish } task sourceJar(type: Jar) { …...

TeeChart for .NET 2023.10.19 Crack
TeeChart.NET 的 TeeChart 图表控件提供了一个出色的通用组件套件,可满足无数的图表需求,也针对重要的垂直领域,例如金融、科学和统计领域。 数据可视化 数十种完全可定制的交互式图表类型、地图和仪表指示器,以及完整的功能集&am…...

代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球
代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球 文章链接:柠檬水找零 根据身高重建队列 用最少数量的箭引爆气球 视频链接:柠檬水找零 根据身高重建队列 …...

完美解决configure: error: APR not found. Please read the documentation.
目录 一、问题: 二、原因: 三、解决方法: 一、问题: ./configure 出现如下问题: configure: error: APR not found. Please read the documentation. 二、原因: 配置:错误:找不…...

Jenkins部署失败:JDK ‘jdk1.8.0_381‘ not supported to run Maven projects
Jenkins部署报错:JDK ‘jdk1.8.0_381’ not supported to run Maven projects提示使用的jdk有问题,启动的jdk版本不能满足项目启动。 登录Jenkins管理页面,系统管理——全局工具配置——JDK安装配置满足条件的JDK版本,保存配置&…...
xml导出pdf简单实现
1. 引入依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>8.0.1</version> </dependency>2. 代码实现 import com.itextpdf.kernel.geom.PageSize; import com.itextpdf.ker…...

JAVAEE初阶相关内容第十六弹--网络编程
写在前 这一节的内容首先是对十五弹(UDP回显服务器)进行简单的改进,在这基础上开始介绍TCP流套接字编程。 目录 写在前 1.改进回显服务器 1.1完整代码实现 1.2运行输出结果 2.TCP流套接字编程 2.1ServerSocketAPI 2.2SocketAPI 3.TC…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...