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

news2024/11/25 23:00:43

      上一章节我们说了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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/743040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Feign进行微服务之间的接口调用:Spring Cloud Alibaba中的声明式服务调用

一、Feign介绍 Feign是一个声明式的HTTP客户端框架,用于简化微服务架构中服务之间的通信。它是Spring Cloud框架的一部分,旨在提供一种优雅且易于使用的方式来定义和调用HTTP请求。 Feign的设计目标是让服务之间的通信变得更加简单和直观。通常情况下&am…

EmEditor自定义快捷键之下一个标签页上一个标签页

EmEditor自定义快捷键 有好几种叫法 下一个标签页上一个标签页 下一个选项卡上一个选项卡 在这里个软件它叫’右侧文档’ ‘左侧文档’ 工具 - 所有配置的属性 - 键盘 - 窗口 - 类别: 选’窗口’ - 依次选 ‘右边的文档’ ‘左边的文档’ 按下新的快捷键 - 是每次只按一个键(不…

简单的复习下与 CSS Flex 布局相关的几个关键属性

揭开align-content、justify-content、align-items和justify-items的神秘面纱,解释它们各自的功能以及在不同的情境下如何使用。 在过去几年中,由于弹性盒子和网格布局的演变,CSS布局设计的艺术发生了重大变化。而这一变革的核心,…

CS231N assignment3 RNN

对作业进行一些形象的解释 首先是def rnn_step_forward: 这里的t时刻其实就是一个句子里面的单词数,为了方便会统一到一个最长长度,对于比这个长度短的部分用null进行填充,并且在方法内部会让Null不进行传播和梯度计算。 我们最…

AIGC的发展史:从模仿到创造,AI的创造性探索

在 AI时代,人工智能不再是简单的机器,而是一个具有无限创造力的创造者。AIGC的诞生是人工智能从模仿到创造的一种进步,也是对人类创造力的一种新探索。 而这种由AI生成的内容究竟是如何发展而来的呢?在本文中,我们将探…

QT检测USB HID设备的拔插

网上的参考代码很多,比如下面这个: QT 检测hid设备拔插打印设备信息_qt hid打印机_研知电子的博客-CSDN博客 但是,参考了很多人的代码,写出来的发现检测不到USB HID设备的拔插。 明明其他人都可以正常使用,那问题应…

java内存区 || 并发

目录 什么是线程? 线程的创建和上下文切换: 线程的入栈和出栈: 堆栈的作用: CPU核心数概念 线程的start状态 就绪队列 操作系统的时间片 线程中代码执行顺序 实际中内存图 什么是线程? 线程的创建和上下文切换…

【android12】给第三方应用APK添加系统签名

一、背景 自己或者客户的第三方apk需要用到很多系统权限,所以要内置到系统目录下,变成系统自带的APP,如果不用系统文件生成的签名安装,会导致APP远程更新失败提示签名错误。 二、环境准备 1.Ubuntu系统(推荐1804版本及…

Invalid name=“org.apache.dubbo.config.ApplicationConfig#0“

上一篇文章是springboot 集成 dubbo: spring boot 集成dubbo_Demonor_的博客-CSDN博客 在集成的时候出现了一些异常,在这里记录一下,并排查出原因 异常信息1: [2m2023-07-11 20:38:39.387[0;39m [32m INFO[0;39m [35m21492[0;…

92.qt qml-日期/日期时间/时间选择器(日历选择器)

截图如下所示: 效果图如下所示: 1.前言 QML日历组件我们之前移植过: 67.qt quick-qml自定义日历组件(支持竖屏和横屏)_qml日历_诺谦的博客-CSDN博客 但是该组件内部代码比较坑的就是全部使用自定义对象,导致性能不行,动画卡顿,并且不好加时间选择,所以本章我们重新学…

Mysql 实现批量插入对已存在数据忽略或更新

Mysql 实现批量插入对已存在数据忽略/更新 文章目录 Mysql 实现批量插入对已存在数据忽略/更新一. 表的准备二. 实现2.1 实现原理2.2 批量插入对已存在数据忽略 一. 表的准备 CREATE TABLE demo (id int NOT NULL AUTO_INCREMENT COMMENT 主键id,name varchar(10) DEFAULT NUL…

重磅IntelliJ IDEA 2023.2 新版本即将发布,拥抱 AI

IntelliJ IDEA 近期连续发布多个EAP版本,官方在对用户体验不断优化的同时,也新增了一些不错的功能,尤其是人工智能助手补充,AI Assistant,相信在后续IDEA使用中,会对开发者工作效率带来不错的提升。 以下是…

基于A*的二维多无人机航线规划

Matlab航迹规划仿真——A*算法_航迹起始算法 matlab_致守的博客-CSDN博客 matlab2016及以上可以运行 astar.m function [] astar(Spoint,Epoint,Matrix,m,n,h1,h2) %%寻路 Matrix(Spoint(1),Spoint(2))0; Matrix(Epoint(1),Epoint(2))inf; GMatrix; FMatrix; openlistMatri…

安全防御 --- DDOS攻击(01)

DOS攻击(deny of service)--- 拒绝式服务攻击 例:2016年10月21日,美国提供动态DNS服务的DynDNS遭到DDOS攻击,攻击导致许多使用DynDNS服务的网站遭遇访问问题,此事件中,黑客人就是运用了DNS洪水…

ceph--RBD的使用

Ceph-RDB 1、RBD架构图 Ceph 可以同时提供对象存储 RADOSGW、块存储 RBD、文件系统存储 Ceph FS,RBD 即 RADOS Block Device 的简称,RBD 块存储是常用的存储类型之一,RBD 块设备类似磁盘 可以被挂载,RBD 块设备具有快照、多副本、克隆和一致…

今天实习第一天,用git

老板问了我是否用过gitee,并且是否用过git,在集成工具中,会git来提交代码。我说没有。 所以,先使用gitee。 01.登录gitee的官网,在此处登录。 02.绑定邮箱,我用的是QQ邮箱。

服务端研发提测模板

test环境分支自测通过 提测邮件标注test环境分支 【xxxxxx需求】服务端研发提测了,快去测试吧!

vue3中的provide

作用:实现祖孙件通信套路:父组件有一个provide选项来提供数据,子组件有一个inject选项来开始使用这些数据具体写法: 祖组件中: <template><div class"lim"><h2>祖组件</h2><child></child>名字:{{ car.name }}<br>价格:…

SpringBoot与Vue前后端分离项目。用Nginx代理。

Nginx代理主要是解决跨域与负载均衡的作用。 我这里用的自己的电脑&#xff0c;用的windows系统&#xff0c;不过配置基本是和Linux一样的。 下载Nginx nginx: download Nginx常用命令&#xff0c;先cd到解文件夹路径&#xff1a; nginx.exe&#xff1a;开启服务。nginx -s…

预训练模型相关整理

1、怎么使用预训练网络&#xff1f; 使用预训练网络有两种方法&#xff1a;特征提取&#xff08;feature extraction&#xff09;和微调模型&#xff08;fine-tuning&#xff09;。 1、特征提取 特征提取是使用之前网络学到的表示来从新样本中提取出有趣的特征。然后将这些特…