如何将结构发送到 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 写入值?的主要内容,如果未能解决你的问题,请参考以下文章
我通过蓝牙向 arduino nano ble 33 发送了一个值,并收到了树莓派的值。如何将此值转换为数字?