BME280 を M5stack で使って再びハマったこと、BOSCH 純正ドライバの使用について

M5Stack

センサー設置について

くどいようですが、ここでもう一度。
私が個人的に M5Stack に 気圧、温度、湿度センサーをマウントする場合にこだわったことを再度述べておきます。
誤っているかもしれませんので、あくまで趣味のホビー用途限定と思ってください。
以下、うまく動作しなかったとしても、当方では一切の責任を負いません。

今回は、あくまで前回の記事で製作した、NTP時計&Yahooニュース&天気予報に BME280 を接続する目的で作ったものです。
そのため、M5Stack からはある程度発熱するので、センサー値に影響が出ない様に、なるべく M5Stack から離して、且つ遠すぎない距離にセンサーを置くことを考慮に入れています。
そして、もう一つ重要な要素として、手軽に設置できるということを目標にして作りました。

ですから、先に述べたようにI2C バスラインにノイズが乗りやすいことも十分認識しておいてください。
測定値に誤差が出ても仕方ないと思ってください。

本来は、距離を放すのならば、間に通信用バッファを設けなければいけないかもしれません。

使ったもの

BME280搭載 温湿度・気圧センサモジュール(スイッチサイエンス製)

スイッチサイエンス BME280温度/湿度/気圧センサモジュール SSCI-022361
スイッチサイエンス
¥2,844(2024/03/29 02:47時点)

現在Amazonで販売されていないようなので、以下のスイッチサイエンスさんの公式サイトをご参照ください。
https://www.switch-science.com/products/2236?_pos=3&_sid=373c89d96&_ss=r

これは、ピンヘッダ実装済みとそうでないものとありますので注意してください。
また、これにはプルアップ抵抗はハンダ付けされていません。
必要ならば後でハンダ付け可能なパッドがあるので、こちらとしては都合が良いです。
M5Stack の I2C 端子にはプルアップ抵抗が予め搭載されているようなので、これを使いました。

M5Stack

Espressif Systems社の ESP32 を搭載した、技適取得済みの Wi-Fi & Bluetooth マイコンモジュールです。
LCD 液晶ディスプレイ、micro SD カードスロット、簡易バッテリー、スピーカー、Groveコネクタ、USB-TypeC など、必要な物全部入りです。
Arduino IDE で開発ができます。
(追記)
M5Stack Basicは、この記事を書いた当時より格段にバージョンアップしております。
以下のスイッチサイエンスさんの公式サイトをご参照ください。
https://www.switch-science.com/collections/%E5%85%A8%E5%95%86%E5%93%81/products/9010

2.54mmピッチ、ピンソケット

2.54mmピッチ ピンソケット

BME280 変換基板自作用です。
7ピン分必要です。

2.54mm ピッチ 小型ユニバーサル基板

サンハヤト 小型ユニバーサル基板 ICB-288G
サンハヤト
¥221(2024/03/28 17:38時点)

カッターで切断できるユニバーサル基板であれば何でも良いと思います。

ジャンパーワイヤー

φ0.65mm の単線で、ブレッドボードに挿せるものを使いました。

協和ハーモネット 耐熱通信機器用ビニル電線 H-PVC 0.65mm 2mX10色 茶赤橙黄緑青紫灰白黒
協和ハーモネット(Kyowa Harmonet)
¥1,448(2024/03/29 00:55時点)

ハンダコテ、パソコン、USBケーブル等

BME280 モジュール簡易マウント基板製作

私独自の BME280 モジュールの「なんちゃって」マウント基板を紹介します。

先に述べたように、熱源やノイズ源の M5Stack からできるだけ遠ざけ、でも遠すぎないようなものを作ってみます。

まず、下図の様な感じで、BME280モジュール7ピンをマウントできる大きさを設定します。

カッター等で傷を入れ、机の角でパキッと折って、下図の様な感じのものを作ります。

