You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用BLEManager从iPhone向BLE设备写入数据?

如何用BLEManager从iPhone向BLE设备写入数据?

看起来你在尝试用BLE相关API从iPhone给BLE设备写数据,不过你贴的代码片段不完整,而且还有几个容易踩的坑,我来帮你理清楚正确的做法:

先明确几个前提

在写入数据之前,你需要确保:

  • 已经成功连接到目标BLE外设(CBPeripheral)
  • 已经发现了外设的目标服务(CBService)
  • 已经找到支持写入的目标特征(CBCharacteristic,它的properties需要包含CBCharacteristicPropertyWrite或CBCharacteristicPropertyWriteWithoutResponse)

你原来代码的问题

你贴的代码是在bleManagerPeripheral:didUpdateValueForCharacteristic:error:回调里——这个回调是用来接收BLE设备发来的数据(也就是读取特征值的回调),不是用来执行写入操作的地方。另外,你把十六进制字符串直接转成UTF8格式的NSData是错误的,这样得到的是字符串本身的ASCII字节,而不是你想要的十六进制对应的字节(比如@"0A0B"转UTF8会得到0x30 0x41 0x30 0x42,而不是你需要的0x0A 0x0B)。

正确的实现步骤

1. 实现十六进制字符串转NSData的方法

首先需要一个工具方法,把十六进制字符串转换成真正的二进制NSData:

+ (NSData *)dataFromHexString:(NSString *)hexString {
    // 先去掉字符串里的空格(如果有的话)
    hexString = [hexString stringByReplacingOccurrencesOfString:@" " withString:@""];
    NSMutableData *mutableData = [NSMutableData data];
    
    for (NSInteger i = 0; i < hexString.length; i += 2) {
        NSString *byteString = [hexString substringWithRange:NSMakeRange(i, 2)];
        unsigned char byte = strtol([byteString UTF8String], NULL, 16);
        [mutableData appendBytes:&byte length:1];
    }
    return mutableData;
}

2. 执行写入操作

当你拿到目标特征targetCharacteristic和连接好的外设peripheral后,就可以执行写入了:

// 你要发送的十六进制指令
NSString *commandHex = @"0A0B";
NSData *writeData = [YourClassName dataFromHexString:commandHex];

// 选择写入类型:
// - CBCharacteristicWriteWithResponse:需要设备返回写入确认,适合重要数据
// - CBCharacteristicWriteWithoutResponse:不需要响应,适合高频小数据
[peripheral writeValue:writeData forCharacteristic:targetCharacteristic type:CBCharacteristicWriteWithResponse];

3. 监听写入结果

实现CBPeripheralDelegate的写入回调,来确认数据是否写入成功:

- (void)peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error {
    if (error) {
        NSLog(@"数据写入失败:%@", error.localizedDescription);
        // 这里可以处理失败逻辑,比如重试
        return;
    }
    NSLog(@"数据写入成功!");
    // 写入成功后的后续操作
}

额外注意事项

  • 写入的数据长度不能超过BLE外设特征的最大传输单元(MTU),如果数据过长,需要做分包处理。
  • 确保你已经设置了CBPeripheral的delegate,这样才能收到回调。

内容的提问来源于stack exchange,提问作者Vikram Thakor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:26:26