gpt4 book ai didi

ios - 刷新众多蓝牙外设的RSSI值

转载 作者:行者123 更新时间:2023-12-01 17:32:08 25 4
gpt4 key购买 nike

我正在尝试从几个蓝牙外围设备测量 iOS(6 和 BLE)上的 RSSI 指示器。
我可以使用 scanForPeripheral 获得 RSSI:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], CBCentralManagerScanOptionAllowDuplicatesKey, nil];

[_manager scanForPeripheralsWithServices:nil
options:options];

加上:
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI {

这可行,但我无法控制数据包接收的速率,结果似乎不确定。

我读过: https://stackoverflow.com/a/12486927/270209但我的速率根本不接近 100 毫秒(多 1~2 秒)

如果我连接到设备,readRSSI 的结果似乎更可靠。

我正在寻找一种方法来“刺激”外围设备以在扫描模式下进行更频繁的更新,或者一次连接到多个外围设备的方法。

谢谢

编辑:我也尝试过快速开始/停止扫描,似乎在开始扫描时检测到更多设备并且更新更频繁

最佳答案

我相信你已经知道了,但以防万一有人遇到这个(就像我刚刚做的那样)寻找其他信息,如果你没有使用其他带有 coreLocation 的 iOS 设备,你需要调用 peripheralDidUpdateRSSI:委托(delegate)使用 [self.myPeripheral readRSSI]; .

您可以调用 didUpdateValueForCharacteristic: 要求 RSSI 数据更新。在 updateValue 委托(delegate)中随心所欲。

你在 viewDidLoad 中不需要这个:NSDictionary *options = etc...此 NSDictionary 是在 didDiscoverPeripheral: 中创建的代表。

所以整体流程是:

检查您是否在获得 RSSI 数据的 NSLog 中接收 RSSI...

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI{

NSString *localName = [advertisementData objectForKey:CBAdvertisementDataLocalNameKey];

if ([localName length] > 0){
NSLog(@"Discovered: %@ RSSI: %@", peripheral.name, RSSI);
// your other needs ...
}

调用 peripheralDidUpdateRSSI:在这里,因为如果您将通知值设置为 YES [peripheral setNotifyValue:YES forCharacteristic:characteristic];,则此处将持续更新。
- (void) peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{

//Call the peripheralDidUpdateRSSI delegate ..
[self.myPeripheral readRSSI];

// do all of your other characteristic value updates here
}
readRSSI每次更新先前的特征值时,将调用您在 UILabel(或您正在使用的任何东西)上执行 RSSI 更新的委托(delegate):
- (void)peripheralDidUpdateRSSI:(CBPeripheral *)peripheral error:(NSError *)error;
{
_rssiLabel.text = [self.myPeripheral.RSSI stringValue];
NSLog(@"RSSI Method”);
}

如果您不需要应用程序的特征值,只需在其中运行一个循环,无论您需要刷新 RSSI 值的任何时间。

关于ios - 刷新众多蓝牙外设的RSSI值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17719465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com