如何将结构发送到 BLE 写入值?

Posted

技术标签:

【中文标题】如何将结构发送到 BLE 写入值?【英文标题】:How to send struct into the BLE writevalue? 【发布时间】:2018-10-29 21:05:03 【问题描述】:

我尝试使用 swift CoreBluetooth 库将我的结构参数发送到远程设备,但我堆叠到复制结构参数到数组中。实际上在 c# 中的 Windows 应用程序中做了同样的事情,但是 swift 语法和代码风格非常不同,我做不到。

您可以在下面找到我的代码

struct Test_Struct 
    var value1 : UInt32
    var value2 : UInt32
    var value3 : UInt8



    var data : [Test_Struct]=[]

    data.append(Test_Struct(value1: 1000, value2: 2000, value3: 02))

我也尝试过类似下面的方法

    var data = Test_Struct.init(value1: <UInt32>, value2: <UInt32>, value3: <UInt8>)

    data.value1 = 1000
    data.value2 = 1000
    data.value3 = 1000

这两个代码都没有给我任何错误,但是当我尝试将“my var”添加到 peripheral.writeValue(数据,用于:myChractaristic,类型:CBCharacteristicWriteType.withoutResponse) 我得到一个错误。我还尝试将“var data”添加到 Data 或 NSData 但从未对我有用。

总结一下,我需要复制来构造一些像 Byte[] array=data_struct 这样的数组,然后使用 BLE 写入值命令发送数组值。

提前致谢。

【问题讨论】:

【参考方案1】:

您需要将结构转换为数据。您有几个选择:使您的结构可编码并使用 JSONEncoder() 对您的数据进行编码,或者更好地创建您自己的编码方法,以确保您以所需的最小字节数发送数据:

struct TestStruct 
    let value1: UInt32
    let value2: UInt32
    let value3: UInt8


要将您的数字属性转换为数据检查this:

extension Numeric 
    var data: Data 
        var source = self
        return Data(bytes: &source, count: MemoryLayout<Self>.size)
    

extension TestStruct 
    var data: Data 
        return value1.data + value2.data + value3.data
    


要根据数据初始化结构,您可以查看answer 以供参考:

extension TestStruct 
    init(data: Data) 
        value1 = data[0...3].withUnsafeBytes  $0.pointee 
        value2 = data[4...7].withUnsafeBytes  $0.pointee 
        value3 = data[8...8].withUnsafeBytes  $0.pointee 
    


let test = TestStruct(value1: 10, value2: 20, value3: 30)

let data = test.data
print(data)            // "9 bytes\n"
print(data as NSData)  // "<0a000000 14000000 1e>\n"

let objectFromData = TestStruct(data: data)

print(objectFromData.value1) // 10
print(objectFromData.value2) // 20
print(objectFromData.value3) // 30

【讨论】:

以上是关于如何将结构发送到 BLE 写入值?的主要内容,如果未能解决你的问题,请参考以下文章

无法写入 BLE 特性

如何在android中将数据写入BLE设备

我通过蓝牙向 arduino nano ble 33 发送了一个值,并收到了树莓派的值。如何将此值转换为数字?

如何在 android 中将特征写入 BLE GATT 服务器?

求教关于BLE从机向主机发送数据GATT

iOS ble 写入不改变值