Python Serial 串口基本操作(收发数据)
1、需要模块以及测试工具
模块名:pyserial
使用命令下载:python -m pip install pyserial
串口调试工具:sscom5.13.1.exe
2、导入模块
import serial
3、打开串口
直接通过new一个Serial()的实例即可打开
返回实例
# encoding=utf-8
import serial if __name__ == '__main__':
com = serial.Serial('COM3', 115200)
print com
运行结果
Serial<id=0x3518940, open=True>(port='COM3', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
4、发送数据
函数名write()
返回值为发送成功的字节数
# encoding=utf-8
import serial if __name__ == '__main__':
com = serial.Serial('COM3', 115200)
success_bytes = com.write('This is data for test')
print success_bytes
运行结果
21
串口工具界面

5、接收数据(接收固定长度数据)
函数名为read(size=1)
接收size单位的字符,是阻塞的,不接收到就一直等待接收,除非设置了超时时间(未设置该示例)
# encoding=utf-8
import serial if __name__ == '__main__':
com = serial.Serial('COM3', 115200)
data = com.read(10)
print data
运行结果
123456789a
串口工具界面

6、接收数据(超时时间内一直接收)
函数名为read(size=1)
参数为接收的长度,默认为1,一般传入inWaiting(),它表示监测接收的字符串长度
配合While可以一直接收
# encoding=utf-8
import serial
import time if __name__ == '__main__':
com = serial.Serial('COM3', 115200)
over_time = 30
start_time = time.time()
while True:
end_time = time.time()
if end_time - start_time < over_time:
data = com.read(com.inWaiting())
data = str(data)
if data != '':
print data
运行结果
111
222
aaa
bbb
1a2b3c4d
串口工具界面

7、封装为类
# -*- encoding=utf-8 -*-
import serial
import time import WriteLog class COM:
def __init__(self, port, baud):
self.port = port
self.baud = int(baud)
self.open_com = None
self.log = WriteLog.WriteLog('ITC_LOG.LOG')
self.get_data_flag = True
self.real_time_data = '' # return real time data form com
def get_real_time_data(self):
return self.real_time_data def clear_real_time_data(self):
self.real_time_data = '' # set flag to receive data or not
def set_get_data_flag(self, get_data_flag):
self.get_data_flag = get_data_flag def open(self):
try:
self.open_com = serial.Serial(self.port, self.baud)
except Exception as e:
self.log.error('Open com fail:{}/{}'.format(self.port, self.baud))
self.log.error('Exception:{}'.format(e)) def close(self):
if self.open_com is not None and self.open_com.isOpen:
self.open_com.close() def send_data(self, data):
if self.open_com is None:
self.open()
success_bytes = self.open_com.write(data.encode('UTF-8'))
return success_bytes def get_data(self, over_time=30):
all_data = ''
if self.open_com is None:
self.open()
start_time = time.time()
while True:
end_time = time.time()
if end_time - start_time < over_time and self.get_data_flag:
data = self.open_com.read(self.open_com.inWaiting())
# data = self.open_com.read() # read 1 size
data = str(data)
if data != '':
self.log.info('Get data is:{}'.format(data))
all_data = all_data + data
print data
self.real_time_data = all_data
else:
self.set_get_data_flag(True)
break
return all_data if __name__ == '__main__':
pass
com = COM('com3', 115200)
# com.open()
print com.send_data('data')
com.get_data(50)
com.close()
8、对于一次函数说明(百度看到,并未测试)
readall():读取全部字符,是阻塞的,除非接收的字符串以EOF结尾或者超出缓冲区,否则函数不会返回。一般要结合超时设置,设置串口的timeout参数
Readline():读取一行,以/n结束,要是没有/n就一直读,阻塞。
Python Serial 串口基本操作(收发数据)的更多相关文章
- Arduino通过串口监视器收发数据
在串口监视器中发送数据,板子收到数据并打印出来. 不需要额外电路,但是板子必须连接电脑,Arduino IDE的串口监视器也需要被打开. 代码 /* 串口事件 当新的串口数据到来时,我们会将它添加到一 ...
- python 简单的串口收发数据
# -*- coding: utf- -*- import serial #打开串口 serialPort="COM3" #串口 baudRate= #波特率 ser=serial ...
- 【AT91SAM3S】串口UART初始化及收发数据
SAM3S中的UART串口是一个两线异步收发器.这个串口能用来通信或者跟踪.有两个DMA通道与UART串口关联,可通过使用DMA处理串口传输以节省CPU时间. SAM3S4C中有两个UART.与外设引 ...
- STM32F407的串口采用DMA收发数据
源:STM32F407的串口采用DMA收发数据
- Python——用socket和线程实现全双工收发数据
用socket和线程实现全双工收发数据 1.基础知识 Socket(套接字) 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.由此知道套接字是全双工的. 线程 ...
- Python的串口通信(pyserial)
串口通信是指外设和计算机间,通过数据信号线 .地线.控制线等,按位进行传输数据的一种通讯方式.这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低.串口是计算机上一种非 ...
- python serial 模块使用
python3 开始, python 加入了 serial 操作串口的模块 模块的引用 import serial 串口的申请 serial_com1 = serial.Serial("/d ...
- 基于Arduino和python的串口通信和上位机控制
引言 经常的时候我们要实现两个代码之间的通信,比如说两个不同不同人写的代码要对接,例如将python指令控制Arduino控件的开关,此处使用串口通信是非常方便的,下面笔者将结合自己踩过的坑来讲述下自 ...
- python实现串口通讯小程序(GUI界面)
python实现串口通讯小程序(GUI界面) 使用python实现串口通讯需要使用python的pyserial库来实现,这个库在安装python的时候没有自动进行安装,需要自己进行安装. 1.安装p ...
随机推荐
- AJ学IOS(23)UI之控制器管理
AJ分享,必须精品 控制器以及view的多种创建方式 控制器view的加载 通过storyboard创建 1:先加载storyboard⽂件(Test是storyboard的⽂文件名) UIStory ...
- 程序员小张的第一篇博文 --记Markdown的使用学习
1.前言 为了即将到来的面试做准备,以及记录一下平日里自己的学习过程和生活日常,我开始进驻博客园啦!这就是我的第一篇博客(有点小激动)~ 作为一只新手,首先记录一下今晚的编写博文的学习过程吧~ 2.使 ...
- 【three.js第四课】自定义材料、贴图。
1.先去下载6张不同的图片素材放到项目中. 2.在[three.js第三课]的代码基础上添加自定义的材料 //自定义材料 cubeMaterial 数组 //map:用于加载图片,THREE.Text ...
- k3s-初体验
k3s安装步骤 1.准备工作 关闭swap交换分区 swapoff -a 关闭防火墙 systemctl stop firewalld.service 2.下载启动k3s包 https://githu ...
- Daily Scrum 12/25/2015
Process: Zhaoyang: Implement the Alex 50M model in the Caffe framework. Yandong: The Azure Back end ...
- java对象头信息和三种锁的性能对比
java头的信息分析 首先为什么我要去研究java的对象头呢? 这里截取一张hotspot的源码当中的注释 这张图换成可读的表格如下 |-------------------------------- ...
- 3. JS生成32位随机数
function randomWord ( randomFlag,min,max ) { var str = " ", range = min, arr = ['0','1','2 ...
- 任意用户密码重置的十种姿势=====>学习笔记!
原学习视频链接:https://www.butian.net/School/content?id=214%E2%80%98 1.验证码不失效 原因:获取的验证码缺少时间限制,仅判断验证码是否不正确而未 ...
- 《Spring In Action》阅读笔记之核心概念
DI 依赖注入:在xml中配置的bean之间的依赖关系就是依赖注入 AOP 面向切面编程:如在xml中定义某个方法为切点,然后配置在该切点(该方法)调用前后需要调用的方法,从而简化了代码并解耦. Sp ...
- JS+Selenium+excel追加写入,使用python成功爬取京东任何商品~
之前一直是requests库做爬虫,这次尝试下使用selenium做爬虫,效率不高,但是却没有限制,文章是分别结合大牛的selenium爬虫以及excel追加写入操作而成,还有待优化,打算爬取更多信息 ...