基于pyserial【Python串口通信】
前言
Python串口通信有多种方式,本文是基于基于pyserial实现的。首先安装pyserial依赖库,了解常用的方法函数,认识Serial参数说明;然后电脑查看可用的端口,举个简单示例:能自动检测串口,并连接此串口,收集串口的数据;最后查看运行效果。
安装pyserial
pip install pyserial
查看可用的端口
# coding:utf-8 import serial.tools.list_ports plist = list(serial.tools.list_ports.comports()) if len(plist) <= 0: print("没有发现端口!") else: plist_0 = list(plist[0]) serialName = plist_0[0] serialFd = serial.Serial(serialName, 9600, timeout=60) print("可用端口名>>>", serialFd.name)
运行结果:
注:在pyCharm环境下运行的,在电脑串口上有一个采集的传感器(通过串口连接到电脑)
常用的方法函数
- 导入串口模块import serial;
- 打开串口ser = serial.Serial(端口名称,...其他参数),
- ser.open()方法可以在close之后再次打开相应端口;
- 关闭串口ser.close();
- 通过串口写入ser.write(b''),参数需要使用字节bytes类型,如果是str类型,则可以使用encode('utf-8')的方式进行转换;读取模块信息的方法如下:
-> x= ser.read()读取一个字节,x=read(n)读取n个字节,readline()可以用来读取一行。
查看COM口工
python -m serial.tools.list_ports -v,可以列出所有串口名称及属性。
Serial参数说明
port端口名字,windows下为'COM1'等;
baudrate (int)波特率,可以设置的范围9600到115200;
bytesize为每个字节的比特数,设置值为FIVEBITS, SIXBITS,SEVENBITS, EIGHTBITS 5-8比特;
parity设置校验位PARITY_NONE, PARITY_EVEN,PARITY_ODD PARITY_MARK,PARITY_SPACE,用来设置校验位;stopbits停止位,用来指示字节完成,可以选择的设置STOPBITS_ONE,STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO;write_timeout(float) 写入超时设置;
timeout (float)读出超时设置;xonxoff (bool)软件流控开关;
rtscts (bool)硬件RTS/CTS流控开关;
dsrdtr (bool)硬件DSR/DTR流控开关。
关于UART流控两线方式没有硬件流控,四线方式采用DSR、DTR进行流控,而RS232标准中可以有DSR、DTR的流控方式。RTS-request to send; CTS- clear to send;DSR-data set ready;DTR-Data Terminal Ready。
一个简单示例:能自动检测串口,并连接此串口,收集串口的数据
#!usr/bin/python3.6 import serial import sys import os import time import re global MAX_LOOP_NUM global newCmd MAX_LOOP_NUM = 10 def waitForCmdOKRsp(): maxloopNum = 0 while True: line = ser.readline() maxloopNum = maxloopNum + 1 try: print("Rsponse : %s"%line.decode('utf-8')) except: pass if ( re.search(b'OK',line)): break elif(maxloopNum > MAX_LOOP_NUM): sys.exit(0) def sendAT_Cmd(serInstance,atCmdStr,waitforOk): print("Command: %s"%atCmdStr) serInstance.write(atCmdStr.encode('utf-8')) #or define b'string',bytes should be used not str if(waitforOk == 1): waitForCmdOKRsp() else: waitForCmdRsp() ser = serial.Serial("COM5",9600,timeout=30) sendAT_Cmd(ser,'AT+CFUN=1\r',1) ser.close()
综合上面的两个代码,能自动检测串口,并连接此串口,收集串口的数据
# !usr/bin/python3.6 import serial import sys import os import time import re import serial.tools.list_ports global MAX_LOOP_NUM global newCmd MAX_LOOP_NUM = 10 def waitForCmdOKRsp(): maxloopNum = 0 while True: line = ser.readline() #读取一行数据 maxloopNum = maxloopNum + 1 #计算读取长度 try: print("Rsponse : %s" % line.decode('utf-8')) #串口接收到数据,然后显示 except: pass if (re.search(b'OK', line)): break elif (maxloopNum > MAX_LOOP_NUM): sys.exit(0) def sendAT_Cmd(serInstance, atCmdStr, waitforOk): # print("Command: %s" % atCmdStr) serInstance.write(atCmdStr.encode('utf-8')) # atCmdStr 波特率 # or define b'string',bytes should be used not str if (waitforOk == 1): waitForCmdOKRsp() else: waitForCmdRsp() plist = list(serial.tools.list_ports.comports()) if len(plist) <= 0: print("没有发现端口!") else: plist_0 = list(plist[0]) serialName = plist_0[0] #先自动检测串口, 检测到可用串口,取出串口名 #ser = serial.Serial("COM6", 115200, timeout=30) ser = serial.Serial(serialName, 115200, timeout=30) # timeout=30 30s print("可用端口名>>>", ser.name) sendAT_Cmd(ser, 'AT+CFUN=1\r', 1) ser.close()
运行效果:
我用CC2530(Zigbee),采集了温度、湿度的数据,通过串口和电脑连接,运行此程序后,能自动检测到串口,然后获取 CC2530的数据,然后显示在电脑端。
希望对你有帮助。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如果高效使用apt-get、pip来下载安装依赖包、软件呢?
前言 在Python开发中,需要安装一下包、依赖库或软件等,有时出现网络、权限和无法安装等问题困扰着我们,经历过一段时间的洗礼,悟出了一些要点分享给大家。 一、pip命令 1)指定国内下载源---加速下载 背景 有时使用pip安装依赖库或软件时,看到10KB~30KB的速度下载,真的是恨铁不成刚,为什么不能快一些呢;明明电脑下载时都有1M~3M的,感到无奈,一直在等待安装。 分析如果排除是电脑本身网络速度慢问题,那很有可能是安装依赖库或软件是外网的,需要从外网那里获取;这样自然就很慢啦 解决方法发现问题是需要从外网获取,那么如果国内中有,我们从国内中获取就可以啦;速度会有质的飞跃。 pip install xxxx -i https://pypi.mirrors.ustc.edu.cn/simple xxxx 为要安装的依赖库或软件名称,例如:要安装numpy,即 pip install numpy -i https://pypi.mirrors.ustc.edu.cn/simple-i 是指定下载源 ,其后面是下载源的地址 ,即:阿里云 https://pypi.mirrors.us...
- 下一篇
一款Python实用神器,5 行 Python 代码 实现一键批量扣图
今天给大家分享一款Python装逼实用神器。 在日常生活或者工作中,经常会遇到想将某张照片中的人物抠出来,然后拼接到其他图片上去。专业点的人可以使用 PhotoShop 的“魔棒”工具进行抠图,非专业人士则使用各种美图 APP 来实现,但是这两类方式毕竟处理能力有限,一次只能处理一张图片,而且比较复杂的图像可能耗时较久。那今天就来向大家展示第三种扣图方式——用 Python代码来实现 一键批量抠图。 1. 准备工作- 安装paddlepaddle 既然要装逼,准备工作是少不了的。所谓“站在巨人的肩膀上,干起活来事半功倍”,我们这里的“巨人”就是 paddlepaddle 了,中文名称叫“飞桨”,那么这个 paddlepaddle 是什么呢? 它是“源于产业实践的开源深度学习平台,致力于让深度学习技术的创新与应用更简单”,直白点就是我帮你实现了深度学习底层框架,你只要有创意就可以在我平台上运用少量简单代码轻松实现。它的官网是:https://www.paddlepaddle.org.cn/ 。 它的安装比较简单,官网首页就有安装指引,可以通过「安装」菜单,查找到各个系统安装详细及注意事项...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Hadoop3单机部署,实现最简伪集群
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2配置默认Tomcat设置,开启更多高级功能