从“Accu-Chek Aviva Connect”BG 仪表收集数据的 iOS 应用程序。 (蓝牙低功耗)
Posted
技术标签:
【中文标题】从“Accu-Chek Aviva Connect”BG 仪表收集数据的 iOS 应用程序。 (蓝牙低功耗)【英文标题】:iOS app that collects data from "Accu-Chek Aviva Connect" BG meter. (Bluetooth Low Energy) 【发布时间】:2016-10-23 22:15:40 【问题描述】:我正在尝试创建一个从 Accu-Chek Aviva Connect 收集数据的 ios 应用。
为了与 BG 仪表配对,我向 Record Access Control Point Characteristic 发送写入请求:
- (void)peripheral:(CBPeripheral *)aPeripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
if ([service.UUID isEqual:[CBUUID UUIDWithString:@"1808"]])
for (CBCharacteristic *aChar in service.characteristics)
// Read Glucose Measurement...
// Read Glucose Measurement Context...
// Read Glucose Feature...
// Read Date Time...
// Read Record Access Control Point
if ([aChar.UUID isEqual:[CBUUID UUIDWithString:@"2A52"]])
[aPeripheral readValueForCharacteristic:aChar];
[aPeripheral setNotifyValue:YES forCharacteristic:aChar];
uint8_t bytes[] = 0x04, 0x01, 0x00;
NSData *data = [NSData dataWithBytes:(void*)&bytes length:sizeof(bytes)];
[aPeripheral writeValue:data forCharacteristic:aChar type:CBCharacteristicWriteWithResponse];
在 iPhone 上,我看到一个 UIAlert,其中包含一个输入安全码的字段。我还能将 iPhone 与 Accu-Chek Aviva Connect 配对。但是下次我向 Record Access Control Poin 特征(设备断开连接后)发送一些写入请求时,我得到 “错误:身份验证不足” 并且 iPhone 上没有 UIAlert。
我觉得我做错了一切。
我想从蓝牙设备的日志中读取记录。 AFAIU 我将字节写入读取记录访问控制点 ([aPeripheral writeValue:data forCharacteristic:aChar type:CBCharacteristicWriteWithResponse];
) 并在 peripheral:didWriteValueForCharacteristic:error:
中得到答案。但我做不到,因为“错误:身份验证不足”挡住了我的路!
【问题讨论】:
您应该发布抛出“身份验证不足”的代码。我很好奇它是来自iOS还是设备本身?此外,Aviva Connect API 是在哪里描述或找到的?谷歌并不容易...... Accu-Chek 没有官方文档。但它使用官方蓝牙葡萄糖服务:bluetooth.com/specifications/gatt/… 如果您已配对设备并输入了 PIN,则该设备应显示在“设置”->“蓝牙.我的设备”中的蓝牙设备列表中。是吗? 【参考方案1】:您需要通过身份验证才能向 BG 仪表发出写入请求。身份验证不足意味着您尝试在未经身份验证的情况下发出请求。您不能只是连接然后写入与医学相关的特征。
检查您是否真的发出了身份验证请求(这也需要输入 PIN 码)。如果是,请检查 PIN 是被接受还是被拒绝。
【讨论】:
【参考方案2】:使用 Accu-Chek Aviva Connect 的方法是通过转到 Settings
→ Wireless
→ Pairing
→ Pair Device
进行首次配对。
然后你会看到一个带有数字代码的屏幕和一条消息:“在设备上输入代码”。
在 iPhone 上,您发现 Accu-Chek 设备并将值写入读取记录访问控制点特征。例如请求一条记录数:
- (void)peripheral:(CBPeripheral *)aPeripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
if ([service.UUID isEqual:[CBUUID UUIDWithString:@"1808"]])
for (CBCharacteristic *aChar in service.characteristics)
// Read Record Access Control Point
if ([aChar.UUID isEqual:[CBUUID UUIDWithString:@"2A52"]])
[aPeripheral readValueForCharacteristic:aChar];
[aPeripheral setNotifyValue:YES forCharacteristic:aChar];
self.readAccessControlPointCharacteristic = aChar;
NSMutableData *mutableData = [NSMutableData data];
uint8_t opCode = 0x04; // Report number of stored records
uint8_t operator = 0x01; // All records
[mutableData appendData:[NSData dataWithBytes:(void*)&opCode length:sizeof(opCode)]];
[mutableData appendData:[NSData dataWithBytes:(void*)&operator length:sizeof(operator)]];
[aPeripheral writeValue:mutableData forCharacteristic:self.readAccessControlPointCharacteristic type:CBCharacteristicWriteWithResponse];
这会导致 iPhone 上的 UIAlertView 要求您输入代码,该代码显示在 Accu-Chek 屏幕上。当您这样做时,您的 iPhone 将与 Accu-Chek Aviva Connect 成功配对。
现在。当您想从蓝牙设备读取所有记录时 - 您必须转到 My Data
→ Data Transfer
→ Wireless
→ 如果您的 Accu-Chek 设备有很多配对,请选择您的 iPhone 名称。 注意: iPhone 必须正在扫描 BT 设备并自动连接到发现的设备。
蓝牙连接将建立,您可以从 iPhone 向蓝牙设备发送任何请求,而不会出现“错误:身份验证不足”!
【讨论】:
以上是关于从“Accu-Chek Aviva Connect”BG 仪表收集数据的 iOS 应用程序。 (蓝牙低功耗)的主要内容,如果未能解决你的问题,请参考以下文章