ios - 蓝牙并发命令
问题描述
我有几个定制的 BLE LED 灯(外围设备)。我已经实现了一个蓝牙助手类(CBCentralManager 和相关的委托方法),并且可以毫无问题地单独连接和控制每个灯。我已经处理了所有基本的检索/连接/通知逻辑,而且效果很好。
我的下一步是连接到多个灯并基本上同时(或尽可能地)控制它们。为了管理不同的活动外设,我创建了一个字典来存储它们,使用 UUID 作为键(BLEDevice 包含一个外设属性,我在其中存储引用):
class BLEDevice {
var uuid: String!
var peripheral: CBPeripheral!
var rssi: NSNumber!
var name: String!
var advertData: [String: Any]!
var type = 0
init() {
}
}
var bleDeviceDict: [String: BLEDevice] = [:]
这个字典在检索过程中被填充,然后我为每个字典做一个连接请求。在连接、服务发现、特征发现等成功后,我更新字典对象。我能够毫无问题地连接到每个设备,但是当我尝试发送任何命令(带有或不带有响应标志)时,我得到的操作不可靠。有时它工作得很好,有时它会引发以下错误:
[CoreBluetooth] WARNING: <CBCharacteristic: 0x129701430, UUID = FFE1, properties = 0x1C, value = <45080154>, notifying = YES> is not a valid characteristic for peripheral <CBPeripheral: 0x127e0ad70, identifier = 44CDB018-2A5C-D776-7641-7F193470945A, name = 3CA5090A21AFED, state = connected
>
为了发送组命令,我设置了一个基本的 for 循环来迭代并将命令发送到每个外围设备,我几乎可以肯定这种蛮力方法是错误的方法来完成此任务。我已经进行了一些搜索,但找不到任何关于同时控制设备的正确方法的文献。我真的可以使用一些建议或指导来帮助解决这个问题。实现此行为的最佳实践是什么?
解决方案
您需要为您连接的每个外围设备存储相关特征的特定实例。
向您添加属性以BLEDevice
存储对您在发现期间找到的相关特征的引用。
没有其他方法可以将数据发送到每个外围设备;您需要遍历外围集合并将数据写入每个集合。
推荐阅读
- python - 如何查看 conda 包的摘要或描述?
- android - 在观察到 Livedata 更改后,ViewSwitcher 在初始化时不使用 .showNext() 切换视图
- r - R:在确切日期拆分时间序列 Intor 训练/测试
- reactjs - 失败的道具类型:提供给“ForwardRef(Grid)”的无效道具“children”
- azure-devops - 积压级别名称更改时的 Powerbi 和 Azure DevOps(在线版)报告
- elasticsearch - Kibana 7.7.0 基础版:从 docker 启动时缺少管理选项卡安全面板
- python - 为冰雹序列创建生成器表达式
- unity3d - Unity/HLSL:根据表面法线尝试使用纹理图集的不同部分时出现奇怪的结果
- python - 无法让 swig %ignore 忽略命名空间中的类导致编译错误
- git-config - 使用 RStudio 提交到 github