使用python-obd连接和查询汽车的问题

aex*_*ito 5 python obd-ii

我正在尝试使用 USB OBD-II 设备将我的 linux 与汽车连接,它连接到 OBD-II 设备但不连接到汽车。软件 OBD Auto Doctor https://www.obdautodoctor.com/连接得很好,看看调试模式下的 python-obd 在尝试连接和执行查询 (RPM) 时说的是什么:

```
>>> connection = obd.OBD()
[obd.obd] ======================= python-OBD (v0.7.1) =======================
[obd.obd] Using scan_serial to select port
[obd.obd] Available ports: ['/dev/ttyUSB0']
[obd.obd] Attempting to use port: /dev/ttyUSB0
[obd.elm327] Initializing ELM327: PORT=/dev/ttyUSB0 BAUD=auto PROTOCOL=auto
[obd.elm327] Response from baud 38400: '?\r\r>'
[obd.elm327] Choosing baud 38400
[obd.elm327] write: 'ATZ\r'
[obd.elm327] wait: 1 seconds
[obd.elm327] read: b'\r\rELM327 v1.5\r\r>'
[obd.elm327] write: 'ATE0\r'
[obd.elm327] read: b'ATE0\rOK'
[obd.elm327] write: 'ATH1\r'
[obd.elm327] read: b'OK'
[obd.elm327] write: 'ATL0\r'
[obd.elm327] read: b'OK'
[obd.elm327] write: 'AT RV\r'
[obd.elm327] read: b'13.9V\r\r>'
[obd.elm327] write: 'ATSP0\r'
[obd.elm327] read: b'OK'
[obd.elm327] write: '0100\r'
[obd.elm327] read: b'\r\r>'
[obd.elm327] write: 'ATDPN\r'
[obd.elm327] Failed to read port
[obd.elm327] read: b''
[obd.elm327] Failed to retrieve current protocol
[obd.elm327] Adapter connected, but the ignition is off
[obd.obd] Cannot load commands: No connection to car
[obd.obd] ===================================================================
>>> connection.status()
'OBD Connected'
>>> response = connection.query(obd.commands.RPM, force=True)
[obd.obd] Sending command: 010C: Engine RPM
[obd.elm327] write: '010C\r'
[obd.elm327] read: b'010C\r41 0C 0D 4D \r\r>'
[obd.OBDCommand] 010C: Engine RPM did not receive any acceptable messages
>>>
```
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。提前致谢

小智 1

当我尝试连接到 OBD 适配器时,我遇到了完全相同的问题。我知道这听起来很愚蠢,但是你的点火开关打开了吗?因为这是我的错误的部分原因。我使用 Raspberry Pi 4 连接 OBD 适配器。当我打开点火开关时,我注意到我的树莓派有时会连接,有时却无法连接。为了解决这个问题,我做了一个 while 循环,不断尝试启动连接,直到它开始获取命令。

这是我的代码

while len(connection.supported_commands) < 100:
    connection = obd.Async("/dev/rfcomm99", protocol = "6", baudrate = "9600", fast = False, timeout = 30)
Run Code Online (Sandbox Code Playgroud)