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();//変更後


以上


JBL Flip4 スピーカー落下で電源が入らなくなった

2025-02-06 16:21:36 | ナレッジ_knowledge

落っことしたら電源が入らなくなったというスピーカーを直せるのか?
直りました。

原因と処置内容
基板のコネクタからフラットケーブルが抜けていた。
(ケーブル挿入が浅く接触不良になったと推定)

ケーブルをコネクタの正しいセット位置まで挿した。
(最後まで読んでください)

発生メカニズム(推定)
・落っことしたことでバッテリーが僅かに動き、
バッテリーとケースの隙間を通ったケーブルが引っ張られ、
コネクタから外れた。
・落っことす毎に少しずつ外れていった。
・初期からケーブルの挿入が浅かった。

修理事例として投稿します。
故障箇所を見つけるために、必要以上にバラさなくても良いので
参考にしてください。

途中までバラした状態で届きました。
まずバッテリーのカバーネジ2本を外して、コネクタを抜いておきます。
(中央の太い配線コネクタ)

FLIP4と文字の見えるゴムカバー外側、充電用USB端子と入力端子?部分を
固定しているネジを外して浮かせておく。(下画像)

電源、JBL Connectスイッチと表示LEDをカバーしているゴム部分を、
端からめくって少しずつ剥がします。

めくり上げた奥に見えるのがコネクタです。(下画像)

目視では何も問題が無いように見えますが、
フラットケーブルコネクタの基板側半田付箇所を、
ケーブル行き先との間で導通確認すると導通なしでした。
基板のコネクタからフラットケーブルが抜けかけていたか、
ケーブル挿入が浅く接触不良になったと推定されます。

作業上のポイント
コネクタの黒い部分(ケーブルを端子に押し当てる部分)を起こして、
ケーブルが抜ける状態にします。
ケーブルを引っ張ろうとしますが・・・
難点
・・・出ているケーブルが短く、指でつまんで引っ張れません。
・・・ペンチ等は端子を傷付けるので使えません。
・・・軽く引っ張ったくらいでは動きません。
・・・(バッテリーとケース緩衝材等の僅かな隙間を通っている)

指でつまむ部分を作るため、ポリイミドテープを使って、
フラットケーブルを挟むように貼り付けて、引っ張ったら出てきました。
ケーブルにダメージはありません。
コネクタにセットしたときに、ケーブルがたわむくらい多めに引っ張り出しておく。
ケーブルをセットしにくくなりますが、再発防止のためにやっておきましょう。

ケーブルをコネクタの奥まで挿し、黒い部分を元通り倒して処置完了です。
元通り組み立てます。

組み立て完了
電源ボタンを押してみると、LED点灯して、起動音が出ました。
動きそうです。ヨカタ

念の為
"リチウムイオンバッテリーの危険性"についてご了解いただきました。
(バッテリーが収納されている筐体ケースには損傷がありませんでした。)
バラしたことによって防水性能は低下します。
またメーカー保証は受けられなくなります。<br />
その他確認したこと
プリント基板を外して(引き抜いて)外観チェックしましたが、
拡大鏡+目視では問題見つかりませんでした。

"動作確認OK"と連絡届きました。


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 11:07:31 | 今日のできごと

また脱線ネタで投稿しました。

人間の目では海上から立ち上る湯気のように見えました。
珍しい景色だったので暫し眺めてました。
12月29日AM8:00ころ撮影