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…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...