Ios 与OBD2的Swift核心蓝牙通信

Ios 与OBD2的Swift核心蓝牙通信,ios,swift,bluetooth-lowenergy,core-bluetooth,obd-ii,Ios,Swift,Bluetooth Lowenergy,Core Bluetooth,Obd Ii,我试着用OBD2来观察我的车的速度,试着看看我使用的应用程序“Auto Doctor”的硬件是否正常工作。 但我需要更多的功能,所以我开始创建自己的应用程序 要向特征发送命令,我使用以下代码: var commandSended = String() { didSet { if let peripheral = self.peripheralConnected { for char in characteristicConn

我试着用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")
            }
        }
    }
特征连接:是否找到所有特征


每次接收到相同数量的字节时,我向特征发送的命令是独立的,我无法使用utf8或ascii对其进行解码

我希望我已经向您提供了足够的信息。

来自(几乎所有)OBD2适配器的答案都是ASCII字符串响应,因此您需要将
NSData
解码为ASCII。要提取响应的实际有效载荷,您需要了解如何解码各种car协议。这些信息中有很多可以在网上免费获得,有些东西你可能想购买SAE官方标准


也就是说,即使您使用的是Swift,您也可能对使用OBD2库感兴趣,该库为您完成所有繁重的工作。事实上,我写了一个,你可以在下载。

“我不能用utf8或ascii解码它。”为什么它应该是utf8或ascii格式的字符串?为什么它不能是一个图像(我想不是),一个自定义结构?阅读特征文件(要么是公开的,要么是定制的)。@Larme我买了这个OBD,如果你让我阅读文档,那意味着每个设备都有自己的编码,对吗?我将与业主联系以接收文件阅读特征/服务UUID。如果它们是“官方的”,您可以在那里检查它们:如果不是,它可以有自己的未记录的规范。然后是逆向工程。