与蓝牙OBDII加密狗通信(我认为它是ELM327)

时间:2016-07-30 00:19:47

标签: c# obd-ii 32feet elm327

我的车上有蓝牙OBDII加密狗(品牌是Veepeak),我正在尝试编写可以与之通信的Windows应用程序。到目前为止,似乎我能够从笔记本电脑连接到设备,发送命令,并收到某种响应,但我收到的回复并不是我所期望的。我正在使用32feet通信库来处理蓝牙的东西。

以下是我用来连接的代码以及我用来发送消息的函数:

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(这些方法是从我找到的here的OBDII库中借用代码。)

当我发送AT命令时,我似乎只得到我发送的任何信号的回声,当我发送PID时,我得到一个问号的响应,据我的理解意味着该命令无效。

我的加密狗可能没有ELM327吗?我的蓝牙通信出错了还是我的UUID错了?感谢。

1 个答案:

答案 0 :(得分:0)

我也有一个Veepeak。在相关评论中强烈推荐它来使用,并且可以与可用的试用应用程序和我的android手机一起很好地工作。但是,我在自己的python应用程序中努力进行初始化。

在我在raspi上开发的基于python的应用程序上,我必须打开一个“虚拟”串行端口,该端口通过其mac地址映射到先前配对的设备。 mac地址的配对和注释是在操作系统级别使用通用蓝牙工具完成的。