◯やりたいこと
(2)で動かなかった原因を追求し動作するまでふんばる。
◯やったこと
・ハードウエア変更→スケッチ変更→ハード変更→スケッチ変更…
(2)で原因がスケッチにありそうなところまできたのですが、スケッチを目を皿にして見てもそれらしい問題点が見つかりません。ハードを単独動作させていますので、デバッグで活躍するSerialPrint()が使えず完全に煮詰まってしまいました。
BME680を取り付けなければ順調に動作するところまで確認が取れるのですが
BME680を取付けるとBME.begin時の動作確認が取れずリスタートを繰り返します。
BME280だとすんなり行くのになぜ?うーん。
・ライブラリのスケッチ例が使えない
ここでハタ、と思い出しました。BME680モジュールの動作用スケッチはAdafruit_BME680ライブラリに添付されているスケッチ例を使っているのですが、CCS811の時もモジュール操作部分をスケッチ例そのまま使ってハマった時があります。今回もその手の同じ失敗をしているのでは?
そこでさっそくライブラリを確認します。
あちこち調べていたらふとI2Cアドレスのデフォルトが0x77という部分を発見。
あれっ、BME280と違うなと思い現状のハードがどういう設定になっているかを確認してみると、添付されていた資料通りに設定していたため
0x76。なんとデフォルトと違います。
なんだ、そもそも論から違うんじゃないかとグッタリ。どうやらこの辺に原因がありそうです。
・I2Cアドレスのデフォルト値を変更
再びライブラリを見直してアドレス設定の変更方法を探します。
begin時の第1引数にハード上で設定したI2Cアドレスを指定すれば良い様です。
アドレス値を設定値に変更して動作させたところ
無事動作。
ふ〜。
スケッチ例に載っていたフィルタ設定もデフォルト値でよければ命令文が不要な事がわかりスッキリです。
その後BME280の時と同じくWiFiにつながり、NTPとも通信を開始して時間も刻み始めて
温湿度、気圧共に近くにあるBME280と似たような値を表示しています。
センサーを指で温めると
温度と湿度が上がりますので多分無事動作しているのでしょう。
いや、ひと苦労しました。
◯やってみて
BME680モジュールはI2Cアドレスを指定してbeginする!
これ鉄則です。
◯おまけ
ブレッドボードに余裕があったのでOLEDの電源をTXピンで制御する回路を追加してみました。
電源オンして温湿度等を測定し結果を表示させると
max数百mAを消費しています。
その後測定値を一定時間表示してOLEDがオフになると
消費電流は60μAまで減少。バッチリです。
ただこのTXピンをGPIOピンとして使うためには少々コツが必要なようで、私はSerialをRXオンリーモードでbeginするというかなりマニアックな設定で対応しています。Serial.end()で使えるようになると思ってた当時は大ハマりしました。詳しくはスケッチ編に書いときます。
〜 つづく 〜