Python3 实现串口两进程同时读写


Posted in Python onJune 12, 2019

通过两个进程分别读写串口,并把发送与接收到的内容记录在blog中,收到q时程序结束并退出

import threading,time
import serial
import string
 
 
class SerThread:
  def __init__(self, Port=0):
    #初始化串口、blog文件名称
    self.my_serial = serial.Serial()
    self.my_serial.port=Port
    self.my_serial.baudrate = 9600
    self.my_serial.timeout = 1    
    self.alive = False
    self.waitEnd = None
    fname=time.strftime("%Y%m%d")#blog名称为当前时间
    self.rfname='r'+fname #接收blog名称
    self.sfname='s'+fname #发送blog名称
    self.thread_read= None
    self.thread_send=None   
       
 
  def waiting(self):
    # 等待event停止标志
    if not self.waitEnd is None:
      self.waitEnd.wait()
 
  def start(self):
    #开串口以及blog文件 
    self.rfile=open(self.rfname,'w')
    self.sfile=open(self.sfname,'w')
    self.my_serial.open()
       
    if self.my_serial.isOpen():
      self.waitEnd = threading.Event()
      self.alive = True
      
      self.thread_read = threading.Thread(target=self.Reader)
      self.thread_read.setDaemon(True)
      
      self.thread_send=threading.Thread(target=self.Sender)
      self.thread_send.setDaemon(True)
      
      self.thread_read.start()
      self.thread_send.start()
      return True
    else:
      return False
 
  
  def Reader(self):
    while self.alive:
      try:
        n=self.my_serial.inWaiting()
        data=''
        if n:
          data= self.my_serial.read(n).decode('utf-8')       
          print ('recv'+' '+time.strftime("%Y-%m-%d %X")+' '+data.strip())
          print (time.strftime("%Y-%m-%d %X:")+data.strip(),file=self.rfile)
          if len(data)==1 and ord(data[len(data)-1])==113: #收到字母q,程序退出
            break
      except Exception as ex:
        print (ex)
        
 
    self.waitEnd.set()
    self.alive = False
  
  def Sender(self):
    while self.alive:
      try:
        snddata=input("input data:\n")
        self.my_serial.write(snddata.encode('utf-8'))
        print ('sent'+' '+ time.strftime("%Y-%m-%d %X"))
              print (snddata,file=self.sfile) 
        
      except Exception as ex:
        print (ex)
    
    self.waitEnd.set()
    self.alive = False          
        
    
 
  def stop(self):
    self.alive = False
    #self.thread_read.join()
    #self.thread_send.join()
    if self.my_serial.isOpen():
      self.my_serial.close()
    self.rfile.close()
    self.sfile.close()
      
 
if __name__ == '__main__':  
  
  ser = SerThread('com4')
  try:
    if ser.start():
      ser.waiting()
      ser.stop()
    else:
      pass;      
  except Exception as ex:
    print (ex)
 
  if ser.alive:
    ser.stop()
 
  print ('End OK .');
  del ser;

以上这篇Python3 实现串口两进程同时读写就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python对字典进行排序实例
Sep 25 Python
python中迭代器(iterator)用法实例分析
Apr 29 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
Jul 24 Python
python实现redis三种cas事务操作
Dec 19 Python
python实现随机森林random forest的原理及方法
Dec 21 Python
python实现类之间的方法互相调用
Apr 29 Python
Python File(文件) 方法整理
Feb 18 Python
Python 数据库操作 SQLAlchemy的示例代码
Feb 18 Python
Tensorflow实现多GPU并行方式
Feb 03 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
Feb 29 Python
python中matplotlib实现随鼠标滑动自动标注代码
Apr 23 Python
什么是python的列表推导式
May 26 Python
详解pyppeteer(python版puppeteer)基本使用
Jun 12 #Python
python实战串口助手_解决8串口多个发送的问题
Jun 12 #Python
对Python 简单串口收发GUI界面的实例详解
Jun 12 #Python
Python3 串口接收与发送16进制数据包的实例
Jun 12 #Python
Python3简单实现串口通信的方法
Jun 12 #Python
Python集中化管理平台Ansible介绍与YAML简介
Jun 12 #Python
selenium获取当前页面的url、源码、title的方法
Jun 12 #Python
You might like
PHP 简易输出CSV表格文件的方法详解
2013/06/20 PHP
微信公众平台实现获取用户OpenID的方法
2015/04/15 PHP
php如何实现只替换一次或N次
2015/10/29 PHP
Yii 2.0在Grid中格式化时间方法示例
2017/06/06 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
Javascript面向对象编程(二) 构造函数的继承
2011/08/28 Javascript
jQuery修改class属性和CSS样式整理
2015/01/30 Javascript
javascript如何操作HTML下拉列表标签
2015/08/20 Javascript
js实现图片轮播效果
2015/12/19 Javascript
浅谈JavaScript中的分支结构
2016/07/01 Javascript
js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示实例
2016/12/06 Javascript
JS编写函数实现对身份证号码最后一位的验证功能
2016/12/29 Javascript
js输入框使用正则表达式校验输入内容的实例
2017/02/12 Javascript
解决webpack -p压缩打包react报语法错误的方法
2017/07/03 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
常用python编程模板汇总
2016/02/12 Python
使用python绘制常用的图表
2016/08/27 Python
Python 实现将数组/矩阵转换成Image类
2020/01/09 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
2020/02/07 Python
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
西班牙在线宠物食品和配件商店:bitiba
2019/10/11 全球购物
人力资源管理专业毕业生自我评价
2013/09/21 职场文书
儿科护士实习自我鉴定
2013/10/17 职场文书
门卫人员岗位职责
2013/12/24 职场文书
项目建议书格式
2014/03/12 职场文书
矿泉水广告词
2014/03/20 职场文书
社区居务公开实施方案
2014/03/27 职场文书
班委竞选演讲稿
2014/04/28 职场文书
社区戒毒工作方案
2014/06/04 职场文书
教师工作表现评语
2014/12/31 职场文书
物流业务员岗位职责
2015/04/03 职场文书
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS
win11高清晰音频管理器在哪里?win11找不到高清晰音频管理器解决办法
2022/04/08 数码科技