一分钟读懂低功耗蓝牙(BLE)MTU交换数据包

1.概述
  * MTU: 最大传输单元(MAXIMUM TRANSMISSION UNIT) , 指在一个PDU (Protocol Data Unit: 协议数据单元,在一个传输单元中的有效传输数

据)能够传输的最大数据量(多少字节可以一次性传输到对方)。
  * MTU 交换是为了在主从双方设置一个PDU中最大能够交换的数据量,通过MTU的交换和双方确认(注意这个MTU是不可以协商的,只是通知对方,双方在知道对方的极限后会选择一个较小的值作为以后的MTU,比如说,主设备发出一个150个字节的MTU请求,但是从设备回应MTU是23字节,那么今后双方要以较小的值23字节作为以后的MTU),主从双方约定每次在做数据传输时不超过这个最大数据单元
    MTU交换通常发生在主从双方建立连接关系后(参见"一分钟读懂低功耗蓝牙连接数据包")
    做个对比就可以知道BLE MTU 比较小(不过新的BLE 标准MTU 已经大幅提升,详见即将发表在VIEWTOOL BBS上的后续文章)。
  ****************************************************************“*************************      
   以太网:1500
  IEEE 802.3/802.2: 1492
  X.25: 576
  BLE: 23   => 这就是为什么WIFI 可以用于传输视频,传统蓝牙(BT)可以传输音频,而低功耗蓝牙(BTLE 或者BLE)只能够传输控制数据的原因了。
  ******************************************************************************************
  * MTU 交换命令:属于ATT 命令
  * MTU 交换过程:如下图
    MTU Exchange.png 
  * MTU 两个命令(“MTU 请求”及“MTU 响应”)详解如下(见“4”)

2.关键字:Hollong BLE 侦听仪,低功耗蓝牙嗅探器, BLE 分析仪,BLE 数据抓取
  Keyword: Hollong BLE Sniffer, BLE Data Analyzer,BLE Capture

  • 11
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以回答这个问题。以下是使用 Qt 编写低功耗蓝牙 BLE 的代码示例: ```cpp #include <QBluetoothDeviceDiscoveryAgent> #include <QBluetoothLocalDevice> #include <QBluetoothServiceDiscoveryAgent> #include <QBluetoothSocket> #include <QCoreApplication> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); // 获取本地蓝牙设备 QBluetoothLocalDevice localDevice; if (!localDevice.isValid()) { qDebug() << "本地蓝牙设备无效"; return 1; } // 打开本地蓝牙设备 if (!localDevice.powerOn()) { qDebug() << "无法打开本地蓝牙设备"; return 1; } // 开始搜索 BLE 设备 QBluetoothDeviceDiscoveryAgent discoveryAgent; discoveryAgent.setLowEnergyDiscoveryTimeout(500); // 设置搜索时间为 5 秒 QObject::connect(&discoveryAgent, &QBluetoothDeviceDiscoveryAgent::deviceDiscovered, [&](const QBluetoothDeviceInfo &deviceInfo) { qDebug() << "发现 BLE 设备:" << deviceInfo.name() << deviceInfo.address().toString(); }); discoveryAgent.start(QBluetoothDeviceDiscoveryAgent::LowEnergyMethod); // 开始搜索 BLE 服务 QBluetoothServiceDiscoveryAgent serviceAgent; QObject::connect(&serviceAgent, &QBluetoothServiceDiscoveryAgent::serviceDiscovered, [&](const QBluetoothServiceInfo &serviceInfo) { qDebug() << "发现 BLE 服务:" << serviceInfo.serviceName() << serviceInfo.serviceUuid().toString(); }); serviceAgent.start(); return app.exec(); } ``` 这是一个简单的 BLE 设备和服务搜索示例,你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值