Delphi 的 Blooth LE(蓝牙4.0) 编程原理简介

首先,Delphi 官方的例子程序里面,有BLE的例子,可以先参考。

蓝牙的不同版本:2.0 3.0 4.0 其通讯协议有很大的不同。4.0 就是 BLE,低功耗蓝牙。

以下是我经过自己写例子代码操作蓝牙设备的测试摸索后对BLE蓝牙编程原理的理解。安卓手机上测试通过。

Delphi 提供了BLE的控件:TBluetoothLE


拖一个控件放到界面上,设置控件的 Enable 为 True。程序启动后,该控件可以工作。


对一个 BLE 设备的读写操作的基本原理:


BLE 设备有多个不同的【服务】,Service;每个服务底下,有多个不同的【特征】, Characteristic。读写操作就是针对特征的【值】。


每个服务有一个 UUID,每个特征也有一个 UUID。


在 Delphi 底下采用 TBluetoothLE 控件操作 BLE 的基本方式:


1. 首先是设备发现。执行完设备发现后,TBluetoothLE 里面会产生多个设备实例对象。
   启动设备发现的代码:BluetoothLE1.DiscoverDevices(3000); 这里的 3000 是超时值。可以是 10 秒甚至更多。
   
   设备发现(扫描BLE蓝牙设备)中,BluetoothLE1 会触发事件:OnDiscoverLEDevice。这里会不停地触发。扫描动作完成后,会触发 OnEndDiscoverDevice 事件。可以在这个事件里面查看是否扫描到你要的设备。
   
2. 设备发现完成后,BluetoothLE1 里面就有多个设备的对象实例 TBluetoothLEDevice,通过 BluetoothLE1.DiscoveredDevices[i] 可以获取到。


3. 针对某个设备,执行服务发现(扫描其提供什么服务):BluetoothLE1.DiscoveredDevices[AIndex].DiscoverServices
3.1. 上述服务发现方法被调用后,会触发 OnServicesDiscovered 事件。这个事件提供了 AServiceList: TBluetoothGattServiceList,可以从里面获取到这个设备的所有服务对象。


4. 要操作某个设备的某个值:
4.1. 首先要根据服务的 UUID 获取到设备对象,方法:BluetoothLE1.DiscoveredDevices[i]
4.2. 然后,针对该设备对象,获取其服务对象(根据该服务的 UUID),方法:BluetoothLE1.GetService; 
4.3. 获取特征对象(采用该特征的 UUID),方法:BluetoothLE1.GetCharacteristic;
4.4. 如果是写数据到蓝牙设备,则是修改该特征对象的值:ACharacteristic.Value := AValue; 然后,将该特征对象写入蓝牙设备:BluetoothLE1.WriteCharacteristic(ADevice, ACharacteristic); 到此数据已经写入蓝牙设备。
4.5. 如果是要监听某个特征的广播,注册:ADevice.SetCharacteristicNotification(ACharacteristic, True); 注册完成后,收到蓝牙设备的广播数据,BluetoothLE1 会触发 OnE1CharacteristicRead 事件。通过该事件提供的 ACharacteristic: TBluetoothGattCharacteristic 特征对象,读到来自蓝牙的广播数据。数据如何解释,则看具体设备或具体的定义了。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值