我怎样才能读/写数据到OBD

我目前正在开发Windows Phone 8应用程序,希望能够通过蓝牙使用蓝牙OBD-II适配器连接车辆。 我对WP8的编程相当新,虽然我试图不尝试寻求帮助,但我已经打到了一个我无法想象或不知道要去哪里或做什么的地方。

此外,如果有人想知道我正在测试的设备以连接到汽车,那么这里就是这个人

编辑::到目前为止,我已经设置我的代码来检测,如果蓝牙适配器已启用,我目前正在寻找(或试图了解)如何显示给用户的配对设备,以便他们可以选择一个。 但我目前的主要障碍是,我如何从OBD-II适配器读取(或拉出)数据? 它在软件文档中说:

为了表示Kiwi Wifi或Kiwi蓝牙已准备好处理命令,设备将输出一个大于号(>)。

所以如果我正确地理解了这个,我需要检查>,对吧? 但是如何? 我检查了大量的资源,但没有真正解释如何。 我遇到了像IBuffer这样的东西,但我根本不了解这一点。

如果我所说的没有意义,那么简单地说。

  • 从OBD增加器读取数据
  • 将数据写入OBD适配器(软件文档说我需要发送ASCII码,我有这些)
  • 如果我能够理解如何读写它,那么我认为我应该能够将数据操纵回给用户; 我希望。

    编辑2 ::

    private async void checkBluetooth()
        {
            SolidColorBrush statuscolor = new SolidColorBrush();
            try
            {
                PeerFinder.AlternateIdentities["Bluetooth:Paired"] = "";
                var devices = await PeerFinder.FindAllPeersAsync(); 
                bluetoothStatus.Text = "Online"; 
                statuscolor.Color = Colors.Green; 
                bluetoothStatus.Foreground = statuscolor; 
    
                if (devices.Count == 0)
                {
                    MessageBox.Show("No paired bluetooth devices have been found, please pair your OBD adapter first!");
                    await Windows.System.Launcher.LaunchUriAsync(new Uri("ms-settings-bluetooth:"));
                }
    
                PeerInformation peerInfo = devices.FirstOrDefault(c => c.DisplayName.Contains("PLX"));
                if (peerInfo == null)
                {
                    MessageBox.Show("No paired PLX adapter found, please pair the PLX OBD adapter!");
                    await Windows.System.Launcher.LaunchUriAsync(new Uri("ms-settings-bluetooth:"));
                }
    
                StreamSocket socket = new StreamSocket();
                await socket.ConnectAsync(peerInfo.HostName, "1");
    
                await socket.ConnectAsync(peerInfo.HostName, peerInfo.ServiceName);
            }
            catch (Exception ex) 
            {
                if ((uint)ex.HResult == 0x8007048F) 
                {
                    bluetoothStatus.Text = "Offline"; 
                    statuscolor.Color = Colors.Red; 
                    bluetoothStatus.Foreground = statuscolor; 
                }
            }
        }
    

    我只是解释如何通过向OBD-II设备发送数据来检索数据,因为在我的理解中,这是您正在努力解决的问题。

    OBD-II绝不会自行发送数据,它会监听您发送的命令,并根据该命令发送答案。 所以基本上你必须做两件事情,如果你有一个正在运行的连接:

  • 将正确的命令发送到OBD-II设备。
  • 将答案解析为人类可读的数据。
  • ELM327蓝牙连接器可将ASCII命令转换为电压。 所以你所要做的就是发送一些ASCII命令,并返回ASCII值。

    OBD协议知道几种模式和参数,但我会解释获得实时数据。 这是模式1。

    模式1发送
    模式1是'01'。 在那之后,你必须发送一个参数ID。 0C代表RPM,0D代表速度。 在每个命令之后,您必须发送回车。 (CR =' r')所以连接器知道请求何时完成。

    所以基本上,为了速度,你必须发送:

    '010Dr'
    

    接收模式1
    从模式1查询中返回的答案以'41'开头。 之后返回参数ID,然后返回值。 该值大部分时间以十六进制表示。 你将不得不做一些转换来读取人类可读的值。 有关更多信息,请参阅链接,因为也提供了要转换的公式。

    例:

    '410D17'
    

    所以17是你十六进制当前速度的值。 17到十进制是23,所以你以23公里/小时的速度行驶。

    这个维基百科页面有一些关于它的好信息:
    OBD-II参数

    对于蓝牙部分:

    步骤1:通过RFCOMM连接到所需的设备

    PeerFinder.AlternateIdentities["Bluetooth:PAIRED"] = ""; 
    var available_devices = await PeerFinder.FindAllPeersAsync(); 
    if (available_devices.Count == 0) 
    { 
           return false;             
    } 
    else
    {             
           PeerInformation pi= // Get the required device using 
                              // index or searching for the device name
    }
    StreamSocket socket = new StreamSocket(); 
    await socket.ConnectAsync(pi.HostName, "1");
    

    第2步:直接winsock执行SPP查找

    await socket.ConnectAsync(pi.HostName, pi.ServiceName);
    

    来源:Windows Phone 8蓝牙SSP

    我希望这能帮助你,我对此感到兴奋。 ^^如果您需要帮助,请告诉我。

    链接地址: http://www.djcxy.com/p/95117.html

    上一篇: How can I read/write data to and from an OBD

    下一篇: How can I make continuous communication with OBD II ELM327 adapter?