从BLE设备获取响应

人气:833 发布:2022-10-16 标签: ios response bluetooth-lowenergy swift3

问题描述

我对使用蓝牙设备非常陌生。到目前为止,一切都运行得很好。但是有个问题我不知道该怎么处理。 我有一个LED灯装置,我可以改变一切,从颜色到速度,闪烁,褪色等等。 现在我想读取当前设备状态(例如,设备是打开的还是关闭的)。我有一份设备文档,上面写着:

查询: a)发送订单:[0XEF]+[0X01]+[0X77] b)控制器响应: [0X66]+[8位设备名称(0x14)]+[8位开关开/关]+[8位模式值]+[8位运行/暂停状态]+[8位速度值]+[8位红色数据]+[8位绿色数据]+[8位蓝色数据]+[8位温时]+[8位版本号]+[0X99]

如何获取控制器响应? 无论写入调用是否成功,didWriteValueFor函数只返回我。

推荐答案

如果特征支持通知,您可以使用该行打开无类型:

peripheral.setNotifyValue(true, for: characteristic)
将具有该特征外围设备的委派设置为正确的文件非常重要,在我的示例中是:
peripheral.delegate = self

之后,当发生变化时,外围设备将在您的代码中触发此方法:

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
    //data is in characteristic.value
}

如果您的特征不支持注释,您可以尝试将响应类型设置为.with Reponse的数据写入外围设备,如下所示:

peripheral.writeValue(data, for: characteristic, type: .withResponse)

记住还要设置外围设备委托,因为该外围设备在每次成功写入后都会触发此方法:

    //write response
    func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) {
        //data is in characteristic.value
    }

141