M5Stackシリーズ(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ユニットの情報は、以下が詳しいです。

公式サイト

M5Stack Docs - The reference docs for M5Stack products.
The reference docs for M5Stack products. Quick start, get the detailed information or instructions such as IDE,UIFLOW,Arduino. The tutorials for M5Burner, Firmw...
即戦力のAIエンジニアになるためのE資格講座を、業界最安価格帯で
広告

CAN-BUSユニットの使い方

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

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

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

ライブラリ

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

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

m5stack/M5-ProductExampleCodes
All example codes of products supplied by M5Stack have been collected in this reposity. - m5stack/M5-ProductExampleCodes

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

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バスに、ATOM+CAN-BUS経由で、任意のCANメッセージを送信するアプリを作成します。

「1」を指示すれば、CANメッセージ(CAN ID:0x100、DATA:01 02 03 04 05 06 07 08)

「2」を指示すれば、CANメッセージ(CAN ID:0x200、DATA:A0 A1 A2 A3 A4 A5 A6 A7)

広告

フォルダ構成

ライブラリとアプリを同じフォルダに入れるようにしてください。

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送信アプリ");
  Serial.println("「1」押下で、CANメッセージ1を送信");
  Serial.println("「2」押下で、CANメッセージ2を送信");

  // CANモジュール初期化
  func_can_init();
  
  // 起動時LED点灯
  M5.dis.drawpix(0, 0x00f0f0);  // 紫

}

// メイン処理
void loop(){

  CAN_frame_t rx_frame;

  // シリアル通信を受信したときの処理
  if(Serial.available() > 0) {

    // 受信データを取得
    char ch = Serial.read();

      Serial.println(ch);

      if(ch == '1'){
 
        rx_frame.FIR.B.FF = CAN_frame_std;
        rx_frame.MsgID = 0x100;
        rx_frame.FIR.B.DLC = 8;
        rx_frame.data.u8[0] = 0x01;
        rx_frame.data.u8[1] = 0x02;
        rx_frame.data.u8[2] = 0x03;
        rx_frame.data.u8[3] = 0x04;
        rx_frame.data.u8[4] = 0x05;
        rx_frame.data.u8[5] = 0x06;
        rx_frame.data.u8[6] = 0x07;
        rx_frame.data.u8[7] = 0x08;
            
        ESP32Can.CANWriteFrame(&rx_frame);
        Serial.println("Send Message 1 ");

        delay(100);
       
      }else if(ch == '2'){

        rx_frame.FIR.B.FF = CAN_frame_std;
        rx_frame.MsgID = 0x200;
        rx_frame.FIR.B.DLC = 8;
        rx_frame.data.u8[0] = 0xA0;
        rx_frame.data.u8[1] = 0xA1;
        rx_frame.data.u8[2] = 0xA2;
        rx_frame.data.u8[3] = 0xA3;
        rx_frame.data.u8[4] = 0xA4;
        rx_frame.data.u8[5] = 0xA5;
        rx_frame.data.u8[6] = 0xA6;
        rx_frame.data.u8[7] = 0xA7;
            
        ESP32Can.CANWriteFrame(&rx_frame);
        Serial.println("Send Message 2 ");

        delay(100);
    
      }else if(ch == 13){
      }else if(ch == 10){
      }else{
        Serial.println("無効な操作です");
      }
    
  }else{
  }

}

注意事項です。

上記サンプルコードの「CAN_cfg.speed=CAN_SPEED_500KBPS;」という文がありますが、これはCAN速度の設定です。つなぐ先のCAN速度を設定してください。今の車なら、だいたい500kbpsで問題ないと思います。

上記サンプルコードをArduinoIDEで、ATOMに書き込んでください。

上で説明したように、各部品を繋いでください。

広告

使い方

ArduinoIDEのシリアルモニターをつかってもらうのが簡単です。

シリアルモニターの上部に、1か2を入力すると、CANメッセージが送信されます。

広告

まとめ

今回は、M5 ATOMとCAN-BUSユニットを使ったCANメッセージ送信ツールを紹介しました。

M5Stack用CAN-BUSユニット(CA-IS3050G) - スイッチサイエンス
絶縁型のCAN(コントローラエリアネットワーク)トランシーバーユニットで、複雑なCAN通信ネットワークの構築が可能となります。内蔵のDC/DC絶縁型電源チップにより、ノイズと混信を絶縁し、敏感な回路へのダメージを防ぎます。

コメント

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