ESP32做汽車封包紀錄器
緣起 我手邊的CAN Bus工具很難用,做實驗很痛苦;我想根本解決一些問題 遠端分析:去地下室分析得餵蚊子,我想在家裡幹活兒 容易操作:操作Linux連我都嫌麻煩,我想點web網頁 常駐車上:樹莓派的耗電太高,MCU能達成uA等級待機耗電 萬丈高樓平地起,先用ESP32可以上車紀錄數據,後面還有很多事能做 硬體設計 藍色電路板是ESP32C3開發版,跳線接綠色電路板CAN收發晶片;背面放Micro-SD卡插座,加上OBD2接頭,硬體原型就做好了。電源暫時用USB-C,之後再考慮從OBD2拉電 CAN BUS ESP32的CAN bus 我搞過,CAN封包導入 資料紀錄器 ,很快就能錄數據,以及轉檔。讓樹梅派用極速送出50000個封包,數值遞增,確定沒掉任何封包,紀錄器就搞定了 上車實驗 把ESP32板子上車紀錄,照影片按遙控器,按兩下鎖定,等一下,再按兩下鎖定。我們要在汽車網路上找到關鍵封包 VOLVO車的封包格式長下圖,VOLVO沒公開定義,我也看不懂 逆向工程來找吧,上圖can1 xxx 三個數值是ID,可以看成是資料分類。最早用EXCEL分析 把上圖導入EXCEL,照ID分類,找出unique封包,並且計算出現幾次 我們按遙控器四下,找出所有出現4次的封包 然後用Linux的candump錄下封包,搭配grep肉眼仔細觀察 上述流程後來變成自製工具,把Log塞入網頁,為每個ID繪圖 畫出一堆圖,下面這個圖四個點不就對上遙控器手勢?AI說這招是 資料指紋化 ,不關心意義,只關心 資料變了嗎 ,以及 變成哪種狀態 實際狀態 實際做實驗還是得吃苦的,掙扎一個小時沒錄出來; 先鎖車 再實驗呢?到車外餵蚊子,再掙扎一下才錄到這些信號 效能優化 轉檔有夠慢,10000個封包紀錄檔392KB要22.3秒 修改軟體架構反覆做實驗,這個例子最後優化到1.48秒,大概15倍加速,堪用了 效能基準線是22.3秒 加大檔案讀寫緩衝區,效能變超爛( 217.42s),9.74x 因為呼叫fseek()讓緩衝區作廢,更大緩衝區等於讀更多資料丟掉,傻了 避免呼叫fseek()( 2.33s),0.1x 整併兩次fread(),加速字串處理,調整SD卡參數(1.48s),0.066x 結語 連上網的開發工具,用起來真的爽!後面還能繼續搞事 加一顆電池,常駐在車上 把封包導向遠方,讓我在家裡,...