Связь с ключом Bluetooth OBDII (думаю, это ELM327)

У меня есть ключ Bluetooth OBDII для моей машины (марка Veepeak), и я пытаюсь написать приложение для Windows, которое может с ним общаться. Пока кажется, что я могу подключиться к устройству со своего ноутбука, отправить команды и получить какой-то ответ, но ответы, которые я получаю, не соответствуют моим ожиданиям. Я использую коммуникационную библиотеку 32feet для работы с Bluetooth.

Вот код, который я использую для подключения, а также функции, которые я использую для отправки сообщений:

BluetoothClient client;
Stream stream;
client = new BluetoothClient();
Guid uuid = new Guid("00001101-0000-1000-8000-00805f9b34fb");
client.BeginConnect(SelectedDevice.DeviceAddress, uuid, bluetoothClientConnectCallback, client);

private void bluetoothClientConnectCallback(IAsyncResult result)
{
        client = (BluetoothClient)result.AsyncState;
        client.EndConnect(result);
        clientConnected = true;
        stream = client.GetStream();
        UIWriteLine("Client connected");
}

private string sendMessage(string message)
{
        byte[] encodedMessage = Encoding.ASCII.GetBytes(message);
        stream.Write(encodedMessage, 0, encodedMessage.Length);
        Thread.Sleep(100);
        int count = 0;
        byte[] buffer = new byte[1024];
        string retVal = string.Empty;
        count = stream.Read(buffer, 0, buffer.Length);
        retVal += Encoding.ASCII.GetString(buffer, 0, count);
        return retVal.Replace("\n", "");
}

private string getValue(string pid)
{
        byte[] encodedMessage = Encoding.ASCII.GetBytes(pid + "\r");
        stream.Write(encodedMessage, 0, encodedMessage.Length);
        Thread.Sleep(100);
        bool cont = true;
        int count = 0;
        byte[] buffer = new byte[1024];
        string retVal = string.Empty;
        while (cont)
        {
            count = stream.Read(buffer, 0, buffer.Length);
            retVal += Encoding.ASCII.GetString(buffer, 0, count);
            if (retVal.Contains(">"))
            {
                cont = false;
            }
        }
        return retVal.Replace("\n", "");
}

Я использую метод sendMessage для отправки AT-команд и метод getValue для получения определенного PID (эти методы заимствуют код из библиотеки OBDII, которую я нашел здесь).

Когда я отправляю AT-команды, я получаю только эхо того, что я отправляю, а когда я отправляю PID, я получаю ответ с одним вопросительным знаком, что, насколько я понимаю, означает, что команда недействительна.

Возможно ли, что мой ключ не имеет ELM327? Я делаю что-то не так с Bluetooth-соединением или мой UUID неправильный? Спасибо.


person Connor Szczepaniak    schedule 30.07.2016    source источник
comment
Я бы порекомендовал вам использовать такой инструмент, как realterm (или любой другой терминал COM-порта) на вашем ПК, чтобы сначала убедиться, что устройство работает правильно. И убедитесь, что это ваше устройство. Существуют команды elm327 для запроса описания устройства AT@1.   -  person Jon    schedule 01.08.2016
comment
Спасибо, теперь я использовал com-терминал, чтобы определить, что у меня есть ELM327v1.5, и, похоже, он работает правильно. Могу ли я отправлять сообщения через поток Bluetooth напрямую или мне нужно открыть последовательный порт для связи?   -  person Connor Szczepaniak    schedule 01.08.2016


Ответы (1)


У меня тоже есть Veepeak. Он очень рекомендуется в соответствующих обзорах и очень хорошо работает с доступными пробными приложениями и моим телефоном Android. Однако я борюсь с инициализацией в своем собственном приложении Python.

В приложении на основе Python, которое я разрабатываю на raspi, мне нужно открыть «виртуальный» последовательный порт, который сопоставляется с ранее сопряженным устройством по его MAC-адресу. Сопряжение и запись MAC-адреса выполняется на уровне операционной системы с помощью стандартных инструментов Bluetooth.

person James Stallings    schedule 17.04.2019
comment
Это не дает ответа на вопрос. Когда у вас будет достаточно репутации, вы сможете комментировать любой пост; вместо этого давайте ответы, которые не требуют разъяснений от спрашивающего. - person Johan; 17.04.2019