3人と1匹の日常とモノづくりブログ

興味のあるものをとりあえず動かしてみた、実装してみたシリーズをガンガン上げていきたいと思います。あくまでも自身の備忘録としてですが、誰かの助けになったらうれしいです。

【低価格マイコン】【実装】Arduino Nanoで複数のBME280 (温湿度センサ)を動かす

f:id:bamboomush:20210206213328p:plain

 Arduino Nanoを用いて複数のBME280を実装したので、そのやり方について紹介したいと思います。

この記事を読むことで、1台のマイコンで2台のBME280を動かせるようになります。

 

今回使用しているマイコンやセンサの説明に関しては、こちらの記事で細かく説明していますので、今回は省きます。

 

ESP32版はこちら

www.takeshi-1222.com

 

◆Arduino関係の実装記事◆ 
  • DCモータ実装

www.takeshi-1222.com

  •  サーボモータ実装

www.takeshi-1222.com

  • OLED実装

www.takeshi-1222.com

  • 超音波センサ実装

www.takeshi-1222.com

  • LCD実装

www.takeshi-1222.com

  • 温湿度センサ (低コスト)

www.takeshi-1222.com

  • 温湿度センサ (ハイスペック)

www.takeshi-1222.co

  • CO2センサ 

www.takeshi-1222.com

  • ほこりセンサ

www.takeshi-1222.com

 

 

 

 

BME280をI2Cで2台繋げる方法

下図のように、通常でははんだが3か所ついているのですが、この内の真ん中と右をはんだブリッジさせる必要があります。

f:id:bamboomush:20210206214025j:plain

理由としては、同一のIOピンから複数のセンサにアクセスするために、I2Cのアドレスを変更する必要があるからです。

デフォルトでは、0x77というアドレスになっているようですが、ここを下図のようにブリッジさせることで0x76に変更することができます。

f:id:bamboomush:20210206214111j:plain

これにより、複数のセンサを使えるようになるのです。

 

実験構成

 今回の実験に使用する部品は以下のものです。
  • Arduino Nano
  • 温湿度センサ (BME280)*2
  • ジャンパ線多数

実験

配線

まず配線は以下のようにします。

f:id:bamboomush:20210207144315p:plain

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

f:id:bamboomush:20210206214215j:plain

実行コード

ここまで出来たら以下のコードを実行することで動作確認ができます。

#include <Wire.h>

#include "SparkFunBME280.h"
BME280 mySensorA; //Uses default I2C address 0x77
BME280 mySensorB; //Uses I2C address 0x76 (jumper closed)
int flag;
void setup()
{
  Serial.begin(9600);
  Serial.println("Example showing alternate I2C addresses");
  flag = 0;
  Wire.begin();
  mySensorA.setI2CAddress(0x76); //The default for the SparkFun Environmental Combo board is 0x77 (jumper open).
  //If you close the jumper it is 0x76
  //The I2C address must be set before .begin() otherwise the cal values will fail to load.

  if(mySensorA.beginI2C() == false) Serial.println("Sensor A connect failed");

  mySensorB.setI2CAddress(0x77); //Connect to a second sensor
  if(mySensorB.beginI2C() == false) Serial.println("Sensor B connect failed");
}

void loop()
{
  //if(flag == 0){
  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);
}

出力結果は、下図のようなものが出ます。

f:id:bamboomush:20210206214405j:plain

まとめ

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