技术标签: python PyQt5开发实战 单片机 开发语言
- 作者简介:大家好,我是Zeeland,全栈领域优质创作者。
- CSDN主页:Zeeland
- 我的博客:Zeeland
- Github主页: Undertone0809 (Zeeland) (github.com)
- 支持我:点赞+收藏️+留言
- 介绍:The mixture of software dev+Iot+ml+anything
Python中Serial在读取数据的时候具有几种方法,本文将简单介绍一下如何使用serial库解析串口的数据。
本文需要用到的几种方法和属性,大概看看就好,主要看下面的教程如何使用。
方法 | 功能 |
---|---|
serial.read(size) | 读取size字节的数据 |
serial.readline() | 读取一行的数据 |
serial.readlines() | 读取多行的数据,将数据保存到数组里 |
serial.read_all() | 读取一个timeout周期内的全部数据(常用方法) |
serial.read_all | 读取串口所有的参数信息 |
serial_timeout(参数) | 超时属性,下面具体介绍 |
下面的场景我们需要用用COM4串口发送一串字符串"hello world"
,波特率9600,如何使用python的serial
库进行解析串口发送来的数据?
直接上代码
import serial
ser = serial.Serial("COM2", 9600, timeout=0.01)
while True:
data = ser.read_all()
if data:
rec_str = data.decode('utf-8')
print(rec_str)
hello world
,而Python端实现了COM1,监听来自COM2的消息,用read_all()
方法读取接收到的数据,接收到的数据类型是bytes
类型的,因此我们需要将bytes
数组转成字符串print出来,如下图所示。而初始化的时候这里的timeout
是指在设定的timeout
时间范围内,如果读取的字节数据是有效的(就是非空)那就直接返回,否则一直会等到这个设定的timeout时间并返回这段时间所读的全部字节数据。
简单来说你可以理解为每timeout
秒读一次数据,而如果timeout
太小,数据量太大,可能一次发送不完,会数据未读完的状态。
也就是说,如果我的timeout设置为0.01,现在我有一个串口通信的传感器,传感器通过串口使用COM2发送一次数据,传感器如果在0.01秒内将所有数据都传输过来,就保存到缓存buffer
中,到了0.01秒后会调用一次read_all()
就可以读取到传感器发送到buffer
中的数据了;如果传感器在0.01秒内没有将数据发送全的话,buffer
中的数据就是不完全的,就会返回不完全的数据;如果传感器在0.01秒内发送了数据的话,buffer
也会返回两组合在一起的数据。
注意:timeout的设置至关重要,如果不是特别高频的数据的话,timeout=0.01的100Hz完全够了,当然timeout最小支持多少要看你的波特率。如果我0.3秒发送了一次数据,timeout设置0.01,就可以返回一次完整的数据;如果我0.01秒发送一次数据,timeout设置0.3,那么一次就会返回30次数据,所以这就是timeout的作用。
buffer
的概念,这里你应该可以知道,你可以直接把buffer
理解为一个文件夹,读数据的方式是和file
是一样的,只是引入的timeout
的概念,使得buffer
内的数据会以 1/timeout
的频率进行刷新。buffer
当做file
理解,那么readline()
就是读取buffer中的一行,如果你的数据中存在\n
这样的换行,那么用readline()
先让不合适,很容易产生漏读的问题,而且如果你在一个timeout
周期内没有用readline()
处理完所有你想要的数据的话,buffer
就刷新了,因此通过笔者的实践和项目经历读数据只推荐用read_all()
来读取。cushy-serial是一个轻量级的Serial框架,初衷是希望使Serial编程变得更加简单、快捷,因此,相较于传统的pyserial,该框架可以更加快速地构建起一个serial程序,其可以兼容pyserial的所有特性,并且自定义serial消息异步回调,无需花费精力在多线程上,项目地址:https://github.com/Undertone0809/cushy-serial
主要特性
快速上手
pip install cushy-serial --upgrade
from cushy_serial import CushySerial
serial = CushySerial("COM1", 9600)
serial.send("I am python client")
@serial.on_message()
def handle_serial_message(msg: bytes):
str_msg = msg.decode("utf-8")
print(f"[serial] rec msg: {
str_msg}")
需要说明的是,CushySerial兼容了Serial中所有的功能,因此,你可以在CushySerial中使用Serial的所有功能。
CushySerial
也提供了相关的解决方案,你可以方便的轮询发送指令,并获取来自串口的信息,示例如下:from cushy_serial import CushySerial, enable_log
enable_log()
serial = CushySerial("COM1", 9600)
instruction = bytes([0x01, 0x06, 0x00, 0x7F, 0x00, 0x01, 0x79, 0xD2])
# msg为你要轮询发送的指令,interval为轮询的时间间隔,times为执行次数,可不填写
@serial.polling_task(msg=instruction, interval=0.5, times=5)
def handle_rec_msg(rec_msg):
print(f"[serial] rec polling message: {
rec_msg}")
read_all()
方法,并选定合适的timeout。猜你想看:
文章浏览阅读1.4w次,点赞4次,收藏26次。遇到的问题:打印预览的时候表格被分割了,就是一共两页而其中一行显示在不同的两个页面。如下图:_page-break-inside
文章浏览阅读298次。1.存储2.转化为稀疏矩阵 sparse函数和full函数3.直接建立稀疏矩阵 spconvert函数4.带状稀疏矩阵spdiags函数例题:求解三对角线方程组的解_spconvert函数
文章浏览阅读1.9k次。在info.plist文件中加一条Appearance - Light, 如下图:参考博客:iOS暗黑(dark)模式适配IOS 开发之关闭暗黑模式_ios开发 关闭对黑暗模式的支持
文章浏览阅读1.1k次。目的包括PMS及以后的Swift项目在多人开发中,即使有官网的规范模板,每个人的代码风格和规范难以做到完全一致,对后期项目维护会增加一定的困难。使用SwiftLint可以对规范代码有很大帮助。SwiftLint是啥SwiftLint是Realm公司开发的一个插件,专门用于管理Swift代码的规范,能够对原有的代码自动格式化,在 Xcode 中执行编译时,SwiftLint 会自动运行检查,不符合规范的代码会通过警告或者报错的形式指示出来,并且拥有丰富的配置项,可以进行大量的自定义规范操作,是一个很方_swiftlint
文章浏览阅读618次。tomcat源码阅读1org.apache.catalina 包包内接口主要有:AuthenticatorAuthenticator 是一个组件(通常是一个阀门或容器),它提供了这类服务的身份验证Cluster一个Cluster 像一个当地客户服务器集群那样工作,它的实现需要支持集群内的多种交流方式Contained它是一个解耦接_myeclipse怎么查看tomcat源码
文章浏览阅读2.6k次。负责公司的基础数据扫描采集.这部分对于系统的可用性基本是100%所以做了很多高可用的方案前置准备在对APP进行高可用实施之前,我们需要准备:1.核心域名多个降级[一主多备]最基础的要求,必须!!!能够支持云端下发 & 本地动态切换(蓝-绿发布 & 灰度 & UAT)2.多个CDN每个域名 都使用不同CDN,避免因CDN节点故障导致服务不可用(出现过因CDN节点异常的生产故障)3.多个部署网络机房每个域名 部署在不同地域网络机房(出现过主干线因施工被挖断的生产._一个app要连多个域名灾备吗
文章浏览阅读5.6k次。新版FMEA终于正式发布了!关于新版FMEA正式版与草稿版的差异,后续黄老师将会每周撰写新文来给大家做解读及分享,敬请持续关注公众号(首页菜单的历史文章中有FMEA合集,大家可随时点击阅读旧文)。为了方便部分已经懂了七步法的学员可以直接进行新版FMEA的使用,本篇特别将新版FMEA手册中的评分表整理出来,方便参考使用。本篇文章建议收藏,后续可持续做为工具书随时参考使用。关于打分说起FMEA,打分是..._fmea打分标准对照表
文章浏览阅读3.3k次。今天小编为您带来Fantastical 2 Mac一款易于使用的日历管理软件,Fantastical 2 Mac版采用了全新的设计风格,和Yosemite系统十分贴合,并且提供了「光」和“黑暗”两种配色模式,可以切换左栏的颜色。右侧的布局和系统原生日历十分相像,而在左侧则显示了该月日期及行程安排,并且还整合了系统原生的 「提醒事项」 。Fantastical 2Mac破解版使用说明下载完成...
文章浏览阅读1.3w次,点赞63次,收藏66次。深入探讨如何创建自定义弹出组件,穿插案例研究和实际应用,在实际开发中更好地利用自定义弹出组件来提升用户体验。_微信小程序的自定义弹窗
文章浏览阅读6.1k次。先说一下:Teechart for .net v3.0 破解版 下载地址:http://download.csdn.net/source/1565607先来张示例图:最近公司开发web图标,采用了Teechart 控件。挺好用的。 因为以前公司用这个控件写c/s程序(主要是Delphi的)很好用,所以也推荐我用这个的.net版本。经过几天的研究,用这还可以,功能很强大。总结te_使用teechart.dll会不会弹出收费
文章浏览阅读144次。一般这种不可写入都是权限问题,一看工作目录才发现自己在。目录下,不由得大吃一惊,赶紧使用命令。Windows的wsl环境下,使用。创建软盘时,结尾有报错。,然后就恢复正常了。_error: flat file is not writable
文章浏览阅读3.9k次。亚马逊平台对接地址由于最近几年都在做甲骨文的netsuite的相关的开发,尤其对跨境电商的开发对接整理了一份关于amazom的对接相关地址,具体的api接口调整地址以amazom官方的开发者为准,以下仅供参考主要API地址http://docs.developer.amazonservices.com/zh_CN/orders/2013-09-01/Orders_ListOrders.html接口..._亚马逊all settlement api地址