汽车OBDII WLAN协议

时间:2012-05-08 12:36:33

标签: iphone network-protocols wlan

我目前正在搜索WLAN协议的规范以获取OBDII数据。市场上有一些类似ELM327的适配器,可以让iPhone连接到WLAN的OBDII接口。这是因为蓝牙串口由于附件接口而被扰乱。其他程序如Torque for android也可以使用这种通信协议。但是我没有找到创建网络客户端的规范。

欢迎任何帮助,

由于

3 个答案:

答案 0 :(得分:9)

好的,经过一些研究后,我找到了两个来源:

  1. Michael Gile有一个open source library for iOS devices,用于与OBDII WiFi和蓝牙设备进行通信。
  2. PLX设备(KiWi的创建者)有description如何与KiWi通信。 description太大而无法包含在这里,但归结为:
    • 使用WiFi(插座)连接
    • 等到设备返回>
    • 发出命令并等待响应
  3.   

    请求信息可以通过发送此格式的命令(ASCII字符)来完成:

         

    MM PP\r

         

    其中MM是测试模式,PP是PID,\r是回车符(十六进制:0x0d)。新西兰人忽略了所有空白字符。 *测试模式03和04不需要PID值。

    所说的“测试模式”是SAE J1979标准中定义的十种诊断模式:

    Test mode   Description
    01  Show current data
    02  Show freeze frame data
    03  Show diagnostic trouble codes
    04  Clear trouble codes and stored values
    05  Test results, oxygen sensors
    06  Test results, non-continuously monitored
    07  Show 'pending' trouble codes
    08  Special control mode
    09  Request vehicle information
    0A  Request permanent trouble codes  
    

    PID值是汽车中传感器的代码。 A(非详尽的)list of possible PID values is on Wikipedia

答案 1 :(得分:1)

这里我在C和socket中做的事情:

int sockfd = 0, n = 0;
char recvBuff[1024];
struct sockaddr_in serv_addr; 
char *ip = "192.168.0.10";
char str [128];
int i;

memset(recvBuff, '0',sizeof(recvBuff));
if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
    printf("\n Error : Could not create socket \n");
    return 1;
} 

memset(&serv_addr, '0', sizeof(serv_addr)); 

serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(35000); 

if(inet_pton(AF_INET, ip, &serv_addr.sin_addr)<=0)
{
    printf("\n inet_pton error occured\n");
    return 1;
} 

if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
{
   printf("\n Error : Connect Failed \n");
   return 1;
} 

printf ("reading...\n");
strcpy (str,"AT Z\x0d");
sleep(2);
write (sockfd, str, strlen (str)); 
while ( (n = read(sockfd, recvBuff, sizeof(recvBuff)-1)) > 0)
{
    recvBuff[n] = 0;
    printf ("received: ");
    if(fputs(recvBuff, stdout) == EOF)
    {
        printf("\n Error : Fputs error\n");
    }
    printf ("\r\ntype: ");
    fgets (str, sizeof (str), stdin);
    i = strlen (str);
    if (str [i-1] == 0x0a)
        str [i-1] = 0;
    strcat (str, "\x0d");
    write (sockfd, str, strlen (str)); 
    printf ("\r\n");
} 

输入1或2,你应该看到提示符:ELM327 然后,输入你想要的任何东西,例如:AT RV(将显示电压) 然后将此pdf用于所有代码: https://www.obd-2.de/carcode/dl/ELM327DS.pdf

答案 2 :(得分:0)

看看ELM327 datasheet Wifi加密狗将ELM327 RS232端口透明地绑定到TCP服务器。 确实没有WIFI协议。您可以通过原始TCP连接使用ELM327协议。

您可以使用telnet命令发送AT命令和称为PID的OBD2命令:

telnet 192.168.0.1 35000

成功连接后,您可以尝试发送:

AT Z

,服务器应返回“ ELM327”和版本号。