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 pass 语句使用示例
Mar 11 Python
python 性能优化方法小结
Mar 31 Python
python+matplotlib绘制旋转椭圆实例代码
Jan 12 Python
python PyTorch参数初始化和Finetune
Feb 11 Python
对python numpy数组中冒号的使用方法详解
Apr 17 Python
使用python编写udp协议的ping程序方法
Apr 22 Python
tensorflow 输出权重到csv或txt的实例
Jun 14 Python
python3.4 将16进制转成字符串的实例
Jun 12 Python
实例详解Python模块decimal
Jun 26 Python
Python使用指定端口进行http请求的例子
Jul 25 Python
pandas 中对特征进行硬编码和onehot编码的实现
Dec 20 Python
tensorflow与numpy的版本兼容性问题的解决
Jan 08 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
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
PHP数组及条件,循环语句学习
2012/11/11 PHP
php使用CURL伪造IP和来源实例详解
2015/01/15 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
2016/12/02 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
Display SQL Server Login Mode
2007/06/21 Javascript
Javascript模块化编程(三)require.js的用法及功能介绍
2013/01/17 Javascript
javaScript 计算两个日期的天数相差(示例代码)
2013/12/27 Javascript
JS延迟加载加快页面打开速度示例代码
2013/12/30 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
解决vue页面渲染但dom没渲染的操作
2020/07/27 Javascript
Python 基础之字符串string详解及实例
2017/04/01 Python
pycharm 在windows上编辑代码用linux执行配置的方法
2018/10/27 Python
python爬取指定微信公众号文章
2018/12/20 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
2020/06/12 Python
基于python实现MQTT发布订阅过程原理解析
2020/07/27 Python
python 制作网站小说下载器
2021/02/20 Python
Nike台湾官方商店:Nike.com (TW)
2017/08/16 全球购物
希腊香水和化妆品购物网站:Parfimo.gr
2019/10/03 全球购物
精选鞋类、服装和配饰的全球领先目的地:Bodega
2021/02/27 全球购物
造价工程师个人求职信
2013/09/21 职场文书
抗洪救灾先进集体事迹材料
2014/05/26 职场文书
护理学专业求职信
2014/06/29 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
Python中可变和不可变对象的深入讲解
2021/08/02 Python
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电