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 20 Python
Python序列之list和tuple常用方法以及注意事项
Jan 09 Python
Python 实现淘宝秒杀的示例代码
Jan 02 Python
python正则实现提取电话功能
Feb 24 Python
Windows上使用Python增加或删除权限的方法
Apr 24 Python
Python的iOS自动化打包实例代码
Nov 22 Python
Python 正则表达式匹配字符串中的http链接方法
Dec 25 Python
钉钉群自定义机器人消息Python封装的实例
Feb 20 Python
Python字符串匹配之6种方法的使用详解
Apr 08 Python
PyQt5笔记之弹出窗口大全
Jun 20 Python
JAVA SWT事件四种写法实例解析
Jun 05 Python
python 使用cycle构造无限循环迭代器
Dec 02 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写的serv-u的web申请账号的程序
2006/10/09 PHP
PHP 获取ip地址代码汇总
2015/07/05 PHP
PHP 输出缓冲控制(Output Control)详解
2016/08/25 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
用js重建星际争霸
2006/12/22 Javascript
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
2007/03/10 Javascript
11款基于Javascript的文件管理器
2009/10/25 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
jQuery3.0中的buildFragment私有函数详解
2016/08/16 Javascript
vue2.0中click点击当前li实现动态切换class
2017/06/21 Javascript
详解tween.js 中文使用指南
2018/01/05 Javascript
小程序中canvas的drawImage方法参数使用详解
2019/07/04 Javascript
vue实现简单学生信息管理
2020/05/30 Javascript
vue 监听 Treeselect 选择项的改变操作
2020/08/31 Javascript
[02:32]DOTA2英雄基础教程 美杜莎
2014/01/07 DOTA
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
python 字符串转列表 list 出现\ufeff的解决方法
2017/06/22 Python
利用Python写一个爬妹子的爬虫
2018/06/08 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
python爬虫调度器用法及实例代码
2020/11/30 Python
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
大学生自助营养快餐店创业计划书
2014/01/13 职场文书
保安的辞职报告怎么写
2014/01/20 职场文书
财务负责人岗位职责
2015/02/03 职场文书
工程技术员岗位职责
2015/04/11 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
投诉书范文
2015/07/02 职场文书
Java设计模式之享元模式示例详解
2022/03/03 Java/Android
「SHOW BY ROCK!!」“雫シークレットマインド”组合单曲MV公开
2022/03/21 日漫