如何从自定义 BLE 服务读取数据(例如智能手表)

Posted

技术标签:

【中文标题】如何从自定义 BLE 服务读取数据(例如智能手表)【英文标题】:How to read data from custom BLE service(e.g smartwatch) 【发布时间】:2018-02-21 04:43:09 【问题描述】:

我有一个 BLE 设备(智能手表),我想从服务中读取所有数据并在我的应用程序(Swift 和 android)中使用,我如何访问自定义服务中的数据,但我看不到 UUID GATT 服务和特点

【问题讨论】:

首先尝试使用一些 BLE 调试应用程序,如 nRF Connect 来查看是否存在特征。如果可行,只需按照在线教程学习如何在 Android 上使用 BLE。 【参考方案1】:

您可以使用此代码读取数据。这对我有用。 当您连接智能手表时,您需要发送服务发现请求。因此,触发了以下回调方法。在此方法中获取您的服务和特征。

 @Override
        public void onServicesDiscovered(final BluetoothGatt gatt, final int status) 
            Log.e(TAG, "onServicesDiscovered: ");

            if (status != BluetoothGatt.GATT_SUCCESS) 
                Log.w(TAG, "onServicesDiscovered received: " + status);
                return;
            

            BluetoothGattService customService = gatt.getService(CUSTOM_SERVICE_UUID);
            if (customService != null) 
                customNotifyCharacteristic = customService.getCharacteristic(CUSTOM_CHARACTERISTICS_NOTIFY_UUID);
                customWriteCharacteristic = customService.getCharacteristic(CUSTOM_CHARACTERISTICS_WRITE_UUID);
                customReadCharacteristic = customService.getCharacteristic(CUSTOM_CHARACTERISTICS_READ_UUID);
            
        

在获得所有特征和服务后,发送如下读取请求。 将下面的行放在您需要读取数据的位置。

readCharacteristic(customReadCharacteristic);

下面解释 readCharacteristic 方法。

        public void readCharacteristic(BluetoothGattCharacteristic characteristic) 
                if (mBluetoothAdapter == null || mBluetoothGatt == null) 
                    Log.w(TAG, "BluetoothAdapter not initialized");
                    return;
                

                mBluetoothGatt.readCharacteristic(characteristic);
            

所以,触发了 onCharacteristicRead 回调。

 @Override
        public void onCharacteristicRead(BluetoothGatt gatt,
                                         BluetoothGattCharacteristic characteristic,
                                         int status) 
            if (status == BluetoothGatt.GATT_SUCCESS) 
               byte[] data = characteristic.getValue();
            
        

字节[] 数据 = 特征.getValue(); 返回您要从设备中读取的数据。

【讨论】:

以上是关于如何从自定义 BLE 服务读取数据(例如智能手表)的主要内容,如果未能解决你的问题,请参考以下文章

使用 BLE 从智能手表接收加速度计和陀螺仪信号

智能手表PSRAM芯片存储方案QPI接口APS6404L

原创Android 5.0 BLE低功耗蓝牙从设备应用

如何从自定义属性中读取维度值?

如何在 Swift 中读取 BLE 特征浮点数

Android BLE - 读取自定义服务