python 串口通信
admin
2024-05-01 08:17:33
0

需要准备好的工具

windows上找个串口通信工具
Linux上查看设备列表

有可能需要安装串口驱动,去设备管理器中安装一下
或这个一般串口开发,厂家都会给驱动和串口调试工具

如果串口调试工具调试没有问题了
接下来你用python代码调试
你需要在python环境中安装pyserial

pip install pyserial

列出所有再用的串口

https://blog.csdn.net/sprawling/article/details/50477166

import osimport serial.tools.list_portsport_list = list(serial.tools.list_ports.comports())print(port_list)#if there is no serial ports,here wil show '[]'. array modeif len(port_list) == 0:print('No serial ports.')else:for i in range(0,len(port_list)):print(port_list[i])os.system("pause")

根据显示的串口列表或者从设备管理器中看到的结果

初始化串口

def initSerial():print()if platform.system() == "Windows":# 根据情况看要不要E# 串口名, 比特率等参数根据 设备通信协议来设置# ser = serial.Serial("COM3", 115200, 8, "E", timeout=50, stopbits=1)ser = serial.Serial("COM3", 115200, 8, timeout=50, stopbits=1)print('开启ser', ser)elif platform.system() == "Linux":# print("linux sys")ser = serial.Serial("/dev/ttyUSB1", 9600, 8, timeout=50, stopbits=1)# ser = serial.Serial("/dev/ttyUSB1", 9600, 8, "E", timeout=50, stopbits=1)else:print('不认识的操作系统')return ser

获取数据

此处有获取到的是16进制数据
有的直接获取的byte, 根据情况来获取


def getData(ser):time.sleep(1)count = ser.inWaiting()print(count)# 数据的接收if count > 0:data = ser.read(count)print(data)if data != b'':# 将接受的16进制数据格式如b'h\x12\x90xV5\x12h\x91\n4737E\xc3\xab\x89hE\xe0\x16'#                      转换成b'6812907856351268910a3437333745c3ab896845e016'#                      通过[]去除前后的b'',得到我们真正想要的数据# print("receive", str(binascii.b2a_hex(data))[2:-1])# res = str(binascii.b2a_hex(data))[2:-1]# print('res1-->', res)res = str(data)[2:-1]# print('res2-->', res)if res.startswith("$") and res.endswith("\\r\\n"):# if res.startswith("$") and res.endswith("\r\n"):parseData(res)else:print('数据格式由问题')print(res)savefile(res,filename='error.txt')return res# else:#     print('没有接收到数据')

接下来是解析数据

这一步中,数据位代表的内容不同,无法做到统一,根据通信协议文档来吧

def parseData(res):pass

接下来是根据解析出来的数据进行其它业务

当然一般我会将整个过程封装到一个流程函数中
类似于


def start():"""流程函数:return:"""ser = initSerial()# for i in range(1, 5):while True:# time.sleep(0.5)res = getData(ser)# res = "01030e01a70002000d000e0011011401eae53e"# parseData(res)# print(d)return ''

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...