1

Android BluetoothChat の例を使用して、ELM327 OBDII Bluetooth ドングルと通信しようとしています。問題なくデバイスに接続でき、BluetoothChat から ODBII デバイスへのメッセージはデバイスで正しく送受信されているようです。

ただし、OBDII デバイスからの応答メッセージは、多くの場合、複数のメッセージに分割されたり、スクランブルされたり、文字が欠落したりします。

たとえば、ati期待される完全な応答を受け取るには、コマンドを 3 回試行する必要があります。 Me: ati OBDII: a OBDII: 327 OBDII: 327 OBDII: 327 v1.5 > Me: ati OBDII: 1 OBDII: 1 OBDII: 1.5 >v OBDII: 1.5 > Me: ati OBDII: ELM327 v1.5 >

同様に、送信010cは 3 つの 16 進数ペアを含む 1 行の応答をトリガーする必要があります。代わりに、通常は (常にではありませんが) 次のような結果が得られます。 Me: 010c OBDII: OBDII: 4 OBDII: 3C OBDII: 3 OBDII: 3C C OBDII: 3C OBDII: OBDII: OBDII: >

いくつかの異なるボー レートと異なる OBDII プロトコルを試しましたが、デフォルト設定からの変更は問題を悪化させるだけのようです。応答メッセージの処理に問題はありますか? 応答メッセージが分割されるのはなぜですか? Bluetooth ドングルは Torque などの利用可能なアプリで正常に動作するため、デバイスの誤動作はないと思います。

私が使用しているコードは、BluetoothChat プロジェクト (ソースはこちら) とほぼ同じです。Bluetooth デバイスの UUID のみを変更し、発信メッセージにキャリッジ リターンを追加しました (この StackOverflow questionに従って)。

変更 1 (BluetoothChatService.java 内):

    // Unique UUID for this application
private static final UUID MY_UUID_SECURE =
    //UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66");
    UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private static final UUID MY_UUID_INSECURE =
    //UUID.fromString("8ce255c0-200a-11e0-ac64-0800200c9a66");
    UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

変更 2 (BluetoothChat.java 内):

    // The action listener for the EditText widget, to listen for the return key
private TextView.OnEditorActionListener mWriteListener =
    new TextView.OnEditorActionListener() {
    public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
        // If the action is a key-up event on the return key, send the message
        if (actionId == EditorInfo.IME_NULL && event.getAction() == KeyEvent.ACTION_UP) {
            String message = view.getText().toString();
            //sendMessage(message);
            sendMessage(message + "\r");
        }
        if(D) Log.i(TAG, "END onEditorAction");
        return true;
    }
};

参照用のELM327マニュアル

4

1 に答える 1