hiro yamamoto works

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

Arduino UNO MINIMAでCAN通信(ESP32 TWAIreceive.ino受信時変更点)

2025-02-15 15:10:00 | CAN通信

以前の投稿で解決策を追記しましたが、わかりにくくなっていたので新たに投稿しておきます。
変更点書き忘れもありました。
笑って許してくれる方だけ見てくださいね・・・


送信 Arduino UNO R4 (CANWrite.ino)+CANトランシーバ:SN65HVD230
受信 ESP32-WROOM-32E(TWAIreceive.ino)+CANトランシーバ:SN65HVD230

発生する問題点
・MINIMA側(送信)シリアルモニタにエラー表示
CAN.write(...) failed with error code -60003
・ESP32側(受信)シリアルモニタに高速出力
・変化データを送信しても、受信(ESP32)データが更新されない。

ESP32 TWAIreceive.inoの変更するところ
 setup関数の中
"TWAI_MODE_LISTN_ONLY"を"TWAI_MODE_NORMAL"へ変更
TWAI_TIMING_CONFIG_500KBITS()をTWAI_TIMING_CONFIG_250KBITS()へ変更
//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_timing_config_t t_config = TWAI_TIMING_CONFIG_500KBITS();//変更前
twai_general_config_t g_config = TWAI_GENERAL_CONFIG_DEFAULT((gpio_num_t)TX_PIN, (gpio_num_t)RX_PIN, TWAI_MODE_NORMAL);//変更後
twai_timing_config_t t_config = TWAI_TIMING_CONFIG_250KBITS();//変更後


以上


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がどのような影響を与えるのか?



まだ進んでいません。


Arduino UNO MINIMAでCAN通信(ESP32 > twaireceive.inoで受信できたが)

2024-11-12 11:40:09 | CAN通信

この投稿には、役立つ情報はなにも載っていません。

ESP32側には"available( )"みたいなやつが見つからないんです。
何か方法がないか調べています。
ESP32側 別のライブラリという方法もありそうですが、
こちらも少々問題があり、TWAI(CAN類似)を使うことにしたのですが
うまくいかないのでした。

構成は
送信 Arduino UNO R4 (CANWrite.ino)+CANトランシーバ:SN65HVD230
受信 ESP32-WROOM-32E(twaireceive.ino)+CANトランシーバ:SN65HVD230

通信ができただけ、まだ進んでいません。

受信側(ESP32)のシリアルモニタ出力
延々と出力されます。

つづくと思います。