Python3 實現(xiàn)串口兩進(jìn)程同時讀寫
更新時間:2019年06月12日 11:52:42 作者:colcloud
今天小編就為大家分享一篇Python3 實現(xiàn)串口兩進(jìn)程同時讀寫,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
通過兩個進(jìn)程分別讀寫串口,并把發(fā)送與接收到的內(nèi)容記錄在blog中,收到q時程序結(jié)束并退出
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名稱為當(dāng)前時間 self.rfname='r'+fname #接收blog名稱 self.sfname='s'+fname #發(fā)送blog名稱 self.thread_read= None self.thread_send=None def waiting(self): # 等待event停止標(biāo)志 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 實現(xiàn)串口兩進(jìn)程同時讀寫就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python 網(wǎng)絡(luò)編程要點總結(jié)
Python 提供了兩個級別訪問的網(wǎng)絡(luò)服務(wù):低級別的網(wǎng)絡(luò)服務(wù)支持基本的 Socket,它提供了標(biāo)準(zhǔn)的 BSD Sockets API,可以訪問底層操作系統(tǒng) Socket 接口的全部方法。高級別的網(wǎng)絡(luò)服務(wù)模塊SocketServer, 它提供了服務(wù)器中心類,可以簡化網(wǎng)絡(luò)服務(wù)器的開發(fā)。下面看下該如何使用2021-06-06Python中出現(xiàn)"No?module?named?'requests'"
這篇文章主要給大家介紹了關(guān)于Python中出現(xiàn)"No?module?named?'requests'"的解決辦法,"No?module?named?requests"是Python報錯提示,意味著你在使用某個Python程序或腳本時,沒有找到名為requests的模塊,需要的朋友可以參考下2023-11-11python學(xué)生信息管理系統(tǒng)(完整版)
這篇文章主要為大家詳細(xì)介紹了python學(xué)生信息管理系統(tǒng)的完整版本代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-10-10