python3.6串口编程实例_Python3 实现串口两进程同时读写

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值