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基础教程之数字处理(math)模块详解
Mar 25 Python
Python描述器descriptor详解
Feb 03 Python
解析Python中的__getitem__专有方法
Jun 27 Python
Python实现删除文件中含“指定内容”的行示例
Jun 09 Python
Python实现的概率分布运算操作示例
Aug 14 Python
tensorflow使用神经网络实现mnist分类
Sep 08 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
Jun 17 Python
python中的句柄操作的方法示例
Jun 20 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
Mar 18 Python
基于Python共轭梯度法与最速下降法之间的对比
Apr 02 Python
Python tkinter制作单机五子棋游戏
Sep 14 Python
pandas中关于apply+lambda的应用
Feb 28 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生成扭曲及旋转的验证码图片
2013/06/07 PHP
is_uploaded_file函数引发的不能上传文件问题
2013/10/29 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
ThinkPHP自动填充实现无限级分类的方法
2014/08/22 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
基于jQuery的计算文本框字数的代码
2012/06/06 Javascript
jQuery关于导航条背景切换效果实现示例
2013/09/04 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
JavaScript实现在数组中查找不同顺序排列的字符串
2014/09/26 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
利用fecha进行JS日期处理
2016/11/21 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
2017/08/15 jQuery
Vue Cli与BootStrap结合实现表格分页功能
2017/08/18 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
2017/12/18 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
javascript实现蒙版与禁止页面滚动
2020/01/11 Javascript
Vue2.x-使用防抖以及节流的示例
2021/03/02 Vue.js
python中__call__内置函数用法实例
2015/06/04 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
Python 错误和异常代码详解
2018/01/29 Python
Python 微信之获取好友昵称并制作wordcloud的实例
2019/02/21 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
python爬虫判断招聘信息是否存在的实例代码
2020/11/20 Python
瑰珀翠美国官网:Crabtree & Evelyn美国
2016/11/29 全球购物
英国领先的男士服装和时尚零售商:Burton
2017/01/09 全球购物
Hunkemöller西班牙:欧洲最大的内衣连锁店
2018/08/15 全球购物
年度献血先进个人事迹材料
2014/02/14 职场文书
交通事故委托书范本
2014/09/28 职场文书
助学感谢信范文
2015/01/21 职场文书
2015年社区计生工作总结
2015/04/21 职场文书
紧急迫降观后感
2015/06/15 职场文书
java如何实现获取客户端ip地址的示例代码
2022/04/07 Java/Android
java中如何截取字符串最后一位
2022/07/07 Java/Android