玩轉車聯網3---通信方式和通信協議

閱讀下文前,建議對OBD有初步瞭解,可閱讀下面兩篇:html

玩轉車聯網1---初識OBD和行車助手

玩轉車聯網2--汽車內部通信和車聯網總體架構

上一篇博文提到了汽車內部的通信方式,可是咱們的程序是如何與OBD之間進行通信的呢?網絡

這裏就涉及到兩個問題:通信方式和通信協議。先上一張OBD安裝在蒙迪歐致勝上的效果圖:架構

1. 通信方式

對於大多數的OBD硬件來講,多采用藍牙、WIFI、串口等幾種方式。eclipse

下面看看幾種模式在實際使用場景中,對於普通消費者的優缺點:post

  優勢 缺點
藍牙 可與智能手機鏈接,不佔用智能手機網絡信道 由於大部分用戶的藍牙功能是關閉的,用戶可能會上車後可能忘記打開藍牙
WIFI 可與智能手機鏈接,用戶通常狀況下會打開手機WIFI功能 因爲智能手機鏈接OBD後,至關於構成個車內局域網,所以佔用手機網絡信道,不能上外網
串口 很是穩定, 適合做爲檢測設備 不可與智能手機鏈接

  

  根據利弊分析,做爲消費級的產品,採用串口做爲通信方式確定是不行的。藍牙和WIFI相比較,藍牙模塊的成本更低,更加穩定,所以優先選擇藍牙模塊。我相信這也是爲何大多數的可穿戴設備選擇藍牙的緣由。固然,在軟件設計上,能夠將藍牙和WIFI虛擬成一個ICommunication接口,方便程序的擴展。本文不做重點講述,之後會在Android藍牙自動重連章節着重展開。測試

2. 市面上的OBD

  上文中對於OBD的通信方式有了簡要介紹,再進行通信協議以前,咱們先說說市面上的OBD吧。url

  

      市面上有衆多OBD產品,最經常使用的是Elm327(便宜,淘寶上40幾塊,藍牙的),固然還有EST527, XTool,國外還有好多,從幾十到上千不等。爲何會有價格差異?spa

1.產品質量,所謂一分價錢一分貨設計

2.軟件支持,其餘廠商的能夠配合他們本身的硬件實現特有的軟件服務,例如將OBD同保險和汽車維修服務掛鉤。htm

3.硬件支持,其餘廠商會增長GPS/GPRS/3G等模塊,不須要智能手機,能夠經過OBD硬件直接將數據傳到後臺。

      可是我想作的是一個相對通用的開發者平臺,儘可能支持市面上的OBD硬件。一個廠商或者一個開發者的能力是有限的,下降開發門檻,提供最基礎的SDK服務,發揮廣大人民的想象力,開發出更多更實用的應用。

      那麼是否有這種可能性呢?答案是可能的。由於大部分的硬件廠商都是在Elm327上進行擴展,咱們只要把Elm327吃透,支持一種新的設備也是很迅速的事情。

 

3. 通信協議

迴歸正題,那麼OBD的通信協議時怎樣的呢,這裏只作簡單介紹。

3.1 OBD能提供的服務

OBD主要有下面九種服務,每一種服務均可以延伸不少東西,咱們先着重關注服務1(Mode1)。

Mode 1: 請求動力系當前數據(發動機轉速、速度、水溫、油耗等數據)
Mode 2: 請求凍結禎數據
Mode 3: 請求排放相關的動力系診斷故障碼
Mode 4: 清除/復位排放相關的診斷信息
Mode 5: 請求氧傳感器監測測試結果
Mode 6: 請求非連續監測系統OBD測試結果
Mode 7: 請求連續監測系統OBD測試結果
Mode 8: 請求控制車載系統,測試或者部件(中國市場開發的OBD系統不支持該模式)
Mode 9: 讀車輛和標定識別號

即便Mode1下真正能讀取的數據遠遠不止下面這些,暫且說幾個最經常使用的吧。

      油耗系:讀取動力系數據(瞬時油耗、當前油量)

      引擎類(速度、發動機轉速)

      溫度系(水溫等數據)

      故障碼類(故障碼個數,故障碼詳細,清除故障碼等)。

 

3.2. OBD數據協議格式

   這裏是基礎的基礎,咱們以CAN總線的OBD數據格式爲例,其中ELM327也是採用這種數據格式。

       ID表示CAN總線的ID;

       PCI表示協議控制的信息數;

       7 data bytes很是關鍵,表示Mode+PID,例如,若是是車速,那麼這裏就應該是01(Mode1) + 0D(車速)

       Checksum:校驗碼

 

3.3. 最簡單的OBD消息交互---獲取水溫

       以獲取水溫爲例:

       發送:>01 05 (Mode1:01 動力系, PID:05 水溫)

       返回:41 05 7B  

       下面是返回的解釋:

       41=40+01,具體40是什麼有點忘了,表示是從01 <Mode1返回的,05表示是PID05

       7B轉換成10進製爲7*16 + 11 = 123 (華氏溫度),

       即123-40 = 83攝氏度

 

哎哎,終於寫完了,比較討厭寫這種純技術類的文章,好累。

最後發一張正在開發的Android車機界面原型圖,鼓勵本身.

 

 

相關文章
相關標籤/搜索