Android下发送和接收OBD数据

116 篇文章 0 订阅
28 篇文章 0 订阅

http://marshal.easymorse.com/archives/5025


OBD,On-Board Diagnostics,车载自动诊断系统。你可以把它看做汽车上的电脑。现在的汽车,如果不是出厂年份太早,基本上都带有OBD接口,是国际标准。

连接OBD可以获取到很多汽车状态数据,在驾驶员位置附近,有OBD接口,我的高尔夫6,接口在方向盘左下方位置。可以使用ELM327蓝牙转接口连接OBD接口,这样就可以无线蓝牙连接。我使用的ELM327转接口:

image

Android有连接ELM327的app,比如Torque,有功能简化的免费版本。

如果想编写Android连接ELM327的程序,需要解决以下几个问题:

  • 如何通过蓝牙连接到ELM327设备
  • 发送和接收数据的格式

好在已经有人编写了开源项目,可实现基本的ELM327通讯的app,链接见:

https://code.google.com/p/android-obd-reader/

该作者编写的代码,依赖maven3,比较麻烦。我改写了他的代码:

  • 不在需要依赖maven3,直接可导入到IDE工具生成项目
  • 增加了手工输入命令和显示原始结果的功能

效果见:

image

代码共享在这里:

https://github.com/MarshalW/MyObdDemo

因为是开源项目,对容错和自动化处理不够,要按照一定的次序执行,否则会app崩溃:

  1. 启动android蓝牙
  2. 在android蓝牙设置中对ELM327做蓝牙配对
  3. 在app菜单中,选择Settings,在列表中选择Bluetooth Devices,然后在对话框中选择配对的设备(下面有截图)
  4. 在app菜单中,选择Start Live Data,等2秒钟左右,界面将显示发送命令接收到的内容
  5. 这时候,可以在上面的对话框中输入OBD命令,确切的说,应该叫OBD II PID,可参见:http://en.wikipedia.org/wiki/OBD-II_PIDs#Bitwise_encoded_PIDs

image

该项目主要代码:

  • ObdGatewayService,是一个Android Service,可以跑在系统后台,这个Service用来连接蓝牙,并发送接收数据
  • ObdCommand,是个类族,用于封装命令和返回的结果,我写了个继承ObdCommand的子类,MyObdCommand,用于手工输入的命令和获得原始返回数据
  • MainActivity,我加了个文本框和相关界面组件,用于接收用户输入数据,然后,将数据封装为MyObdCommand,再加入到ObdGatewayService的队列中去执行

如能理解这些,就可以在这个项目代码基础上,编写自己的基于读取ELM327的应用了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
C语言可以通过串口通信来读取OBD(车辆诊断接口)数据。首先,需要在C代码中设置串口参数,包括波特率、数据位、停止位和奇偶校验位等。然后,使用串口读取函数来接收OBD模块发送数据。 在读取OBD数据之前,需要发送特定的AT指令给OBD模块,以请求获取某些特定的数据。比如,可以使用ATZ指令进行OBD模块的复位,使用ATSP0指令设置OBD模块使用SAE J1850 PWM协议等。AT指令的具体使用要根据OBD模块的型号和支持的协议而定。 读取OBD数据的过程中,首先需要使用串口发送指令请求OBD模块发送数据。比如,可以使用010C指令请求发动机转速数据。然后,通过串口读取函数接收OBD模块返回的数据。收到的数据是以十六进制表示的,需要通过相应的算法转换为有用的信息。比如,010C指令返回的数据前两个字节表示发动机转速的值,可以将其转换为十进制表示。 读取OBD数据还可以使用其他的AT指令和OBD指令,来获取车辆的各种信息,比如车速、节气门位置、冷却液温度、故障码等。通过解析这些数据,可以实现车辆的诊断和监测功能。 需要注意的是,OBD模块支持的指令和协议可能有所不同,因此要根据具体的OBD模块文档或手册来编写相应的C代码。同时,在使用OBD模块的过程中,要确保与车辆的OBD接口连接正确,并根据实际需求设置相应的参数和指令。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值