python串口多线程收发

import serial
import threading
 
class ComClass:
    def __init__(self,port,baud):
        self.port = port
        self.baud = baud
        self.comSerial = None
        self.run = False
        self.open()
        if self.run:
            self.thread1 = threading.Thread(target=self.receiveData)
            self.thread2 = threading.Thread(target=self.sendData)
            self.thread1.start()
            self.thread2.start()
            self.thread1.join()
            self.thread2.join()
            self.close()
            print("程序已退出")
       
    def open(self):
        try:
            self.comSerial = serial.Serial(self.port,self.baud)
            self.run = True
            print("打开串口成功")
            print("输入 break 退出程序")
        except:
            print("打开串口失败")
           
    def close(self):
       self.comSerial.close()
       print("关闭串口")
 
    def sendData(self):
        print("发送线程开启...")
        while self.run:
            send_data = input()
            if send_data:
                if send_data == "break":
                    self.run = False
                else:
                    self.comSerial.write(send_data.encode("gbk"))
                    print('发送数据:%s' % send_data)
        print("发送线程结束")
 
    def receiveData(self):
        print("接收线程开启...")
        while self.run:
            receive_data = self.comSerial.read(self.comSerial.inWaiting()).decode("gbk")
            if receive_data:
                print('接收数据:%s' % receive_data)
 
            if receive_data == "break":
                self.run = False
        print("接收线程结束")

# 程序入口
a = ComClass('COM2',115000)
# 输入 break 结束线程退出程序
posted @ 2025-06-16 06:59  天翔鸟  阅读(72)  评论(0)    收藏  举报