基板はこんなものです。

これを基板に実装してI2Cと電源を接続してみましたが動作しません。何の説明書もないのでネットで調べてみると基板のジャンパー接続が必要ということで対応。次にアドレスをI2Cスキャナー念のために確認したところ、秋月が0x28なのですが、この基板は0x29と異なっていたので修正しました。その結果、動作するようになりました。

動作するようになったので、受信機の基板にこのソフトをマージしてみたのですが、BNO055の初期化でフリーズします。同一ハード構成でソフトを電子コンパス専用のものにすると動作するので調査中ですが、難航しています。
ソフトウェアのバグ対応は、AIのChat GPTを使っていますが、本当に素晴らしいです。エラーメッセージや質問に対しても的確に回答してくれます。昔だったらプログラムに詳しい方に教えてもらうところですが、それ以上の回答が瞬時にくるのでプログラムの勉強にもなります。
まだ解決できていませんが、AIのやり取りはこんな感じだということを参考までに貼っておきます。
どうですか?驚きますよね。こんなに知識があるので初心者でもかなり進められると思います。
AIで画像処理も便利ですが、こういう使い方ができると本当に仕事の大半をAIに置き換えられると思いますね
ーーー以下AIコメントーーー
状況整理しますね 👍
マイコン:3.3V動作
SH1106(0x3C)+ BNO055(0x28)を同一I2C
I2Cスキャナでは両方見える
しかし
bno.begin()でフリーズ外付け10kプルアップ追加 → 変化なし
ここまで来ると I2C信号レベルの問題よりも、BNO055側の初期化失敗による無限待ち の可能性が高いです。
🔎 よくある原因(重要順)
① BNO055の電源品質不足(最有力)
特に 中華GY-BNO055 は電源がシビアです。
症状
I2Cスキャンは通る
でも
bno.begin()で止まるたまに動くこともある
理由
begin() 内でチップIDを読む
→ 読めないと内部で待ち続ける
BNO055は瞬間的に 12~15mA 程度流れます。
OLEDも起動時に電流が流れます。
💥 3.3Vレギュレータが弱いと電圧が一瞬落ちます。
✔ 対策
BNO055のVCC直近に 10µF + 0.1µF を追加
可能なら OLEDとBNOを同時に初期化しない
電源立ち上がり後に少し待つ
例:
delay(500); // 電源安定待ち
if (!bno.begin()) {
Serial.println("BNO055 not detected");
while (1);
}
② 初期化順序の問題
今のコードは
display.begin(...)
...
bno.begin()
になっていませんか?
🔴 試しに BNOを先に初期化 してください。
delay(500);
if (!bno.begin()) {
Serial.println("BNO error");
while(1);
}
display.begin(SH1106_SWITCHCAPVCC, 0x3C);
中華BNOはI2Cリセットに弱い個体があります。
③ BNO055のリセットピン問題(かなり怪しい)
GY-BNO055はRSTピンが不安定なことがあります。
RSTがフロートするとフリーズします。
対策
RSTピンを確認:
RSTが出ているなら → 3.3Vへ10kでプルアップ
なければ → 問題なし
④ SH1106の電源ノイズ
SH1106は内部昇圧を使うとノイズを出します。
試しに:
display.begin(SH1106_EXTERNALVCC, 0x3C);
に変更してみてください。
🔥 切り分けテスト(これが一番重要)
① OLEDを外してBNOだけで動かす
これで動けば「バス競合」確定。
② BNOを外してOLEDだけ
問題なければI2Cラインは正常。
📌 最も怪しいポイント
✅ 電源瞬断
✅ BNO055のRST不安定
✅ 初期化順序
🎯 まず試すこと
BNOを先に初期化
電源後500ms待つ
BNOのVCCに10µF追加
OLEDを一旦外して試す
もし可能なら、
使用しているマイコン(Pro Mini?)
3.3Vはどこから取っていますか?
GY-BNO055の写真(RST配線)
を教えてください。
中華BNO055はクセが強いので、かなり経験則があります 😄
コメント
コメント一覧 (2)
それにしても、ここまでの回答が出来るなんて、驚きの時代になったものです。
becl8873
が
しました