BME280で環境測定・その1
計測・測定の定番はやはり、温度・湿度・気圧といった環境の値です。そこは世の中便利なもので、1つでこの3つの値を計測してくれるセンサーモジュール「BME280」というのがあります。このBME280をmicro:bitに接続して、室温・湿度・気圧を計測に挑戦してみましょう。
環境センサーBME280とmicro:bitを使って
部屋の環境を計測しよう
「その1」では、測定結果をmicro:bitのLEDに表示する方法、シリアル通信でパソコン画面上に表示させる方法にチャレンジします。
(本ページ作成 2021.05.20)
BME280
BME280は、ドイツBOSCH社が開発した、温度・湿度・気圧の計測機能を一つにまとめたセンサーモジュールです。2.5mm角と小さいものの高性能なセンサーです。マイコンとは、I2CまたはSPIで接続します。
主な仕様
電源電圧 1.71V~3.6V
通信方式 I2C または SPI
測定範囲 温度 -40~85℃ ±1℃
湿度 0~100% ±3%
気圧 300~1100hPa ±1hPa
製品紹介ページ・データシート
製品ページ・データシートのリンクは下記です。
【BOSCH社サイト製品ページ】
https://www.bosch-sensortec.com/products/environmental-sensors/humidity-sensors-bme280/
【データシート】
https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bme280-ds002.pdf
よく似たセンサーに「BMP280」というのがあります。こちらは「気圧」専用なので注意してください。
利用法
micro:bitのMakeCodeエディターの拡張機能で「BME280」を検索すると、複数の拡張機能がヒットします。BME280単独のものもあれば、拡張ボードの一機能となっている場合もあるようです。
これらの拡張機能を使えば、計測するプログラムを開発できそうです。
また、BME280とマイコン間の通信は、I2C・SPIのいずれかを使いますが、これはBME280のCSBピンに加える電圧で切り替えます。I2C通信のアドレスは、0x76・0x77のいずれかです。くわしくは配線例で示します。
センサーの金属ケースに小さな穴があいていますが、これは「気圧」計測用のもので、ふさいだり水を入れたりしないでください。
製品例
BME280は、2.5mm角と非常に小さいので、コンデンサーや抵抗なども搭載したブレイクアウトボードとして販売されているものを利用した方が便利です。あるいは、モジュールシステムの規格コネクタなど使うものなどもあります。以下、主なものを紹介します。
スイッチサイエンス
micro:bitを始めとした小型ボードコンピューターや関連機器を販売しているスイッチサイエンスから「BME280搭載 温湿度・気圧センサモジュール」というブレイクアウトボードが販売されています。I2C・SPIに対応していて外部配線で設定します。
秋月電子通商
電子部品の通信販売で人気の秋月電子通商からも「BME280使用 温湿度・気圧センサモジュールキット」というブレイクアウトボードが販売されています。I2C・SPIなどの設定は基板上の半田ジャンパーを使って行います。
リンク:「BME280使用 温湿度・気圧センサモジュールキット」
GY-BME280-3.3
amazonやAliExpressなどで、「BME280」をキーワードに検索すると、いくつもヒットします。中でも多いのが「GY-BME280-3.3」というブレイクアウトボードです。気圧専用の「BMP280」というのと紛らわしい上に値段もまちまちなので、注意して購入してください。
※筆者はAliExpressの「GREAT WALL Electronics Co., Ltd.」というストアでを購入しました(購入した当時に比べると価格がかなりアップしています)。
リンク:「GY-BME280-3.3精度高度計大気圧力BME280センサーモジュール」
GROVE - 温湿度・気圧センサ(BME280)
Seeed社のGROVEシステム用にもBME280を用いたものが販売されています。Arduinoなど5V系マイコンにも接続できるよう、降圧レギュレターも搭載しています。micro:bit用のGROVEボードに専用ケーブルを使って簡単に接続することができます。既にGROVEボードを持っている方は便利です。スイッチサイエンスで扱いがあります。
リンク:「GROVE - 温湿度・気圧センサ(BME280)」
weather:bitなど
micro:bitの拡張ボードの中には、環境計測を目的としたものがあります。その一つに、SparkFunの「weather:bit」があり、ボード上には温湿度・気圧計測のためBME280が搭載されています。合わせて風力計や雨量計も接続可能になっています。weather:bitについては国内ではスイッチサイエンスで扱いがあります。
リンク:「SparkFun weather:bit」(ボード単品)
リンク:「SparkFun micro:climate kit for micro:bit」(風力計・雨量計等付)
micro:bitでBME280を使う
説明したようにBME280を搭載した製品は様々です。ここではブレイクアウトボードを接続して使用する場合を例に説明します。
weathe:bit等の拡張ボードに関しては、それぞれの製品の説明書をご覧ください。
拡張機能
micro:bitプログラムをMakeCodeエディターで開発するとき、BME280用の拡張機能があると開発が容易になります。
MakeCodeエディターの「設定>拡張機能」で拡張機能のページに移動し、検索窓に「BME280」と入れ検索すると、次のように該当する拡張機能が表示されます。
このうち「BME280」という拡張機能をつかってみます。
接続方法
拡張機能「BME280」の説明をみると、micro:bitとの接続はI2C通信で行います。この場合のBME280とmicro:bitの結線をまとめてみました。
BME280 | micro:bit | 備 考 | |
電源 | VDD | 3V | |
GNG | GND | ||
I2C | SDI | P20(SDA) | micro:bitのSDA/SCLピンにはプルアップ抵抗が接続されているので、外付不要 |
SCK | P19(SCL) | ||
チップ選択 | CSB | 3V | 3VでI2Cモード |
アドレス設定 | SDO | GND | 0x76→GND (0x77→3V) |
デジタル部電源 | VDDIO | 3V |
表のような結線をすると、I2C通信(アドレス0x76)でmicro:bitと接続することができます。各ブレークボードごとの具体例を示します。
スイッチサイエンス製
スイッチサイエンス製のブレッドボードは、7本のピンが取り付けられ、BME280すべての端子と接続されています。
BME280のVDDは「Vcore」、VDDIOは「Vio」と印字されています。またVcoreとVioはボード上で繋がっていますので、別電圧で駆動させる必要がなければ、VCoreに3.3V電源をつないでください。
I2C通信で使用するときは「CSB」を3.3Vに接続します。デフォルトアドレス「0x76」とするの時は、「SDO」をGNDに接続します。
接続例を次に示します(プログラムはこの接続を前提にしています)。
秋月電子通商製
秋月電子通商製ブレイクアウトボードには、6本のピンが取り付けられています。基板上にはJ1~J3の「はんだジャンパ」で行うようになっています。これは基板上の「パッド」に「半田」を盛って短絡させる方法です。micro:bitとはI2C通信なのでJ3を短絡させ、VDDとCSBをつなぎます。
デフォルトアドレス「0x76」とする時は、「SDO」をGNDに接続します。回路図と接続例を図に示します。
GY-BME280-3.3
GY-BME280-3.3には、6本のピンを取り付けます。特にボード上にはジャンパーなどありません。SDA・SCLは10kΩ程度のプルアップ抵抗があらかじめ接続されています。
I2C通信でmicro:bitと接続するときは、「CSB」を3.3Vに接続します(内部でプルアップ抵抗を介し10kΩ抵抗でVCCに接続されているので、外付け配線は省略可能です)。デフォルトアドレス「0x76」とする時は、「SDO」をGNDに接続します。
プログラム例
今回は次の2つのプログラム例を紹介します。
「測定結果を5x5LEDに表示する」
「測定結果をシリアル通信でPCに送信する」
測定結果を5x5LEDに表示する
装置の動作確認も兼ねて、BME280の測定結果を、micro:bitの5x5LEDディスプレイに表示させてみます。温度・湿度・気圧のすべてを表示すると見にくいので、まずは「温度」だけ表示するプログラムを作って動作確認を行います。
拡張機能の読み込み
先に触れたように、MakeCodeエディターではBME280用の拡張機能は複数提供されていますが、今回は次の拡張機能を使用します。
この拡張機能を追加すると、道具箱に「BME280」が追加されます。
このようなブロックが追加されます。
プログラム
BME280の計測値(温度)をmicro:bitの5x5LEDディスプレイに表示する最もシンプルなプログラムです。
プログラムへのリンクはこちらです(https://makecode.microbit.org/_5YYKr15Vbe0a)。
「最初だけ」ブロック内
「最初だけ」ブロック内では、BME280の初期設定を行います。
「set address(0x76)」で接続しているBME280のI2Cアドレスを設定します。アドレスはBME280のSDOピンにかかる電圧で決まります。
「Power On」で、BME280を動作状態にします。初期化時点では「On」となっていますが、明示したほうがベターです。
「ずっと」ブロック内
BME280で計測した結果を表示する処理を行います。
「数を表示」ブロック内の「temperature(C)」はBME280の測定値のうち「温度(摂氏)」を返すブロックです。この部分でLEDディスプレイに測定値を表示します。約1000m秒(=1秒)ごとに計測値を表示するように「一時停止」ブロックを入れています。
実行例
BME280等との配線を行ったmicro:bitにプログラムを転送すると、表面のディスプレイに数値が表示されるようになります。室温と同じような数字が表示されるのを確認したら、BME280の金属ケースに指をあててみてください。体温により温まり若干高い温度が表示されたら、正常に動作していることがわかります。
動作がおかしいとき
速やかに電源を抜いて下さい。そのうえで配線等ハードウェア・プログラムの確認をして下さい。またmicro:BreadBoardのようにmicro:bit電源と別にブレッドボード用電源とが必要になる場合があります。
測定結果をシリアル通信でPCに送信する
micro:bitの5x5LEDディスプレイでは、表示できる文字数が限られているので、測定値を読みづらいという問題が生じます。測定することも大事ですが、同じように測定値をわかりやすく人に伝えることも重要です。
システムの構想
もっとも簡単な方法は、パソコンに測定データを送って表示させることです。micro:bitとパソコンはUSBケーブルでつながっているので、これを使ってシリアル通信でmicro:bitからデータをパソコンに送り表示させてみます。
せっかく広い表示領域を持つパソコンを使うので、計測値だけでなく、数字の意味を示すラベルや単位も合わせて表示したいと思います。こうすることで、温度・湿度・気圧をわかりやすく表示することができます。
今回、パソコン側はTeraTermなどの通信ソフトを使いますが、送られてきた文字列を表示するだけの機能なので、表示される内容はmicro:bit側で処理したうえで、送信する必要があります。システムは次のようなイメージです。
TeraTermのインストールや使用法など、詳しくは「リファレンス編:シリアル通信その1」を参照してください。
プログラム例
考えたシステムを元に作成したプログラムです。「シリアル通信 1行書き出す」ブロックを使うと、パソコン向けに指定する文字列を送信することができます。
プログラムへのリンクはこちらです(https://makecode.microbit.org/_F7ieMTEYRMef)。タイトル横の「Edit code」でMakeCodeエディターが開きます。
実行例
コードの入力が終わったら、BME280等と接続したmicro:bitに転送してください。
温度と湿度に関しては、場所の環境で大きく異なります。気圧に関しては気象庁が発表している各地の気象台の測定値とほとんど変わりませんでした。指などでBME280を暖めると「Temp:」の値が大きくなります。
実際に計測する場合は、設置場所や通風などにも配慮する必要があります。
まとめ
BME280環境センサーを用いることで、基本的な計測対象の「温度・湿度・気圧」を計測することができました。
これらの値を使うと、「不快指数」等も計算できます(関連リンク)。合わせて表示するのもよいでしょう。
「BME280で環境測定・その2」について
「その2」では、LCDやドットマトリックス表示器などに表示するプロジェクトに挑戦したいと思います(近日公開)。