
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モニターツールを作成しました。
AI(人工知能)特化型プログラミングスクール「Aidemy Premium」
Aidemy Premiumは、AIや機械学習などの最先端技術の修得に留まらず、それらを活用して目標達成を実現するまでを一気通貫して支援するオンラインコーチングサービスです。
こんな思いを持っている人にオススメ
・AIエンジニア/データサイエンティストにキャリアチェンジしたい
・業務課題(研究課題)をAIを使って解決したい
・教養としてAIについて知りたい
・AIに関してのスキルを身に着け就職活動に活かしたい…
オススメポイント
・3ヶ月間集中して「AIプログラミング」を修得するオンラインコーチングサービスです。
・完全なプログラミング初心者から研究者にまで幅広く優良なコンテンツを提供します。
・通常のプログラミングスクールとは異なり、受講者の進捗管理を徹底して行います。
・専属メンターがAIの学び方から徹底的にコーチングします。
・完全オンライン完結なので、東京以外に在住・在勤の方も気兼ねなくお申込み頂けます。
実績
・日本最大級のAI/人工知能プログラミングスクール
・SaaS型AI学習サービス「Aidemy」会員登録者数 55,000名突破
・法人向けAI内製化支援サービス「Aidemy Business」導入企業数 120社突破
・第16回 日本e-Learning大賞「AI・人工知能特別部門賞」受賞
・「HRアワード2019」プロフェッショナル部門 入賞
無料ビデオカウンセリング実施中です。



コメント