当前位置: 首页 > news >正文

Pyqt5蓝牙链接心跳检测

前不久组装了一台带有蓝牙的STM32小车,然后用pyqt5编写了一个简单的上位机程序,实现PC端通过蓝牙遥控STM32小车。今天先来聊聊其中的蓝牙链接和链接检测的功能(图1)。

图1蓝牙链接程序

如图1所示,整个UI界面左边是实现打开/关闭串口,右边是检测状态显示区域。程序的操作就是选择串口端口->设置波特率->点击“打开串口”按钮,若串口链接成功,显示区域就会出现一颗心。

在STM32小车端,我设置了开机后蓝牙始终会发送数据包给上位机程序。若上位机接收到数据包,在其检测显示区域就会显示一颗金色的心(图2);若上位机程序接收不到数据包,就会显示灰色的心(图3)。如果一直显示灰色的心就表示蓝牙链接出问题了。

图2 蓝牙链接正常

图3 蓝牙数据接收失败

整个程序的核心代码就是openserial()函数,函数先获取端口号和波特率数据,然后执行串口链接操作,链接成功则启动数据接收线程,并在检测显示区域画心。Openserial()函数代码如下:

def openserial(self):if self.btn1.text() == "打开串口":          ports = self.port.currentText()baudr = int(self.baudrate.currentText())try:self.ser = serial.Serial(ports, baudr, timeout=1)except serial.SerialException as e:print(f"Serial Port Error:{e}")finally:if self.ser.isOpen():print(ports, "open success")self.btn1.setText("关闭串口")self.thread1 = serialThread(self.ser)  #开始接收数据self.thread1.heart_signal.connect(self.refreshUI)  #根据数据画心self.thread1.start()else:self.ser.close()self.thread1.quit()print("serial closed")self.btn1.setText("打开串口")

接收蓝牙数据的代码:

class serialThread(QThread):heart_signal = pyqtSignal(str)def __init__(self, ser):super(serialThread, self).__init__()self.ser = serdef run(self):try:while True:data = self.ser.read(3)data = data.decode('utf-8')# print("收到消息:", data)self.heart_signal.emit(data)except Exception as e:print(str(e))

在检测显示区域画心的代码:

def refreshUI(self, signal):if signal == '':color = '#DCDCDC'  #接收数据为空,颜色变灰色else:color = '#DAA520'  #接收数据不为空,颜色变金色# 以下是画心形图案F1 = MyFigure(width=5, height=4, dpi=100)F1.axes1 = F1.fig.add_subplot(111)t = np.linspace(0, 2 * np.pi, 100)x = 16 * np.sin(t) ** 3y = 13 * np.cos(t) - 5 * np.cos(2 * t) - 2 * np.cos(3 * t) - np.cos(4 * t)F1.axes1.plot(x, y, color)F1.axes1.axis('equal')F1.axes1.fill(x, y, color)F1.axes1.axis('off')[F1.axes1.spines[loc_axis].set_visible(False) for loc_axis in ['top', 'right', 'bottom', 'left']]width, height = self.graphicsView.width(), self.graphicsView.height()F1.resize(width, height)F1.fig.set_facecolor('black')self.scene = QGraphicsScene()  # 创建一个场景self.scene.addWidget(F1)  # 将图形元素添加到场景中self.graphicsView.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)self.graphicsView.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)self.graphicsView.setScene(self.scene)  # 将创建添加到图形视图显示窗口

上面三段代码实现了整个蓝牙检测的功能,完整代码已上传到CSDN资源,有需要的同学自己下载:

https://download.csdn.net/download/hydekong/89951710


http://www.mrgr.cn/news/65326.html

相关文章:

  • Docker部署Portainer CE结合内网穿透实现容器的可视化管理与远程访问
  • thrift rpc 四种类型的服务端的实现详细介绍
  • 低压补偿控制器维修措施
  • SpringBoot+Shiro权限管理
  • android——渐变色
  • glsl基于LTC的面光源渲染 - 矩形光通过three.js
  • LeetCode 每日一题,用 Go 实现两数之和的非暴力解法
  • UEFI学习笔记(十四):UEFI Driver Model概述
  • scala Map集合
  • 云原生+AI核心技术&最佳实践
  • A10,V100,T4,P100,P4 那一款机器的配置比较好
  • 计算机存储单元bit。不同编程语言类型差异。
  • 统信UOS系统应用开发
  • 软件测试的几个关键步骤,你需要知道!
  • 文献翻译如何一键完成?推荐2024年11款翻译软件
  • 【PS】- 选区练习
  • Kubernetes中的PersistentVolume卷
  • C++初阶教程——C++内存管理
  • 在Python中最小化预测函数的参数
  • 总结---20个工作中一定会用到的python实用小脚本
  • 怀旧,这些曾盛极一时的国产经典软件,用过5个你是老网民
  • 【双目视觉标定】——1原理与实践
  • mysql死锁或锁表分析
  • TypeScript实用笔记(二):类与接口详解
  • Spectrum 绘制调色板:实现与应用指南
  • 构建本地RAG知识库(上): langchain+ollama构建本地大模型应用