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 ...
随机推荐
- Docker-None & Host 网络
本节介绍None&Host网络. 1.前言 点击此处回到docker系列文章目录 前面我们介绍了bridge network,本小节继续介绍none和host.这两个比较简单,也不太常用.安装 ...
- python机器学习入门-(1)
机器学习入门项目 如果你和我一样是一个机器学习小白,这里我将会带你进行一个简单项目带你入门机器学习.开始吧! 1.项目介绍 这个项目是针对鸢尾花进行分类,数据集是含鸢尾花的三个亚属的分类信息,通过机器 ...
- Flutter环境安装,ios真机调试
MAC: 下载Flutter,官网的可能很慢.可以去我的网盘下载, 提取码: 3t6y. 下载完的包会在~/Downloads目录下,我们移到~/opt/flutter目录下. mkdir ./opt ...
- 嵌入式-01-LinuxC语言
一.必备Linux命令和C语言基础 1.Linux环境搭建(在第一阶段有提及). 2.文件和目录相关命令(一) (1)Linux的文件系统结构 /bin./boot./dev./etc./home./ ...
- 深入理解kestrel的应用
1 前言 之所以写本文章,是因为在我停止维护多年前写的NetworkSocket组件两年多来,还是有一些开发者在关注这个项目,我希望有类似需求的开发者明白为什么要停止更新,可以使用什么更好的方式来替换 ...
- TensorFlow的模型保存与加载
import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' import tensorflow as tf #tensorboard --logdir=&qu ...
- UnicodeDecodeError: 'gbk' codec can't decode byte 0x8a in position 2: illegal multibyte sequence
pycharm报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x8a in position 2: illegal multibyte seq ...
- 进程管理工具 Supervisor
要想在终端后台常驻进程,首先想到的是在命令后加 & 符号,来达到隐藏程序在后台的目的,尽管看起来进程已经在后台运行了,实际上终端会话关闭时进程还是会被 kill 掉,这种问题一般是采用搭配 n ...
- Exercise
""" 问:执行完下面的代码后, l,m的内容分别是什么? """ def func(m): for k,v in m.items(): m ...
- XSS语义分析的阶段性总结(二)
本文首发于“合天智汇”微信公众号,作者:Kale 前言 上次分享了javascript语义分析,并且简单介绍了新型xss扫描器的一些想法,如何在不进行大量fuzz的情况下又能准确的检测出xss漏洞,这 ...