Swift 核心蓝牙与OBD2通信
Swift Core Bluetooth communication with OBD2
我正在尝试使用 OBD2 观察我的汽车的速度,以尝试我使用应用程序 "Auto Doctor" 的硬件是否工作并且它工作。
但我需要更多功能,所以我开始创建自己的应用程序
要向特征发送命令,我使用以下代码:
var commandSended = String() {
didSet {
if let peripheral = self.peripheralConnected {
for char in characteristicConnected {
peripheral.writeValue(self.commandSended.data(using: .utf8)!, for: char, type: .withoutResponse)
peripheral.writeValue(self.commandSended.data(using: .ascii)!, for: char, type: .withoutResponse)
peripheral.readValue(for: char)
}
} else {
self.myTerminal.printToTerminalCommand("You are not connected to the peripheral")
}
}
}
characteristicConnected: 是找到的所有特征
独立于我向特征发送的命令,我每次收到相同数量的字节,我无法使用 utf8 或 ascii 对其进行解码。
希望我已经为您提供了足够的信息。
(几乎所有)OBD2 适配器的答案都是 ASCII 字符串响应,因此您需要将 NSData
解码为 ASCII。要为您的响应提取实际负载,您需要了解如何解码各种汽车协议。很多此类信息都可以在网上免费获得,对于某些您可能想要购买官方 SAE 标准的东西。
也就是说,即使您使用的是 Swift,您也可能对使用 OBD2 库感兴趣,它可以为您完成所有繁重的工作。事实上,我写了一个,你可以在 https://github.com/mickeyl/LTSupportAutomotive.
下载
更新:从那时起,我在 Swift 中重写了类似的内容,这对您来说可能更有趣。请看一下https://github.com/Cornucopia-Swift/CornucopiaUDS
我正在尝试使用 OBD2 观察我的汽车的速度,以尝试我使用应用程序 "Auto Doctor" 的硬件是否工作并且它工作。 但我需要更多功能,所以我开始创建自己的应用程序
要向特征发送命令,我使用以下代码:
var commandSended = String() {
didSet {
if let peripheral = self.peripheralConnected {
for char in characteristicConnected {
peripheral.writeValue(self.commandSended.data(using: .utf8)!, for: char, type: .withoutResponse)
peripheral.writeValue(self.commandSended.data(using: .ascii)!, for: char, type: .withoutResponse)
peripheral.readValue(for: char)
}
} else {
self.myTerminal.printToTerminalCommand("You are not connected to the peripheral")
}
}
}
characteristicConnected: 是找到的所有特征
独立于我向特征发送的命令,我每次收到相同数量的字节,我无法使用 utf8 或 ascii 对其进行解码。
希望我已经为您提供了足够的信息。
(几乎所有)OBD2 适配器的答案都是 ASCII 字符串响应,因此您需要将 NSData
解码为 ASCII。要为您的响应提取实际负载,您需要了解如何解码各种汽车协议。很多此类信息都可以在网上免费获得,对于某些您可能想要购买官方 SAE 标准的东西。
也就是说,即使您使用的是 Swift,您也可能对使用 OBD2 库感兴趣,它可以为您完成所有繁重的工作。事实上,我写了一个,你可以在 https://github.com/mickeyl/LTSupportAutomotive.
下载更新:从那时起,我在 Swift 中重写了类似的内容,这对您来说可能更有趣。请看一下https://github.com/Cornucopia-Swift/CornucopiaUDS