hiro yamamoto works

マイコンハード、ソフトを作ったりしています。
お家や現場のお困りごと解決に!
内容利用は自己責任でお願いします。

Arduino UNO MINIMAでCAN通信(MINIMA >> UNO R4 Wi-Fi 受信データを配列に入れる)

2025-01-27 11:34:48 | CAN通信

参考になる情報を見つけたので、備忘記録として投稿します。
情報公開してくださっている方に感謝します。

笑って許してくれる方だけ見てくださいね!
本来目的のESP32受信で問題点があり、原因切り分け調査のための、
UNO R4 WIFI受信調査となっています。
送信 Arduino UNO R4 MINIMA(CANWrite.ino)+CANトランシーバ:SN65HVD230
受信 Arduino UNO R4 WIFI(CANRead.ino)+CANトランシーバ:SN65HVD230
これでやっています。

サンプルスケッチ"CANRead.ino"は決められた書式でのシリアルモニタ表示はできますが、
  if (CAN.available()) {
    CanMsg const msg = CAN.read();
    Serial.println(msg);
  }

データのみを使いたい時どうしたら良いか疑問が湧いて調べたら、次のようなコードをみつけました。
これで解決できます。

  if (CAN.available())  {
    CanMsg const msg = CAN.read();
//sizeof(msg.data)は"msg.data"メモリサイズをバイト単位で返す
    uint8_t rx_data[20];
//メモリ領域msg.dataの先頭からmsg.dataのメモリサイズバイトをメモリ領域rx_dataにコピーする
    memcpy(rx_data, &msg.data, sizeof(msg.data)); // rx_data配列へコピー
    uint32_t rxId = msg.id;
    uint8_t rxLen = msg.data_length;
    Serial.print("id:"); // CAN_ID
    Serial.print(rxId, HEX);
    Serial.print(" dlc:"); // data length code
    Serial.print(rxLen, HEX);
    Serial.print(" data:");
    for (int i = 0; i
      Serial.print(rx_data[i], HEX);
      Serial.print(" ");
      //Serial.println(msg);
    }
    Serial.println("");
  }

ありがたく使わせていただきます。
以上


解決Arduino UNO MINIMAでCAN通信(MINIMA >> ESP32twaireceiveで受信できたが)

2025-01-19 21:16:47 | CAN通信

少し前に進みました?
笑って許してくれる方だけ見てくださいね!

送信 Arduino UNO R4 (CANWrite.ino)+CANトランシーバ:SN65HVD230
受信 ESP32-WROOM-32E(TWAIreceive.ino)+CANトランシーバ:SN65HVD230
これでやっています。
最終的に送信側をXIAO RA4M1にしたいと目論んでいます。
困りごと・・・☆解決☆(2025/02/03)
・1秒毎の送信なのに、受信側はシリアルモニタに高速出力?☆解決☆
・変化データ送信で、受信データが更新されない。☆解決☆

変更点
TWAIreceive.ino setup関数の中
"TWAI_MODE_LISTN_ONLY"を"TWAI_MODE_NORMAL"へ変更
  //TWAIreceive.ino //setup関数の中にある
  //Initialize configuration structures using macro initializers
//twai_general_config_t g_config = TWAI_GENERAL_CONFIG_DEFAULT((gpio_num_t)TX_PIN, (gpio_num_t)RX_PIN, TWAI_MODE_LISTEN_ONLY);//変更前
  twai_general_config_t g_config = TWAI_GENERAL_CONFIG_DEFAULT((gpio_num_t)TX_PIN, (gpio_num_t)RX_PIN, TWAI_MODE_NORMAL);//変更後


新たに確認できたこと(2025/01/21)
ESP32同士なら問題なさそう?な雰囲気、まだ変化データは未確認だった。
つまり"マイコンの組み合わせ"?
でもXIAO RA4M1を使いたいので、打開策調べます。

ESP32同士の受信シリアルモニタ表示 1sec毎表示されます。
(送信側をUNO R4からESP32に変えたということです。)
(TWAIreceive.ino-->TWAItransmit.ino)
なんで"Extended Format"になってるんだろう?


問題の状態シリアルモニタ表示(下)
・シリアルモニタに高速出力される。
・変化するデータを送信しているんですけどByte: 0 = 1f , 1 = a8 , 2 = 0c ・・・で変化せず。
高速表示のせいではなく、ずっと同じデータのままです。

解決のため、確認しなければならないですね。
・送信、受信どちらに原因があるのか?
・マイコンの組み合わせ?

送受どちらに起因するのか?
受信マイコン(コントローラを含む)変更
送信 Arduino UNO R4 (CANWrite.ino)+CANトランシーバ:SN65HVD230
受信 Arduino UNO R3(CAN_receive.ino)+CANコントローラ:MCP2515+CANトランシーバ:TJA1050
結果
1秒毎の送信に対して1秒毎の受信・・・OK
変化するデータの受信・・・OK
受信側に問題がありそう

Arduino UNO R3受信のシリアルモニタ表示・・・正常と思われる。

試しに同バスにESP32も接続して受信してみると

ESP32の受信シリアルモニタ表示・・・正常になった?

送信は変えず、受信をUNO R3とESP32の2つにした状態
送信 Arduino UNO R4 (CANWrite.ino)+CANトランシーバ:SN65HVD230
受信 ESP32-WROOM-32E(twaireceive.ino)+CANトランシーバ:SN65HVD230
受信 Arduino UNO R3(CAN_receive.ino)+CANコントローラ:MCP2515+CANトランシーバ:TJA1050

同バスに接続したUNO R3がどのような影響を与えるのか?



まだ進んでいません。


年末はなにかとやること多い(もちつきは機械任せ…ありがたや)

2025-01-04 10:43:27 | 家事できごと

今回投稿も脱線ネタですがお付き合いください。

何でも締め切り間近でないと始めないので、ギリギリの12月25日です。
正月に餅は必要(お供え用と食べたい用)なので、もちつきしました。
"もちつき"と称していますが、機械任せで臼と杵でついていません。
板状の切り餅にして1日冷凍後、クール便で発送しました。
なんとか正月前に間に合いました。