2017-06-23 8 views
0

私はOBD2デバイスを使ってさまざまな車からデータを取得しています。アプリとOBD2間の通信はBluetooth LEを使用して行われます。 OBD2デバイスを使用すると、サービスUUID = FFE0と特性UUID = FFE1が得られます。私はPIDを書くためにこの特性を使用することができ、私は何の問題もなく車からデータを取得しています。 しかし、私は別のOBD2を使用すると、サービスUUID = FFF0とUUID FFE1(プロパティ.write)とFFE2(プロパティ.read)の2つの特性が得られます。特性を書く特性を持つPIDに書き込みしようとすると、エラーが発生します。OBD 2のデータ読み込みに問題があります

エラードメイン= CBATTErrorDomainコード= 10「属性が見つかりませんでした」

何が問題になりますか?

答えて

0

あなたがすでに「別のOBD2 [デバイス]を使用している」と書いたように...異なるデバイスは、BLEプロトコルの異なる実装です。

したがって、使用するODB2デバイスによって異なります。市場には幅広い品質があります。いくつかは値を読み取るだけのものもあれば、それを書き込むものもあります。いくつかは、ベース市場のために認定されています。それをさらに悪化させるために、ODB2プロトコル標準の実装も(自動車メーカーや時には車種によって)異なる。標準で定義された基本値のみがほとんど同一です。自動車メーカーは車のメンテナンスだけを実施していますが、あなたのような他のユースケースは考慮していません。

メモ:Teslaのような新しい電気自動車には、もはやODB2ポートがありません。

私はODB2とODB2デバイスの専門家ではありませんが、ODB2 BLEデバイスをいくつか調査した2人の同僚と、ビジネス用のケースで異なる車を検討しています。 ODB2デバイスを避け、Pandoraボックスを開くように、範囲を変更しました。


いくつかのコードを入力してください。たぶんあなたはdiscoverCharacteristicsでCPPeripheralの特性を正しく要求していないでしょう。

1

BLE自体は標準化されていますが、BLEではOBD2サービスの公式な標準はありません。複数のアダプタで作業するには、アプリケーションに適切なデバイススキャンを組み込む必要があります。

これを機能させるには、デバイスをプローブし、見つかったものすべてに接続し、サービススキャンを開始し、すべてのサービスとその特性を繰り返します。

書き込み可能な特性が見つかった場合、書き込み可能なチャネルになります。読み込み可能な特性を見つけたら、これは読み込み元のチャンネルになります。これは必ずしも2つの特性につながるわけではなく、一部のアダプターは読み取りと書き込みの両方に同じものを使用します。

期待通りの最初のサービスを使用し、ATZ\r\n(またはトランスポートレベルでサポートしているもの)を送信して、これが有効なOBD2アダプタ応答であるかどうかを確認してください。

このように、サービスUUIDを知る必要はなく、ほとんどのBLEアダプタでアプリケーションを動作させることができます。

(もちろん、次回はサービスUUIDを覚えているので、ユーザがあなたに指示しない限り再度検証する必要はありません)

関連する問題