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编程中对super函数的正确理解和用法解析
Jul 02 Python
python 自动化将markdown文件转成html文件的方法
Sep 23 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
Sep 26 Python
python如何拆分含有多种分隔符的字符串
Mar 20 Python
python保存字典和读取字典的实例代码
Jul 07 Python
python3.8下载及安装步骤详解
Jan 15 Python
tensorflow 限制显存大小的实现
Feb 03 Python
python_mask_array的用法
Feb 18 Python
python实现猜拳游戏
Mar 04 Python
python 基于selenium实现鼠标拖拽功能
Dec 24 Python
python中openpyxl和xlsxwriter对Excel的操作方法
Mar 01 Python
Python Numpy库的超详细教程
Apr 06 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中“简单工厂模式”实例代码讲解
2012/09/04 PHP
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
js页面跳转常用的几种方式
2010/11/25 Javascript
javascript中直接引用Microsoft的COM生成Word
2014/01/20 Javascript
java和javascript获取word文档的书签位置对比
2014/06/19 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
js实现常用排序算法
2016/08/09 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
javaScript 逻辑运算符使用技巧整理
2017/05/03 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
2017/05/11 Javascript
vue.js todolist实现代码
2017/10/29 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
[35:43]2018DOTA2亚洲邀请赛 4.1 小组赛B组 paiN vs Effect
2018/04/03 DOTA
Python是编译运行的验证方法
2015/01/30 Python
python 系统调用的实例详解
2017/07/11 Python
python制作小说爬虫实录
2017/08/14 Python
Android分包MultiDex策略详解
2017/10/30 Python
python使用wxpy实现微信消息防撤回脚本
2019/04/29 Python
Python实现插入排序和选择排序的方法
2019/05/12 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
解决pycharm 格式报错tabs和space不一致问题
2021/02/26 Python
美国网上眼镜商城:Zenni Optical
2016/11/20 全球购物
纽约香氛品牌:NEST Fragrance
2018/10/15 全球购物
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
临床医学大学生求职信
2013/09/28 职场文书
毕业生求职简历中的自我评价
2013/10/18 职场文书
安全大检查实施方案
2014/02/22 职场文书
给客户的感谢信
2015/01/21 职场文书
2015年七夕爱情寄语
2015/03/24 职场文书
JS前端使用Canvas快速实现手势解锁特效
2022/09/23 Javascript