Home Articles

切换cengtral和外围设备之间的角色

Asked
Viewed 574 times
0

我能够:1 . 在中央设备和外围设备之间 Build GAP连接2.通过写入特性将数据从中心发送到外围设备 .

现在,我想将一些数据发送回中央 . 如何才能做到这一点?外围设备现在是否会开始扮演一个中心角色?或者它只是通过发送一些数据从外围设备到中心的响应?

请指导我这个 .

2 Answers

  • 0

    我想你想要的是点对点蓝牙传输机制 . 我遵循了以下方法:

    • 每个设备都侦听传入的连接请求 .

    • 想要发送数据的设备,连接到其他设备并传输数据 .

    这意味着设备有时必须同时处于中央和外围模式 .

    如果它不能同时工作,那么你可能需要停止广告,如果你正在写数据 . 因为你通过ble写数据我想它必须非常小 . 这意味着你的设备不会只是短期广告时间 .

    您可以使用混合方法,使用ble进行广告,但通过传统蓝牙传输数据 .

    Alternative approach:

    从外围设备,宣传中央将要写入的两个特征......一个特征(TYPE WRITE)和中央将要收听的另一个特征(TYPE NOTIFY) . 第二个特性仅用于从外设向中心发送确认 .

    一旦中心写入特征,外围设备就可以通过更新“NOTIFY”特征来向中央确认 .

  • 0

    好!这是答案 . 我终于弄清楚外围设备如何将响应发送回中央:

    CENTRAL

    bluetoothGattCharacteristic.setValue(value.getBytes());
    
    bluetoothGattCharacteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE);
    
    mBluetoothLeService.mBluetoothGatt.writeCharacteristic(bluetoothGattCharacteristic);
    

    PERIPHERAL

    在外围方面,当中央写入特定特征时,会触发 onCharacteristicWriteRequest .
    要将响应从外围设备发送回中央,请在按钮单击时调用以下方法并调用 notifyCharacteristicChanged API以通知中心 .

    public void sendResponse(String data){
        for (int i = 0; i < Config.arr.length; i++) {
            BluetoothGattCharacteristic gattCharacteristic = AService.getCharacteristic(UUID.fromString(CHAR_NOTIFY));
            gattCharacteristic.setValue(data);
            boolean result = mGattServer.notifyCharacteristicChanged(Config.device, gattCharacteristic, true);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    

    在中心侧,然后触发 onCharacteristicChanged 回调并收到通知 .

Related