欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > Pyqt5蓝牙链接心跳检测

Pyqt5蓝牙链接心跳检测

2025/6/8 23:53:40 来源:https://blog.csdn.net/hydekong/article/details/143479340  浏览:    关键词: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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词