如何在 Swift iOS App 中从 Arduino 读取 0-1023 传感器值

How to read 0-1023 sensor value from Arduino in Swift iOS App

我有一个 Arduino BLE 设备发送传感器模拟读取 0-1023 的 int 值。我可以使用 LightBlue 应用程序读取值并使用小端读取特征。在我的 iOS Swift 应用程序中,我可以连接到外围设备并读取我的自定义 UUID 特征并报告它实际上正在接收数据,但我不知道如何打印它调试 window 中的数据。它只说“收到的价值”。最终我想在应用程序 UI 的 UI 文本字段中显示该数据。这是 'didUpdateValueFor' 代码:

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
    

  var characteristicFUELValue = NSString()

  guard rxFuelCharacteristic == characteristic,

        let rxFuelCharacteristic = characteristic.value,
        let dataString = NSString(data: rxFuelCharacteristic, encoding: String.Encoding.utf8.rawValue) else { return }

    characteristicFUELValue = dataString


  print("Value Recieved: \((characteristicFUELValue as String))")

  NotificationCenter.default.post(name:NSNotification.Name(rawValue: "Notify"), object: "\((characteristicFUELValue as String))")
}

这是调试 window 读数:

已开机。 函数:centralManager(:didDiscover:advertisementData:rssi:),行:160 发现外围设备: 函数:centralManager(:didDiscover:advertisementData:rssi:),行:160 发现重复。 发现外围设备: 找到 1 个特征。 我的特征:D1DF5080-8938-11EC-A8A3-0242AC120002


函数:外设(_:didUpdateNotificationStateFor:error:),行:297 订阅的特征值 已订阅。通知已开始:D1DF5080-8938-11EC-A8A3-0242AC120002 收到的价值:收到的价值:收到的价值:收到的价值:收到的价值:收到的价值:收到的价值:收到的价值:收到的价值:收到的价值:收到的价值:收到的价值:

如有任何帮助,我们将不胜感激。谢谢

您提到您想要将值 读取为 Int,但在代码中您试图将值 读取为字符串

如果您确定您的数据至少有 2 个字节,请将其读取为 UInt16:

let fuelValue: UInt16 = rxFuelCharacteristic.withUnsafeBytes { [=12=].load(as: UInt16.self) }

如果您不确定数据大小,我建议使用 readFuelValue() 功能实现数据扩展,这里是 playground:

import Foundation

extension Data {
    func readFuelValue() -> UInt? {
        if count >= 2 {
            return UInt(withUnsafeBytes { [=10=].load(as: UInt16.self) })
        } else if count == 1 {
            return UInt(withUnsafeBytes { [=10=].load(as: UInt8.self) })
        } else {
            return nil
        }
    }
}

func demo(_ bytes: [UInt8]) {
    let data = Data(bytes)
    let fuelValue = data.readFuelValue()
    print("\(bytes) => \(fuelValue)")
}

demo([])
demo([0])
demo([5])
demo([0x00, 0x00])
demo([0x09, 0x00])
demo([0xFF, 0x00])
demo([0x00, 0x01])
demo([0x00, 0x02])
demo([0x01, 0x02])
demo([0x01, 0x02, 150])

输出为:

[] => nil
[0] => Optional(0)
[5] => Optional(5)
[0, 0] => Optional(0)
[9, 0] => Optional(9)
[255, 0] => Optional(255)
[0, 1] => Optional(256)
[0, 2] => Optional(512)
[1, 2] => Optional(513)
[1, 2, 150] => Optional(513)