M5 ATOMとCAN-BUSユニットで、CANモニターツールを作る

CAN
YOU
YOU

CANデータを取り込んで、データ解析したいんだけど。

CANロガーって結構高いんだよね。

けんろう
けんろう

M5Stackシリーズなら、CANデータをパソコンに取り込むことができるよ。

しかも、その装置も小さくできるし、たった数千円で作れるよ。

M5Stackの拡張部品として、CAN-BUSユニットという部品が販売されています。

M5Stackシリーズと、CAN-BUSユニットを使うことで、自動車に使われるCANデータを送受信することができます。

スポンサーリンク

M5Stack用CAN-BUSユニットとは

CANユニットは、複雑なCAN通信ネットワークを構築するために使用できる分離コントローラーエリアネットワーク(CAN)トランシーバーユニットです。
内蔵のDC-DC絶縁型パワーチップは、ノイズと干渉を絶縁し、敏感な回路への損傷を防ぐことができます。

CAN-BUSユニットの情報は、以下が詳しいです。

公式サイト

m5-docs
The reference docs for M5Stack products. Quick start, get the detailed information or instructions such as IDE,UIFLOW,Ar...

CAN-BUSユニットの使い方

CAN-BUSユニットのつなぎ方

ATOMとCAN-BUS間は、GROVEケーブルでつなぎます。

CAN-BUSと車両は、CANL,CANH、GNDを繋ぎます。

ライブラリ

CAN-BUSユニットには、M5Stackが用意しているライブラリがあります。

以下のサイトから、ダウンロードしてください。

https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Unit/CAN

上記サイトを見ると、以下のフォルダがあります。

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モニターツールを作成しました。

コメント

タイトルとURLをコピーしました