次に、下図の様に、2.54mm ピッチピンソケットを7ピン分カットします。

次に、ブレッドボードに挿せるφ0.65mm 単線を、おおよそ下図の様な長さでカットして、被覆を剥いておきます。

基板上で3Vラインをジャンパする分もカットしておきます。

基板上で GNDラインをジャンパする分もカットしておきます。

次に、下図の様な配線図を参照して、ハンダ付けします。

するとこんな感じ

裏側はヘタクソでお恥ずかしいのですが、一応こんな感じです。

BME280モジュールを挿すとこんな感じです。

やっぱ、これだけを見ると、通信距離が安易に長すぎるかも・・・と思ってしまいました。
あくまでホビー用途ということで勘弁してください。

では、次では Arduino IDE でプログラムしていきます。

コメント

  1. さや @La_zlo より:

    波形を拝見しました。
    I2Cのリードの直前のライトではSTOPをつけない事を強く推奨します。STOPを介さずにSTARTを発行(RESTART)してください。
    今回のトラブルの原因かどうかはわかりませんがご参考まで。

    補足)
    STOPはバスの解放を意味するので、マルチマスタ環境で誤動作の原因になります。STOPがあるとREADの直前のリードアドレスを他のデバイスに書き換えられる危険があるのです。

    • mgo-tec mgo-tec より:

      さやさん

      ダイレクトメールではいろいろとアドバイスありがとうございました。

      BME280 のデータシートには
      either a stop or a repeated start condition
      を入れると書いてあるので、stopコンディションは入れても問題無いと思います。
      BOSCHドライバの README にも stopコンディションを入れる例が書かれています。

      ただ、「さや」さんがおっしゃっていたとおり、設計仕様書に書いてないと、STOPでリードアドレスまでリセットかけちゃうHW設計者もいるかも知れないということは納得いきました。
      確かに複数デバイスでマルチタスクの場合はそういうリスクありそうですね。
      実際に経験された方からアドバイス頂けることは、独学しかしたことのない私にとってはとても有難いことです。
      これからのプログラミングに参考にしていこうと思います。
      貴重な情報、ありがとうございました。
      m(_ _)m

  2. BotanicFields より:

    いつも参考にさせていただいております。ありがとうございます。I2Cバスの中間電位の件、オシロの設定ミスとありますが、具体的にどの様に設定するとその様な波形が観測できるのでしょうか。実は、SPIで同様の波形を観測したことがあって、原因が不明で困っていました。どうかよろしくお願いいたします。

    • mgo-tec mgo-tec より:

      BotanicFieldsさん

      記事をご覧いただき、ありがとうございます。

      Twitterでも同じ質問をされたことがあります。
      結構みなさん中間電位が現れているようですね。

      私の場合の原因は、デジタルストレージオシロで、2つの波形の平均値を取るモード「Average」を選択してしまっていたことです。
      この波形を取るかなり前に、オシロスコープ設定の裏画面でそういう設定にしていて、すっかり忘れておりました。
      オシロスコープを久々に使うとこういうトラブルがあるもんだと思い知らされました。
      そんな感じで、しょうもないミスでございます。

  3. BotanicFields より:

    ご回答ありがとうございます。原因が分かると気持ちがいいですよね。私自身は全てを理解できたわけではありませんけれど。当方の原因不明の具体的な波形は以下です。ちら見程度にしていただければと思います。
    https://twitter.com/lv107/status/1126854524159684608

    • mgo-tec mgo-tec より:

      BotanicFieldsさん

      波形拝見させていただきました。
      なるほど、怪しい中間電位ですね。
      明らかに頻繁に発生するようでしたら、別の信頼できる測定器で測ってみるとかですかね?
      でも、別のM5Stackで測定して問題無いとすれば、M5Stackに原因があると思います。
      オシロの設定が間違いなければ、それくらいしか思いつきません。

タイトルとURLをコピーしました