CANデータを取り込んで、データ解析したいんだけど。
CANロガーって結構高いんだよね。
M5Stackシリーズなら、CANデータをパソコンに取り込むことができるよ。
しかも、その装置も小さくできるし、たった数千円で作れるよ。
M5Stackの拡張部品として、CAN-BUSユニットという部品が販売されています。
M5Stackシリーズと、CAN-BUSユニットを使うことで、自動車に使われるCANデータを送受信することができます。
M5Stack用CAN-BUSユニットとは
CANユニットは、複雑なCAN通信ネットワークを構築するために使用できる分離コントローラーエリアネットワーク(CAN)トランシーバーユニットです。
内蔵のDC-DC絶縁型パワーチップは、ノイズと干渉を絶縁し、敏感な回路への損傷を防ぐことができます。
CAN-BUSユニットの情報は、以下が詳しいです。
公式サイト
CAN-BUSユニットの使い方
CAN-BUSユニットのつなぎ方
ATOMとCAN-BUS間は、GROVEケーブルでつなぎます。
CAN-BUSと車両は、CANL,CANH、GNDを繋ぎます。
ライブラリ
CAN-BUSユニットには、M5Stackが用意しているライブラリがあります。
以下のサイトから、ダウンロードしてください。
上記サイトを見ると、以下のフォルダがあります。
CAN_RECEIVE (CAN受信サンプルコード)
CAN_SEND (CAN送信サンプルコード)
フォルダ内は、以下のソースコードが入っています。
CAN-BUSユニットのライブラリコード(CAN_RECEIVE、CAN_SENDで共通です)
CAN.c
CAN.h
CAN_config.h
ESP32CAN.cpp
ESP32CAN.h
can_regdef.h
CAN-BUSユニットのアプリ
CAN_RECEIVE.ino ・・・ CAN受信アプリ
CAN_SEND.ino ・・・ CAN送信アプリ
CAN-BUSユニットを使ったアプリを作るには、上記アプリを改造して製作するのが一番簡単です。
今回作成するアプリ
自動車のCANバスから、CANデータをCAN-BUS+ATOM経由で、PCのコンソールに表示するアプリを作成します。
パソコン側で、シリアルデータ(CANデータ)をパソコンに取り込み、パソコン上で自由に解析するプログラムも作成することが可能になります。
スペック
ATOM-PC間のシリアルデータ仕様
”タイムスタンプ、CAN-ID、DLC、DATA0、DATA1、DATA2、DATA3、DATA4、DATA5、DATA6、DATA7”
タイムスタンプは、ATOM内で生成される1ms単位でインクリメントされるカウンタです。
フォルダ構成
ライブラリとアプリを同じフォルダに入れるようにしてください。
CAN_test - CAN_TEST.ino
CAN.c
CAN.h
CAN_config.h
ESP32CAN.cpp
ESP32CAN.h
can_regdef.h
サンプルコード
#include "M5Atom.h"
#include "ESP32CAN.h"
#include "CAN_config.h"
#define TX_PORT GPIO_NUM_26
#define RX_PORT GPIO_NUM_32
CAN_device_t CAN_cfg;
// CAN初期化処理
void func_can_init(){
CAN_cfg.speed=CAN_SPEED_500KBPS;
CAN_cfg.tx_pin_id = TX_PORT;
CAN_cfg.rx_pin_id = RX_PORT;
CAN_cfg.rx_queue = xQueueCreate(10,sizeof(CAN_frame_t));
//start CAN Module
ESP32Can.CANInit();
}
// 初期化処理
void setup(){
// M5Stack初期化
M5.begin(true, false, true);
Serial.begin(115200);
// 表示
Serial.println("");
Serial.println("CAN Unit Receive");
// CANモジュール初期化
func_can_init();
// 起動時LED点灯
M5.dis.drawpix(0, 0x00f0f0); // 紫
}
// メイン処理
void loop(){
CAN_frame_t rx_frame;
//キューからCANフレームを受信する
if(xQueueReceive(CAN_cfg.rx_queue,&rx_frame, 3*portTICK_PERIOD_MS)==pdTRUE){
Serial.print(millis()); // 受信時間
Serial.print(",");
Serial.print(rx_frame.MsgID,HEX); // Msg ID
Serial.print(",");
Serial.print(rx_frame.FIR.B.DLC); // DLC
Serial.print(",");
for(int i = 0; i < 8; i++){
Serial.print(rx_frame.data.u8[i],HEX); // CANデータ
Serial.print(",");
}
printf("\n");
}
}
上記サンプルコードをArduinoIDEで、ATOMに書き込んでください。
上で説明したように、各部品を繋いでください。
ATOMからのシリアルデータは、ArduinoIDEのシリアルモニターをつかってもらうのが簡単です。
注意事項です。
上記サンプルコードの「CAN_cfg.speed=CAN_SPEED_500KBPS;」という文がありますが、これはCAN速度の設定です。つなぐ先のCAN速度を設定してください。今の車なら、だいたい500kbpsで問題ないと思います。
私も上記サンプルコードをATOMに書き込んだ、実際の車両のCANに繋げましたが、取りこぼすことがなくCANデータがArduinoIDEのシリアルモニター上に表示されていました。
まとめ
今回は、M5 ATOMとCAN-BUSユニットを使ったCANモニターツールを作成しました。
コメント