繁体   English   中英

OBD2 BLE通信-如何发送AT命令和接收数据

[英]OBD2 BLE Communication - how to send AT commands and receive data

我有一个 OBD2 加密狗,需要通过它获得车辆的速度(使用 BLE 和 iOS 设备)。 加密狗附带的文档没有提到服务和特性,但通过一些调试我发现了一些。 我们称它们为服务 1、2、3。

  1. 服务 1 具有 Read 属性和 WriteWithoutResponse 属性的一个特征
  2. 服务 2 具有 Read 属性和 Notify 属性的一个特征
  3. 服务 3 具有两个特征:具有 Read 属性和 Notify 属性的特征 A 以及具有 Write 属性和 WriteWithoutResponse 属性的特征 B

如何知道我需要哪些特性发送 AT 命令并接收相应的数据,然后如何启动此通信。 我特别需要能够获得速度。 先感谢您。

我尝试了以下但没有任何反应:

func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {

    for characteristic in service.characteristics! {

        if characteristic.properties.contains(.notify) {
            peripheral.setNotifyValue(true, for: characteristic)
        }

        if characteristic.properties.contains(.write) {
            let commandString = "010D\r"
            if let commandData = commandString.data(using: .utf8) {
                peripheral.writeValue(commandData, for: characteristic, type: .withoutResponse)
                peripheral.writeValue(commandData, for: characteristic, type: .withResponse)
            }
        }

    }
}

然后期待一些东西:

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

    if let value = characteristic.value {
        let text = String(data: value, encoding: String.Encoding.utf8)
        self.onNotifyReceived(text)
    }

} 

首先,如果您通过例如 ELM327(最常见的 OBD2 芯片之一)进行交谈,您最好不要从 PID(如010D )开始,而是使用正确的AT命令序列对其进行初始化(参见相应的手册详情)。

接下来, peripheralDidUpdateNotificationState是错误的委托方法。 每当您订阅或取消订阅特性时都会触发此事件,而不是在其值更改时触发。 您想改为实现委托方法peripheralDidUpdateValueForCharacteristic

也就是说,问题在于:OBD2 BLE 适配器不使用任何固定的 GATT 配置文件。 大多数(如果不是全部)BLE OBD2 适配器的工作方式是它们提供具有一两个特征的一项服务:

  • 一个写特性。 这是移动设备可以将其 AT 命令(在例如 ELM327 的情况下)和 PID 写入的地方。
  • 通知特性。 这是返回汽车(ECU)结果的地方。

一旦您可以访问这些特性,您就可以实现 OBD2 串行协议(例如,在将完成的命令传输到应用层之前,使用写入并等待响应的命令队列)。

一些 BLE 适配器将这两者合并为一个特性。 如果您想支持任意适配器,则必须添加一个“选择您的适配器”屏幕,您可以在其中探测找到的适配器,记住特性,然后进行通信。

这样就可以编写适用于各种 BLE OBD2 适配器的应用程序(不仅支持少数供应商),例如 OBD2 Expert(免责声明:我是该软件的作者)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM