OBDKey Bluetooth - PullRequest
       6

OBDKey Bluetooth

1 голос
/ 14 июня 2010

Я хочу подключить свой Motorola Droid к OBDKey по Bluetooth. Я использую BluetoothChat в качестве примера для подключения к Bluetooth, с протоколом KWP

Затем я пишу команду byte []

 command[0]=rawToByte(0x02);
 command[1]=rawToByte(0x85);
 command[2]=rawToByte(0x05);
 command[3]=rawToByte(0xc7);
 command[4]=rawToByte(0x33);
 command[5]=rawToByte(0xf1);
 command[6]=rawToByte(0x00);
 command[7]=rawToByte(0x00);
 command[8]=rawToByte(0x00);
 command[9]=rawToByte(0x00);
 command[10]=rawToByte(0x00);
 command[11]=rawToByte(0x00);
 command[12]=rawToByte(0x00);
 command[13]=rawToByte(0x00);
 command[14]=rawToByte(0x76);

где функция "rawToByte":

public static byte rawToByte(int b) {
    return (byte) (0xff & b);
}

В результате OBDKey отправляет на устройство байт 0x02 Это значение является первой командой, поэтому оно копирует значение. Что я сделал не так?

Ответы [ 2 ]

1 голос
/ 22 марта 2011

OBDKey фактически инкапсулирует кадр KWP2000 для вас (в режиме ASCII по умолчанию).

Все, что вам нужно сделать, это указать устройству OBDKey использовать протокол KWP2000 с ATSP5 \ r, затем после инициализации,отправьте ваш запрос как «mode pid», например, 010C, чтобы получить обороты двигателя.

Глядя на ваши данные, трудно понять, что вы пытаетесь сделать.Вы указали следующие данные: 02,85,05,C7,33,F1,00,00,00,00,00,00,00,00,76

Обычно первый байт - это заголовок плюс длина, затем байт целевого адреса, байт адреса источника, данные, затем контрольная сумма, например, C2,33,F1,01,00,E7.Чтобы отправить этот пример через OBDKey, отправьте ATSP5\r, затем 0100\r, и OBDKey возьмет автомобиль с кадром протокола диагностики автомобиля.

1 голос
/ 14 июня 2010

OBDKey - это Bluetooth-адаптер OBD на базе ELM327.Это похоже на Bluetooth-адаптеры DealExtreme и scantool.net в плане функций и способа использования.Я хорошо знаком с последними двумя.

Вот как отправить строку на устройство, если вы уже открыли сокет и поток, а выходной сокет называется mBTOutputStream

/**
 * Send the exact string provided. 
 * We don't append a CRLF or anything like that - we just send the exact string to the device as-is. 
 * @param sendThis - exact string to send to the device. 
 * @return - returns true unless a problem occurs, in which case we return false;
 */
public boolean sendRaw(String sendThis) {

        // Ya can't send data if we're not connected!
        if (isConnected() != true)
                return false;

        byte bsendThis[] = sendThis.getBytes();

        try {mBTOutputStream.write(bsendThis);} catch (Exception e) {
                ioErrorOccurredDuringOutput();
                return false;
        }

        ioResetOutputErrorCount();
        return true;
}

Также не забудьте также прочитать с устройства, иначе входной буфер заполнится и начнет блокировать ввод / вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...