Python Serial串口基本操作(收发数据)


Posted in Python onNovember 06, 2020

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

串口工具界面

Python Serial串口基本操作(收发数据)

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

串口工具界面

Python Serial串口基本操作(收发数据)

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

串口工具界面

Python Serial串口基本操作(收发数据)

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 相关文章推荐
Python中处理unchecked未捕获异常实例
Jan 17 Python
Python中selenium实现文件上传所有方法整理总结
Apr 01 Python
Scrapy爬虫实例讲解_校花网
Oct 23 Python
python2.7读取文件夹下所有文件名称及内容的方法
Feb 24 Python
python+pyqt5实现KFC点餐收银系统
Jan 24 Python
python中的&amp;&amp;及||的实现示例
Aug 07 Python
Python实现直方图均衡基本原理解析
Aug 08 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
Apr 08 Python
pandas DataFrame运算的实现
Jun 14 Python
Python3爬虫中关于中文分词的详解
Jul 29 Python
python判断字符串以什么结尾的实例方法
Sep 18 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
Oct 20 Python
python基于exchange函数发送邮件过程详解
Nov 06 #Python
Python Unittest原理及基本使用方法
Nov 06 #Python
python中的yield from语法快速学习
Nov 06 #Python
Python通过字典映射函数实现switch
Nov 06 #Python
Python使用grequests并发发送请求的示例
Nov 05 #Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
Nov 05 #Python
Python中常用的os操作汇总
Nov 05 #Python
You might like
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
2012/03/27 PHP
去除php注释和去除空格函数分享
2014/03/13 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
2018/08/21 PHP
js 页面执行时间计算代码
2009/03/04 Javascript
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
jQuery动态地获取系统时间实现代码
2013/05/24 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
angularjs中的e2e测试实例
2014/12/06 Javascript
JS实现DIV容器赋值的方法
2015/12/14 Javascript
js 获取经纬度的实现方法
2016/06/20 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
浅谈node中的exports与module.exports的关系
2017/08/01 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
react-navigation之动态修改title的内容
2018/09/26 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
微信小程序实现页面左右滑动
2020/11/16 Javascript
零基础学Python(一)Python环境安装
2014/08/20 Python
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
Python实现接受任意个数参数的函数方法
2018/04/21 Python
python使用wxpy轻松实现微信防撤回的方法
2019/02/21 Python
python画图把时间作为横坐标的方法
2019/07/07 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
全球性的在线购物网站:Zapals
2017/03/22 全球购物
四年级科学教学反思
2014/02/10 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
钱学森观后感
2015/06/04 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python