SDB:基于 ELM327 的 ODB2 扫描工具

跳转到:导航搜索
Icon-cleanup.png
本文需要关注,因为它不符合我们的wiki 指南。请参阅 Help:Style#General_usability
如果您想贡献,请阅读此维基的规则,如果您有任何问题,请随时联系维基团队,我们非常乐意帮助您!:-)


使用这款 ELM327 基于的设备,可以与(通常是 1996 年以后)汽车的车载计算机接口,并检索许多非常有趣的信息,例如速度、发动机特性和 诊断故障代码

根据卖家的列表,一些规格

  • 特性
    • 读取代码显示诊断代码 (DTC)
    • 清除 DTC 并重置 MIL(检查发动机灯)
    • 支持具有新的 CAN-BUS 协议的最新车辆
    • 无需电池,电源由 OBD 端口供电
    • LED 指示电源并显示通信状态
  • OBD-II 协议
    • SAE-J1850 PWM (41.6 kbaud)
    • SAE-J1850 VPW (10.4 kbaud)
    • ISO-9141-2 (5 baud init, 10.4 kbaud)
    • ISO-14230-4 (5 baud init / fast init, 10.4 kbaud)
    • ISO-15765-4 CAN (11bit/29bit ID, 250/500 kbaud)
    • SAE-J1939 CAN (29bit ID, 250kbaud)
  • 兼容以下车辆
    • 欧洲市场 2001 年的汽车
    • 欧洲 2004 年的柴油车
    • 美国市场 1996 年的汽车(国产和进口)
    • 美国(国产和进口)1996 年的轻型卡车

eBay 上查找

OBD-II 资源

开源软件和接口

此页面 上所述

如何在 openSUSE / Linux 上使其工作

不幸的是,软件包 - 以及其中的 CD - 仅包含 Windows 软件和使用信息。好消息是,在 openSUSE 和其他 Linux 发行版上使扫描工具工作非常容易。

通信原理图

                          PC ---> |               | <--ODB II scan tool -------> | <- Car
