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有關;

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


1. 需求描述(請描述清楚具體需求,否則博主有權給予回覆)

2. 預期開發週期

3. 報價

 

對於符合要求的顧客,我們公司將給與相關的開發週期和報價;

from:

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的應用了。

 

 

發佈了88 篇原創文章 · 獲贊 87 · 訪問量 93萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章