Qt低功耗蓝牙系列一(什么是低功耗蓝牙开发,低功耗蓝牙的通信机制原理)

本文介绍了低功耗蓝牙(BLE)与经典蓝牙的区别,重点讲解了BLE的通信机制和协议栈,包括物理层、链路层等。还探讨了蓝牙的选用策略,以及BLE在蓝牙灯控、智能锁、MAC地址扫描、Mesh组网和室内定位等场景的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

前面讲完了经典蓝牙的开发,本章开始详解低功耗蓝牙了,我在刚接触时傻傻的分不清经典蓝牙和低功耗蓝牙的区别,一直用开发经典蓝牙设备的方法去连接低功耗蓝牙,最后当然是一直连接不上了。然后一直吐槽低功耗蓝牙的不好用,这也是鉴于不会的基础上,后面会了后发现也还是挺简单的,就是感觉层次有点复杂了,下面首先详细介绍一下android蓝牙,也算是回顾前面的经典蓝牙概念。

Android 蓝牙

说到Android中的蓝牙,大家听到的可能有蓝牙1.0、蓝牙2.0、蓝牙3.0、蓝牙4.0之类的以数字结尾的蓝牙版本号,而实际上,在最新的标准中,已经不再使用数字版本号作为蓝牙版本的区分了,取而代之的是经典蓝牙与低功耗蓝牙(BLE)这两种区别。

这里提到的低功耗蓝牙也会有很多人会误解为就是蓝牙4.0,但是完整的蓝牙4.0规范中实际上包括有经典蓝牙和低功耗蓝牙这两个部分,大家看看如下这张分类表就能够明白这其中的关系了。

在这里插入图片描述
如表中所述,现在的蓝牙实际上分为了三类:单模、双模和经典

<think>嗯,用户想了解如何使用Qt进行低功耗蓝牙(BLE)通信,特别是要求个例子。首先,我需要回忆Qt中与BLE相关的模块和类。记得Qt从某个版本开始引入了QtBluetooth模块,其中包含了BLE的支持。用户提到的参考引用里提到了“Qt Bluetooth Low Energy classes”,所以应该重点围绕这些类来展开。 首先,QtBluetooth模块中的QLowEnergyController是关键,它用于连接和管理BLE设备。然后,QLowEnergyService和QLowEnergyCharacteristic用来处理服务和特征。可能需要先扫描设备,然后连接,发现服务,读写特征等步骤。 接下来,我需要确保提供的代码示例正确,并且符合Qt的BLE编程流程。可能需要包括设备发现、连接、服务发现以及数据读写的部分。同时,用户可能需要了解如何设置通知,这样当特征值变化时可以接收更新。 另外,用户提供的引用中提到了引用[1]是个浏览BLE外设内容的应用示例,所以可能参考了Qt的官方示例。需要检查是否有标准的示例代码结构,比如使用QBluetoothDeviceDiscoveryAgent来发现设备,然后使用QLowEnergyController进行连接。 还要注意,低功耗蓝牙通信通常涉及GATT协议,所以需要解释服务UUID和特征UUID的重要性。用户可能需要知道如何查找特定服务的UUID,比如电池服务或者自定义服务。 此外,Qt的文档中可能有关于处理错误和断开连接的注意事项,这部分也需要提及,以确保代码的健壮性。例如,处理controller->errorOccurred信号,或者在断开连接时清理资源。 最后,用户的问题可能涉及到实际应用中的常见问题,比如如何提高通信效率、如何处理多设备连接等,但当前问题主要是基础示例,所以回答需要集中在基本流程和代码结构上,同时生成的相关问题可以引导用户深入了解更多细节。</think>### Qt低功耗蓝牙(BLE)通信实现步骤 1. **设备发现** 使用$QBluetoothDeviceDiscoveryAgent$扫描BLE设备,需设置发现模式为$LowEnergyMethod$: ```cpp QBluetoothDeviceDiscoveryAgent *discoveryAgent = new QBluetoothDeviceDiscoveryAgent; discoveryAgent->setLowEnergyDiscoveryTimeout(5000); connect(discoveryAgent, &QBluetoothDeviceDiscoveryAgent::deviceDiscovered, [](const QBluetoothDeviceInfo &device){ qDebug() << "Found device:" << device.name() << device.address(); }); discoveryAgent->start(QBluetoothDeviceDiscoveryAgent::LowEnergyMethod); ``` 2. **设备连接** 发现目标设备后创建$QLowEnergyController$实例: ```cpp QLowEnergyController *controller = QLowEnergyController::createCentral(deviceInfo); connect(controller, &QLowEnergyController::connected, [](){ qDebug() << "Connected to device"; }); controller->connectToDevice(); ``` 3. **服务发现** 连接成功后自动触发服务发现,需处理$serviceDiscovered$信号: ```cpp connect(controller, &QLowEnergyController::serviceDiscovered, [](const QBluetoothUuid &serviceUuid){ qDebug() << "Discovered service:" << serviceUuid.toString(); }); ``` 4. **特征读写** 获取$QLowEnergyService$实例后操作特征值: ```cpp QLowEnergyService *service = controller->createServiceObject(serviceUuid); service->discoverDetails(); // 写入特征值 QByteArray value = {0x01, 0x02}; QLowEnergyCharacteristic characteristic = service->characteristic(charUuid); service->writeCharacteristic(characteristic, value); // 启用通知 QLowEnergyDescriptor notification = characteristic.descriptor( QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration); service->writeDescriptor(notification, QByteArray::fromHex("0100")); ``` 5. **数据接收** 通过特征值变更信号接收数据: ```cpp connect(service, &QLowEnergyService::characteristicChanged, [](const QLowEnergyCharacteristic &c, const QByteArray &value){ qDebug() << "Received data:" << value.toHex(); }); ``` 完整示例可参考Qt官方BLE示例程序[^1],该示例实现了完整的BLE设备发现、连接和数据交互流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fu_Lin_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值