- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在构建一个连接到 BLE device (Redbear Labs Duo) 的 iOS Swift 应用程序.
什么有效?
问题出在哪里?
我执行上述步骤的代码如下..
func scanWifi() {
print("[DEBUG] - Scanning for Wifi")
let command:[UInt8] = [0x02, 0xA0]
let commandData = NSData(bytes: command, length: command.count)
BLE.sharedInstance.write(toCharacteristic: BLE.sharedInstance.RBL_CHAR_CMD_UUID, data: commandData, withType: .withResponse)
let state:[UInt8] = [0xB1]
let stateData = NSData(bytes: state, length: state.count)
BLE.sharedInstance.write(toCharacteristic: BLE.sharedInstance.RBL_CHAR_SCN_UUID, data: stateData, withType: .withResponse)
BLE.sharedInstance.read(fromCharacteristic: BLE.sharedInstance.RBL_CHAR_SCN_UUID)
}
一切正常...但是...将上述数据写入外围设备后,我期待调用下面的方法 - 它从来没有调用过..我做错了什么?
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
if error != nil {
print("[ERROR] Error updating value. \(error!.localizedDescription)")
return
}
if characteristic.uuid.uuidString == RBL_CHAR_CMD_UUID {
self.delegate?.bleDidReceiveData(data: characteristic.value as NSData?)
}
}
更新:
我设置了一堆调试语句并得到了以下输出 - 从下面可以明显看出
[DEBUG] Connecting to peripheral: 547BC3C9-4823-431C-B888-A8F3E8C699F5
[DEBUG] Connected to peripheral 547BC3C9-4823-431C-B888-A8F3E8C699F5
[DEBUG] Did connect to peripheral
[DEBUG] Found service: 3EC61400-89CD-49C3-A0D9-7A85669E901E for peripheral: 547BC3C9-4823-431C-B888-A8F3E8C699F5
[DEBUG] Found characteristic: 3EC61401-89CD-49C3-A0D9-7A85669E901E for peripheral: 547BC3C9-4823-431C-B888-A8F3E8C699F5
[DEBUG] Found characteristic: 3EC61402-89CD-49C3-A0D9-7A85669E901E for peripheral: 547BC3C9-4823-431C-B888-A8F3E8C699F5
("3EC61402-89CD-49C3-A0D9-7A85669E901E", )
("3EC61401-89CD-49C3-A0D9-7A85669E901E", )
[DEBUG] didUpdateNotification state for characteristic CBCharacteristic: 0x1702a6c60, UUID = 3EC61401-89CD-49C3-A0D9-7A85669E901E, properties = 0x14, value = (null), notifying = YES on peripheral: CBPeripheral: 0x1740fba80, identifier = 547BC3C9-4823-431C-B888-A8F3E8C699F5, name = Duo-ZKBY, state = connected
[DEBUG] didUpdateNotification state for characteristic: CBCharacteristic: 0x1742a3c60, UUID = 3EC61402-89CD-49C3-A0D9-7A85669E901E, properties = 0x10, value = (null), notifying = YES on peripheral: CBPeripheral: 0x1740fba80, identifier = 547BC3C9-4823-431C-B888-A8F3E8C699F5, name = Duo-ZKBY, state = connected
最佳答案
找到解决方案 - 在此发布以造福他人。
阅读Redbear Labs 提供的文档,需要注意的关键是Command 特性仅支持两种类型的属性- PROPERTY_WRITE_NO_RESPONSE | PROPERTY_NOTIFY
同样,Scan 特性仅支持 PROPERTY_NOTIFY
此外,要让设备扫描所有可用的 Wifi - 我们应该只向命令特征写入一个 2 字节的命令 [0x20, 0xA0]
- 相同的代码如下
func scanWifi() {
print("[DEBUG] - Scanning for Wifi")
let command:[UInt8] = [0x02, 0xA0]
let commandData = NSData(bytes: command, length: command.count)
BLE.sharedInstance.writeTo(characteristic: BLE.sharedInstance.RBL_CHAR_CMD_UUID, data: commandData, withType: .withoutResponse)
}
无需向扫描特征写入任何内容。当 Wifi 扫描开始时,Scan 特性将发送一个值为 0xB1
的通知以指示扫描开始,然后发送一个值为 0xB2
的通知以指示扫描结束。
扫描到的实际 Wifi 网络将通过命令特征本身的通知发送。
关于ios - 从 Swift 写入 BLE 外设,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41029477/
我是 Xcode 新手,我编写了一些代码来发现并连接到 BLE 模块 (Adafruit Bluefruit LE)。然而扫描时却什么也没发现。有什么帮助吗? 这是我的代码 import UIKit
我正在开发一个 Android 应用程序,该应用程序充当具有服务的蓝牙外围设备角色。 当我开始转换广告时,搜索提供此服务的设备的其他 Android 设备可以看到我的设备(并且无需 PIN 即可与之配
解释: 我正在使用核心蓝牙框架连接到 BTLE 外围设备,将外围设备标识符保存在数据库中。 同时,我将外围设备保存在一个数组中以处理与外围设备的重新连接。 但是,当用户手动退出应用程序时,我的数组变为
我对蓝牙通信还很陌生。我的第一个项目打算将数据从 iOS 设备传输到 BLEshield(小芯片)。 为了测试我的中央代码,我决定将 iPhone 设置为外围设备(一旦我拿到芯片,芯片将扮演的角色)并
我正在尝试创建一个充当低功耗蓝牙 (BLE) 外围设备的 Android 5 (lollipop) 应用程序。该应用程序在支持 BLE 外设模式的 Nexus 9 上运行。到目前为止,我已经设法为服务
我想在我的电脑上通过 USB 控制遥控模型。我不需要真正的 radio 控制,所以直接通过电缆控制 Helm 机就足够了(是的,模型和控制单元之间会有电缆)。我想我会构建一些基于微 Controlle
在升级到 iOS6 之前,一切正常,但现在当我运行时 [centralManager cancelPeripheralConnection:peripheral]; 回调被触发 -(void) cen
我需要使用 LPC1769 通过 SPI 将某些数据发送到 FPGA。但是我不太明白应该如何处理这个问题。我目前有这段代码,最终出现在硬故障处理程序中。我不被允许使用 CMSIS,所以我必须自己定义寄
我正在尝试使在不同设备上运行的两个程序通过 CoreBluetooth 进行蓝牙通信。我可以从管理器找到并连接外围设备,并且可以浏览连接的外围设备中的服务,但是当我尝试发现特征时,出现错误此操作不允许
我正在开发一个系统,该系统将 BLE 设备 (TI CC2540) 作为中央设备,将 iPhone4S 上的 iOS 应用程序作为外围设备。除了我需要的 1 个功能外,一切都很好:从中央端列入白名单(
BLE 在 7 Plus (iOS 14.4.2) 和 6 (iOS 12) 上运行良好。但是在 XR (14.4.2) 上,11 连接卡在 centralManager.connect(periph
我开发了一个 BLE 设备作为主设备,并连接到作为从设备的传感器。现在我想开发一个实时显示来 self 的设备(主设备)的数据的应用程序,因此该应用程序必须充当从设备(广告)。 Windows 8 A
我对这个问题失去了理智。 事实是,一个 android 设备正在通告一个字符串值:“78d89537-4309-4728-87f6-3ab2bbe231d8”(36 字节)。我使用的特征定义为 an
我正在运行以下代码: [peripheral maximumWriteValueLengthForType:CBCharacteristicWriteWithResponse]; 在我的例子中(iPh
有人可以建议在 BLE 通信中是否可以在建立连接之前从外围设备验证中央设备? 例子:1)周边广告不断2)Central发现Peripherial并发送连接请求3)连接建立,广告停止3) Periphe
所以我有一个简单的外设应用程序,我在我的三星 S8 手机上运行的 Android Studio 中编写代码。我可以很好地设置我所有的 BLE 广告和特性,但是当我添加我的服务时。从另一个中央设备(即具
如果我想将外围设备 (Arduino) 连接到中央设备 (Iphone),是否必须将 arduino 中的数据结构化为服务和特征?我见过一些项目,其中 iphone 连接到 arduino,但 iph
我正在 iOS 上开发一个 BLE 应用程序,在与 BLE 配件建立连接后,我将 CBPeripheral UUID 保存到 NSUSerDefaults。这样,如果稍后重新启动应用程序,并且 BLE
我想知道是否可以通过 coreBluetooth 将设备作为外围设备和 iBeacons 的范围来宣传服务,同时在后台完成这两项工作?本质上,目的是确定信标的范围,然后如果信标在.Near 或.Imm
是否可以在连接到中央设备时对广告进行外围扫描?看起来它要么正在扫描广告要么已连接您的外围设备,但我需要两者都做。外围设备应该能够报告它接收到的广告中的 RSSI 测量值。 我在 linux box (
我是一名优秀的程序员,十分优秀!