【问题标题】:iOS BLE UART Data Transmission ProblemsiOS BLE UART 数据传输问题
【发布时间】:2015-12-17 22:22:59
【问题描述】:

我正在使用 Adafruit BLE UART 板将数据传输到 iOS 应用程序进行处理。在 iOS 端,数据由一个名为 UARTPeripheral 的类处理。 (我发送的链接是某个人的 GitHub 项目中的文件的链接——我找不到真实的链接——但文件是一样的。Arduino 方面正在使用 Adafruit library 处理数据。每边都需要仔细检查(至少我认为)是 Arduino 端的 print() 函数和 iOS 端的 - (void)didReceiveData:(NSData*)newData 方法。

这是我尝试发送数据(从 Arduino 端)时出现的实际问题:每个数据值之间都是 3。就这么简单。假设我使用ble.print(B00000010)从板上发送二进制2,在iOS端我收到32。假设我使用以下代码从 Arduino 端发送一个整数:

int test = 4132;
ble.print(test);

我最终会在 iOS 端获得34313332。我没有要求任何人仔细检查这些库,但最好能说明为什么会发生这样的事情。我知道我可以只使用“贴膏药”的方法,然后摆脱 3s,但我想找到这个问题的根源。

【问题讨论】:

  • 如果您打印 Int 4132,您实际上是在发送字符串“4132” - 因此您显示的字节对应于字符 4 1 3 2 的 ASCII 值
  • 感谢 Paul,我会先尝试将其转换为 NSString。我应该看到的!
  • 您可能正在接收一个 NSData 实例,因此简单的强制转换不起作用,但有一些 String 的初始化器采用 NSData
  • 是的 - 它是 NSData,但使用 UTF-8 编码将其转换为 NSString 效果很好。谢谢!

标签: ios objective-c bluetooth arduino bluetooth-lowenergy


【解决方案1】:

我已经解决了这个问题 - print() 函数将所有值转换为它们的 ASCII 数字,因此所有数字都以 3s 开头是有意义的,因为 ASCII 数字在 30s 范围内。我需要做的就是用NSUTF8StringEncodingNSData 转换为NSString

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 2016-04-26
    相关资源
    最近更新 更多