環境構築:Arduino IDE 入門チュートリアルを参考に IDE をインストールし、使用する開発ボードに応じてボードマネージャおよび必要なライブラリを導入してください。
使用ライブラリ:
使用ハードウェア製品:


CAN(Controller Area Network)は、多ホスト型で高信頼性のシリアル通信プロトコルであり、自動車電子機器や産業オートメーションなど、リアルタイム性と信頼性が求められる分野に広く利用されています。CANネットワークは複数ノードの平等なアクセスをサポートし、優れたエラー検出と仲裁メカニズムを備えています。
1. 核心定義:
2. 主な特性:
3. 動作原理:
バス両端に120Ω終端抵抗を並列接続して信号の完全性を確保します。本チュートリアルで使用するメインコントローラは AtomS3R と Atomic CAN Base の組み合わせです。本モジュールはシリアル通信を使用し、回路接続に応じてプログラム内のピン定義を変更してください。接続後のシリアルピンは G5 (RX)、G6 (TX) です。
本モジュール内部には120Ω終端抵抗が含まれていません。下画像の位置を参考に、CANバスの両端に120Ω抵抗を並列接続してください。
#include <M5Unified.h>
#include <M5GFX.h>
#include "driver/twai.h"
const gpio_num_t MCU_CAN_TXD = GPIO_NUM_5;
const gpio_num_t MCU_CAN_RXD = GPIO_NUM_6;
void setup() {
M5.begin();
M5.Display.clear();
M5.Display.setFont(&fonts::FreeMonoBold12pt7b);
Serial.begin(115200);
twai_general_config_t g_config = TWAI_GENERAL_CONFIG_DEFAULT(MCU_CAN_TXD, MCU_CAN_RXD, TWAI_MODE_NORMAL);
twai_timing_config_t t_config = TWAI_TIMING_CONFIG_500KBITS();
twai_filter_config_t f_config = TWAI_FILTER_CONFIG_ACCEPT_ALL();
if (twai_driver_install(&g_config, &t_config, &f_config) == ESP_OK && twai_start() == ESP_OK) {
Serial.println("\nCAN ready. ");
} else {
Serial.println("\nCAN init failed. ");
while (1) delay(1000);
}
M5.Display.drawCenterString("CAN", 64, 50);
}
void loop() {
// transmit
twai_message_t tx_msg = {};
tx_msg.extd = 0; // 0 = standard frame, 1 = extended frame
tx_msg.identifier = 0x123; // 11-bit standard ID, change it on another device
tx_msg.data_length_code = 2;
tx_msg.data[0] = 0xAA; // change it on another device
tx_msg.data[1] = 0xBB; // change it on another device
if (twai_transmit(&tx_msg, pdMS_TO_TICKS(100)) == ESP_OK) {
Serial.println("TX OK");
} else {
Serial.println("TX failed");
}
// receive (non-blocking)
twai_message_t rx_msg;
if (twai_receive(&rx_msg, pdMS_TO_TICKS(10)) == ESP_OK) {
Serial.print("RX: ");
for (int i = 0; i < rx_msg.data_length_code; i++) Serial.printf("%02X ", rx_msg.data[i]);
Serial.printf("(ext=%d, id=0x%X, dlc=%d)", rx_msg.extd, rx_msg.identifier, rx_msg.data_length_code);
Serial.println();
}
delay(2000);
} 1. ダウンロードモード:デバイスにプログラムを書き込む前にダウンロードモードに切り替える必要があります。メインコントローラによって手順が異なります。詳細はArduino IDE 入門チュートリアルページ下部のデバイス別書き込み方法一覧をご参照ください。
AtomS3R の場合、リセットボタンを約2秒間長押しし、内部の緑色LEDが点灯したら放します。これでデバイスはダウンロードモードに入り、書き込み待機状態になります。
TX OKRX: AA BB (ext=0, id=0x123, dlc=2)