Android下发送和接收OBD数据

非常感谢您阅读我的博文!

阅读前请查看:

博主我最近收到不少盆友,询问我提供OBD技术支持,跟询问我要技术文档和案例不在少数。有需要的童鞋请在微信中私聊我。博主现在已经很少在CSDN上更新博客。请勿在博客中回复我,因为我有可能没看到回复或者很久才会看到。需要帮助请添加微信,在微信中留言谢谢支持!当然,如果你觉得文章对你有帮助可以给博主打赏谢谢!

在阅读本文前,博主帮大家科普一下OBD2 的相关情况;

目前,只要你的汽车出厂年份不是太早,一般都会配有国际标准的OBD2接口。OBD2接口一般位于驾驶座位左中。我们都知道车和人并不一样,人会生病,生病的时候你会知道哪里不舒服,你会把这些症状告诉医生。而OBD2正是替你实现与汽车沟通的接口。当然OBD2只是车辆提供的接口,你可以在京东、淘宝或者线下自行购买ELM327蓝牙设备。手机下载OBD2匹配的APP,就能获取汽车大部分的信息。市面上使用的最长常见的蓝牙设备ELM327 OBD2,配合Torque车况大师一起使用,支持IOS,ANDROID;ELM327 最新硬件版本 v1.5, 默认蓝牙配对密码是 :1234。红灯-电源灯,蓝灯-蓝牙灯,黄灯-ECU连接灯;操作电压12v。当然,你不一定需要使用ELM327,只要你或者你们公司有这个能力,自主研发;那么问题来了,为什么市面上已经有和OBD2相关的手机APP和硬件存在,我们还在这里教大家编写自己的APP客户端呢!国内做市场上OBD方面类的APP并不多,所以说这算是一块不小的蛋糕。我们发现通过OBD这个入口,可以衍生很多服务,包括车辆实时状态监测、车辆实时体检、驾驶行为分析、安防定位、后市场服务(车险、汽修、配件、保养维护等)等。很庆幸我们公司一直致力于后汽车时代服务研发,其中一项就是和OBD2有关;

Android下发送和接收OBD数据_第1张图片

如需帮助,可以添加微信私聊我!


1. 需求描述(请描述清楚具体需求,否则博主有权给予回复)

2. 预期开发周期

3. 报价

 

对于符合要求的顾客,我们公司将给与相关的开发周期和报价;

from:

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

 

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

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

 

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

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

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

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

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

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

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

效果见:

代码共享在这里:

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

该项目主要代码:

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

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

 

 

你可能感兴趣的:(OBD)