
ESP32を用いて複数のBME280を実装したので、そのやり方について紹介したいと思います。
この記事を読むことで、1台のマイコンで2台のBME280を動かせるようになります。
今回使用しているマイコンやセンサの説明に関しては、こちらの記事で細かく説明していますので、今回は省きます。
Arduino Nano版はこちら
www.takeshi-1222.com
BME280をI2Cで2台繋げる方法
下図のように、通常でははんだが3か所ついているのですが、この内の真ん中と右をはんだブリッジさせる必要があります。

理由としては、同一のIOピンから複数のセンサにアクセスするために、I2Cのアドレスを変更する必要があるからです。
デフォルトでは、0x77というアドレスになっているようですが、ここを下図のようにブリッジさせることで0x76に変更することができます。

これにより、複数のセンサを使えるようになるのです。
実験構成
今回の実験に使用する部品は以下のものです。
- ESP32
- 温湿度センサ (BME280)*2
- ジャンパ線多数
実験
配線
まず配線は以下のようにします。

配線ができると以下のような画像のようになります。

実行コード
ここまで出来たら以下のコードを実行することで動作確認ができます。
#include <Wire.h>
#include "SparkFunBME280.h"
BME280 mySensorA;
BME280 mySensorB;
int flag;
void setup()
{
Serial.begin(9600);
Serial.println("Example showing alternate I2C addresses");
flag = 0;
Wire.begin();
mySensorA.setI2CAddress(0x76);
if(mySensorA.beginI2C() == false) Serial.println("Sensor A connect failed");
mySensorB.setI2CAddress(0x77);
if(mySensorB.beginI2C() == false) Serial.println("Sensor B connect failed");
}
void loop()
{
Serial.print("HumidityA ");
Serial.print(mySensorA.readFloatHumidity(), 2);
Serial.print(" TempA ");
Serial.print(mySensorA.readTempC(), 2);
Serial.print(" DiscomfortA ");
Serial.print(0.81*mySensorA.readTempC()+0.01*mySensorA.readFloatHumidity()*(0.99*mySensorA.readTempC()-14.3)+46.3, 4);
Serial.print(" HumidityB ");
Serial.print(mySensorB.readFloatHumidity(), 2);
Serial.print(" TempB ");
Serial.print(mySensorB.readTempC(), 2);
Serial.print(" DiscomfortB ");
Serial.print(0.81*mySensorB.readTempC()+0.01*mySensorB.readFloatHumidity()*(0.99*mySensorB.readTempC()-14.3)+46.3, 4);
Serial.println();
delay(1000);
}
出力結果は、下図のようなものが出ます。

まとめ
今回は、ESP32で2台のBME280を動かしました。BME280は2つしかアドレスを持てないようなので、最大でも2台まで (拡張すればもっといけると思いますが)しか動かせません。しかし、1つのマイコンで2か所の温度計測ができるのはなかなか便利なのではないでしょうか。