我目前正在搜索 WLAN 协议的规范以获取 OBDII 数据。市场上有一些 ELM327 类似的适配器,可以让 iPhone 连接到带有 WLAN 的 OBDII 接口。这是因为蓝牙串口因为配件接口被打乱了。Torque for android 等其他程序也可以使用这种通信协议。但是我没有找到创建网络客户端的规范。
欢迎任何帮助,
谢谢
我目前正在搜索 WLAN 协议的规范以获取 OBDII 数据。市场上有一些 ELM327 类似的适配器,可以让 iPhone 连接到带有 WLAN 的 OBDII 接口。这是因为蓝牙串口因为配件接口被打乱了。Torque for android 等其他程序也可以使用这种通信协议。但是我没有找到创建网络客户端的规范。
欢迎任何帮助,
谢谢
好的,经过更多研究,我找到了两个来源:
>
可以通过发送以下格式(ASCII 字符)的命令来请求信息:
MM PP\r
其中
MM
是测试模式,PP
是 PID,\r
是回车(十六进制:)0x0d
。Kiwi 会忽略所有空白字符。*测试模式 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 值是车内传感器的代码。可能的 PID 值的(非详尽的)列表在 Wikipedia 上。
查看ELM327 数据表 Wifi 加密狗将 ELM327 RS232 端口透明地绑定到 TCP 服务器。没有真正的WIFI协议。您可以改为通过原始 TCP 连接使用 ELM327 协议。
您可以使用 telnet 命令发送 AT 命令和称为 PID 的 OBD2 命令:
telnet 192.168.0.1 35000
成功连接后,您可以尝试发送:
AT Z
服务器应以“ELM327”和版本号进行响应。
这是我在 C 和套接字中所做的:
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