基于HT32的智能家居demo(蓝牙上位机)

        参加合泰杯作品的部分展示,基于HT32的智能家居,这里展示灯光的相关控制,是用蓝牙进行的数据透传,参考了一些资料,美化封装了一下之前的上位机界面。

        成果展示

        点击主界面的蓝牙设置,进行连接,下面已经成功连接上,并且接收到了HT32单片机测量到的温湿度数据。

LED关闭 最右侧的LED

 LED打开

开关灯的协议指令,控制台输出

 

        设计过程

                HT32单片机部分 (仅展示LED)

                        使用的是开发板自带的LED,只需要控制对于引脚输出的电平就可以控制LED的亮灭。

#ifndef _LED_H_
#define _LED_H_

#include "ht32f5xxxx_ckcu.h"
#include "ht32f5xxxx_gpio.h"

//端口号定义
#define HT_GPIO_PORT HT_GPIOC 
//LED引脚定义
#define HT_GPIO_PIN  (GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_10|GPIO_PIN_11)

//LED1 LED2 宏定义开和关
#define LED1_ON() 	GPIO_WriteOutBits(HT_GPIO_PORT,GPIO_PIN_14,RESET)
#define LED1_OFF()  GPIO_WriteOutBits(HT_GPIO_PORT,GPIO_PIN_14,SET)

#define LED2_ON() 	GPIO_WriteOutBits(HT_GPIO_PORT,GPIO_PIN_15,RESET)
#define LED2_OFF()  GPIO_WriteOutBits(HT_GPIO_PORT,GPIO_PIN_15,SET)

#define A1_ON() 	GPIO_WriteOutBits(HT_GPIO_PORT,GPIO_PIN_11,RESET)
#define A1_OFF()  GPIO_WriteOutBits(HT_GPIO_PORT,GPIO_PIN_11,SET)

#define B1_ON() 	GPIO_WriteOutBits(HT_GPIO_PORT,GPIO_PIN_12,RESET)
#define B1_OFF()  GPIO_WriteOutBits(HT_GPIO_PORT,GPIO_PIN_12,SET)
void Led_Init(void);
#endif

                蓝牙模块使用的是BT04,本来打算采用官方的模块,奈何焊接技术不行,

                使用的单片机引脚接入,  PA2 rX 和  PA3 tX 串口0 printf指向蓝牙(进行单片机向上位机的数据传输)这里简单的配置一下串口就行,和stm32类似。

                 QT蓝牙上位机部分 

                    目录展示:目录有四部分

        先进行的是my_custom的设计,里面设计了按钮开关(之前的博客做过)和其他需要使用的控件,因为qt本身的控件并没有滑动开关,所以这里重写绘画和鼠标点击事件进行滑动按钮的设置,在外面进行调用即可,QT可以进行封装到其他项目使用(但是我没有成果,所以只能在项目中进行调用)

        之后我进行的是device文件夹的设计,里面就是设计的是灯相关的,需要调用my_custom里卖弄的控件,所以放在第二步,这里很关键的一点是要设置一个信号(可以后面设计了蓝牙再进行添加),用于进行蓝牙的数据传输(我直接在这里面调用蓝牙的socket进行传输失败(遇到数不清的erro),还是得在主界面里面使用信号槽机制)

                        

                     

        然后是设计的蓝牙部分,蓝牙部分就是之前博客做的蓝牙上位机直接移植了过来。区别是这里要添加一个槽函数,用于发送信息。

                

             最后是再主界面中进行编写,将两边connect起来

                      (上位机部分参考了b站老徐的作品:链接(博主使用的是tcp)【开源项目】Qt智能家居案例。源码请从简介获取。_哔哩哔哩_bilibili

### 使用Qt开发蓝牙上位机程序 #### Qt Bluetooth模块简介 为了实现蓝牙功能,Qt提供了专门的Bluetooth模块来处理经典蓝牙以及低功耗蓝牙(BLE)通信。对于想要创建能够与BLE设备交互的应用来说,应该利用这个模块中的类来进行操作[^1]。 #### 创建新的Qt Widgets Application项目 启动Qt Creator并新建一个基于Widgets的应用程序模板作为起点。这一步骤为后续集成必要的组件奠定了基础结构。 #### 添加必需的库支持 确保.pro文件里包含了`QT += bluetooth widgets`语句以便引入所需的Bluetooth和Widgets框架支持。这样做可以使得应用程序具备访问蓝牙API的能力同时保持图形界面的功能。 #### 设计UI布局 通过拖拽控件到主窗口上来构建直观易用的操作面板。比如按钮用于触发扫描附近可用的蓝牙装置;列表视图展示发现的结果供用户选择目标外设等等[^2]。 #### 编写核心逻辑代码 下面给出了一段简单的Python风格伪代码用来说明如何初始化蓝牙管理器、发起搜索请求并且建立连接: ```python from PyQt5.QtCore import QObject, pyqtSlot from PyQt5.QtBluetooth import QBluetoothDeviceDiscoveryAgent, QBleManager class BleController(QObject): def __init__(parent=None): super().__init__(parent=parent) ble_manager = QBleManager(parent=self) discovery_agent = QBluetoothDeviceDiscoveryAgent() discovery_agent.deviceDiscovered.connect(self.on_device_discovered) @pyqtSlot(QBluetoothDeviceInfo) def on_device_discovered(info): print(f'Device found: {info.name()}') # 这里可以根据实际需求进一步筛选特定类型的BLE设备, # 并尝试与其建立连接... ``` 上述片段展示了怎样设置事件处理器监听新找到的周边节点,并打印名称至控制台输出流中去验证是否成功获取到了预期的数据包。当然,在真实场景下还需要考虑错误处理机制等问题以增强健壮性[^3]。 #### 实现数据交换过程 一旦确立起稳定可靠的链路之后就可以着手规划传输协议细节了——无论是发送命令还是接收反馈都离不开精心设计的消息格式约定。通常情况下会涉及到序列化/反序列化的流程转换原始字节流转成易于解析的对象实例形式方便应用层调用者理解使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值