【python】制作一个串口工具(下)!

      上一章节我们说了UI界面的设计,这一节来说下怎样实现其功能。

一.实例演示

1.创建一个.py文件,以下代码用来实现获取所有的串口信息:

import serial
import serial.tools.list_ports

from PyQt5.QtWidgets import QComboBox

class My_ComBoBox(QComboBox):

    def __init__(self, parent = None):
        super(My_ComBoBox,self).__init__(parent)

    
    def showPopup(self):
        # 先清空原有的选项
        self.clear()
        index = 1

        # 获取接入的所有串口信息,插入combobox的选项中
        port_list = self.get_port_list(self)
        if port_list is not None:
            for i in port_list:
                self.insertItem(index, i)
                index += 1
        QComboBox.showPopup(self)# 弹出选项框

    @staticmethod
    # 获取接入的COM
    def get_port_list(self):
        try:
            port_list = list(serial.tools.list_ports.comports())
            for port in port_list:
                yield str(port)
        except Exception as err:
            print("获取接入的串口设备出错!错误信息为:" + str(err))

然后在我们的UI界面代码下加入以下代码:

然后我们来看下打开我们的主文件运行一下试试:

 点击显示如上述,获取到的全部串口信息。

2.打开串口:

 前面的功能已经帮我们获取到了所有串口的信息,现在我们来实现打开串口的功能

(1)为了让大家弄明白,这边一步步讲解,前面已经获取到了所有串口信息,第一行代码则是用到了re模块的re.split()函数,主要是用来提取端口号信息,第二行代码的参数依次为端口号、波特率、超时等待。

comport_ = re.split(r'([,:` -])',ui.comboBox.currentText())

ser = serial.Serial(comport_[0],ui.comboBox_3.currentText(),timeout=self.timex)

(2)加入弹窗信息

msg_box = QMessageBox(QMessageBox.Warning, '完成', '串口已打开!')
msg_box.exec_()

(3)串口开启的代码如下:

def Open_serial(self):

    global ser

    try:

        serrial_one = 0

        if serrial_one == 0:

            comport_ = re.split(r'([,:` -])',ui.comboBox.currentText())

            ser = serial.Serial(comport_[0],ui.comboBox_3.currentText(),timeout=self.timex)
            time.sleep(0.1)
            ser.isOpen()
            ser.flushInput()

            msg_box = QMessageBox(QMessageBox.Warning, '完成', '串口已打开!')
            msg_box.exec_()


    except (IndexError,ValueError,TypeError,NameError) as e:
        print(e)

运行如下:

3.关闭串口:

如何关闭串口,则是直接close就好了。

def close_serial(self):
        ser.close()
        msg_box = QMessageBox(QMessageBox.Warning, '完成', '串口已关闭!')
        msg_box.exec_()

运行如下:

4.ascii类型发送数据及接收数据:

def write_serial(self):
        if ui.radioButton.isChecked() == True:

            ser.write(b' %s\n'%(ui.lineEdit.text().encode('ascii')))
            Read = ser.readlines()   ###读多行数据
    
            
            ser.flushInput()
            
            # time.sleep(2)
            ui.textBrowser.append(str(Read))
            # ser.flushInput()
            QApplication.processEvents()

运行如下:

(1)先选中

(2)在文本框输入要发送的数据,textBrowser接收返回数据

 

hex发送数据跟上边相似,就不举例子了。

5.按钮功能: 

def button(self):
        ui.pushButton_2.clicked.connect(self.Open_serial)##按钮1

二.总结

基础的串口收发数据就如上所述了,今天先写到这儿。

@Neng

猜你喜欢

转载自blog.csdn.net/pengneng123/article/details/131662743