[Serial console, e.g. minicom]    |               |                              |
   |                              |               |                              |
   |                              |               |                              |
   +--[RS-232]--[rfcomm / Bluez]--|--[Bluetooth]--|--[console]--[ODB interface]--|--[ODB II interface ]--[car's on-board computer]
   |                              |               |                              |
   |                              |               |                              |
[ODB II program]                  |               |                              |

ELM327 芯片本身的更详细的框图显示在 ELM327 数据表第 1 页(参见 参考文献

所需软件

驱动程序

Bluez 软件包提供了您所需的一切来与设备连接。除了 openSUSE 和衍生发行版之外,Bluez 存在于我所知道的所有主流 Linux 发行版中。

OBD-II 程序

虽然扫描工具将使与汽车车载计算机(也称为 ECU 或 发动机控制单元)接口成为可能,但除此之外,还需要一个专门的程序来对其进行询问。

Windows 上似乎有很多选项,但在 Linux 上的选择有限。我尝试了 pyobd,在初始化例程上进行了一些调整后,它能够读取 ECU。

准备工作

蓝牙配对码

此设备的配对码为:1234

可能无法更改此码,因此理论上,任何在范围内的设备都可以连接到扫描工具。除了能够读取一些发动机设置外,线程也相当有限。

蓝牙地址

将设备连接到汽车上的 OBD-II 端口,并使用 hcitool 发现可用的蓝牙设备。扫描工具将显示如下内容

   $ hcitool scan
   Scanning ...
       00:02:03:ac:a1:d3   EDT

显然,地址会不同。

建立连接

要连接到 ELM327 OBD2 扫描仪,我们需要三个参数

  • 设备的蓝牙地址,例如 00:02:03:ac:a1:d3(参见“hcitool scan”的输出)
  • 设备提供串行端口配置的 rfcomm 通道号。ELM327 OBD2 扫描仪在通道 1 上提供串行端口配置。
  • 一个唯一的数字 X 用于我们的设备文件(/dev/rfcommX)。

注意:由于可以在同一计算机上使用其他蓝牙设备,因此为每个蓝牙设备使用唯一的设备名称并使其持久化是一种很好的做法。这样可以避免意外地使用 OBD-II 诊断程序打开 GPS 设备,或者因为昨天该设备上有一个 UMTS 调制解调器而尝试在线。

以下命令建立到蓝牙设备 00:02:03:ac:a1:d3 在通道 1 上的连接,并使其作为 /dev/rfcomm99 可访问

   # rfcomm --auth connect 99 00:02:03:ac:a1:d3 1

如果正在运行 Gnome 会话,则执行此步骤更容易,因为它具有不错的 PIN 输入小程序。

注意

  • 某些设备不需要身份验证。
  • 建立蓝牙连接后,如果未被使用(未作为 RFCOMM 设备连接),某些设备会立即断开连接

使配置持久化

配对码

与扫描工具建立第一次连接后,配对 PIN 将存储在 /var/lib/bluetooth/<local macaddr>/linkkeys 中,因此所有后续连接都将自动进行。

rfcomm 设置

编辑 /etc/bluetooth/rfcomm.conf 以反映这些设置。

   # cat /etc/bluetooth/rfcomm.conf
   rfcomm99 {
       bind yes;
       device 00:02:03:ac:a1:d3;
       channel 1;
       comment "ELM327 based OBD II test tool";
   }

允许非 root 用户使用扫描工具

默认情况下,设备文件 /dev/rfcomm99 的所有权和组设置为 root,并且所有者和组具有读写访问权限。

   # ls -l /dev/rfcomm99
   crw--w---- 1 root root 4, 0 Aug 15 20:30 /dev/rfcomm99

使用此简单的 udev 规则,可以自动执行以下操作,每次创建 /dev/rfcomm99 设备时

  • 将所有权分配给用户“joe”
  • 将组所有权分配给组“dialout”
  • 创建符号链接 /dev/obd-ii-scan-tool/dev/rfcomm99

   # cat /etc/udev/rules.d/99_custom.rules 
   KERNEL=="rfcomm[0-9]*", ATTR{address}=="00:02:03:ac:a1:d3", ATTR{channel}=="1", NAME="%k", OWNER="joe", GROUP="dialout", SYMLINK+="elm327"

使用此命令获取有关扫描工具上可能的 udev 规则标准的更多信息

   # udevadm info -a -p  $(udevadm info -q path -n /dev/rfcomm99)

使用 OBD-II 软件

注意:许多 ELM327 设备是 Elmelectronics 的原始 ELM327 的廉价克隆!
有些与原始设备非常接近,但许多克隆设备并不提供原始设备的全部功能/命令集。命令的实现也经常有缺陷或伪造。
因此,如果在使用设备时遇到任何问题和 OBD-II 软件,则应始终首先检查您的设备。请参阅产品数据表中的“AT 命令说明”部分。(提示:克隆设备几乎不支持“AT PPS”命令)。

控制扫描工具的连接

一个简单的选项是使用此脚本来控制扫描工具的连接。

cat /etc/init.d/elm327
#!/bin/bash
### BEGIN INIT INFO
# Provides: elm327
# Required-Start:
# Required-Stop:
# Should-Start:
# Should-Stop: $null
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: Start elm327
# Description: starts the elm327 bluetooth device
### END INIT INFO

DevNum=99       # DevNum is depending on the rfcom settings /etc/bluetooth/rfcom.cfg
case $1 in
start)
	 rfcomm bind $DevNum
	 ;;
stop)
	 rfcomm release $DevNum
	 ;;
status)
	rfcomm show $DevNum
	;;
*)
	cat<<EOF
Usage:
	$0 [ start | stop | status ]

EOF
esac

启动(和停止)操作需要 root 权限,因此非 root 用户应使用 sudo 运行该脚本。

sudo /etc/init.d/elm327 start

OBD-II 软件配置

这些程序需要一个串行端口,通过该端口可以与 ECU 通信,因此只需将它们指向使用 /dev/rfcomm99/dev/elm327 设备即可。

ODB-II 代码

ECU 发送关于众多监控部件状态的大量代码。其中一些代码是标准化的,另一些代码可能是制造商甚至型号特定的。

参考资料