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实现约瑟夫环问题的方法
May 03 Python
Django中的Signal代码详解
Feb 05 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
Feb 06 Python
Python Socket编程之多线程聊天室
Jul 28 Python
python实现AES和RSA加解密的方法
Mar 28 Python
Python实现FTP文件传输的实例
Jul 07 Python
PyTorch加载自己的数据集实例详解
Mar 18 Python
python opencv进行图像拼接
Mar 27 Python
Python requests模块安装及使用教程图解
Jun 30 Python
详解python 条件语句和while循环的实例代码
Dec 28 Python
如何利用python和DOS获取wifi密码
Mar 31 Python
python Tkinter模块使用方法详解
Apr 07 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作的文本留言本的例子(五)
2006/10/09 PHP
PR值查询 | PageRank 查询
2006/12/20 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
PHP中STDCLASS用法实例分析
2016/11/11 PHP
鼠标滑上去后图片放大浮出效果的js代码
2011/05/28 Javascript
NodeJS框架Express的模板视图机制分析
2011/07/19 NodeJs
一个字符串反转函数可实现字符串倒序
2014/09/15 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
2015/01/02 Javascript
修改或扩展jQuery原生方法的代码实例
2015/01/13 Javascript
基于jQuery插件实现环形图标菜单旋转切换特效
2015/05/15 Javascript
基于javascript实现泡泡大冒险网页版小游戏
2016/03/23 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
记React connect的几种写法(小结)
2018/09/18 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
Express 配置HTML页面访问的实现
2020/11/01 Javascript
token 机制和实现方式
2020/12/15 Javascript
ReactRouter的实现方法
2021/01/25 Javascript
在Python中使用异步Socket编程性能测试
2014/06/25 Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
2016/06/07 Python
python下os模块强大的重命名方法renames详解
2017/03/07 Python
django+js+ajax实现刷新页面的方法
2017/05/22 Python
python中format()函数的简单使用教程
2018/03/14 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2016/01/06 面试题
教师自荐信范文
2013/12/09 职场文书
国家奖学金获奖感言
2014/08/16 职场文书
庆祝新中国成立65周年“向国旗敬礼”网上签名寄语
2014/09/27 职场文书
党员民主生活会对照检查材料思想汇报
2014/09/28 职场文书
四风批评与自我批评范文
2014/10/14 职场文书
国际贸易实训报告
2014/11/05 职场文书
安全承诺书
2015/01/19 职场文书
2015大学迎新标语
2015/07/16 职场文书
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
2022/04/07 Servers
vue组件冲突之引用另一个组件出现组件不显示的问题
2022/04/13 Vue.js
create-react-app开发常用配置教程
2022/06/25 Javascript