[I2C] 温湿度大気圧センサー (BME280)

温度、湿度、大気圧を測れるセンサーです。



購入

Amazon 等で購入できます (購入時価格: ¥550)。紛らわしいですが、BMP280 ではありません。Pの方には湿度センサーがないので注意してください。



各部詳細

以下、 温湿度大気圧センサーの詳細です。裏面のシルク印刷のまんまです。



動作確認

Arduino (UNO) との接続は以下のようになります。

I2C 接続

I2C BME280 Arduino (UNO)
1 VCC 5V
2 GND GND
SCL 3 SCL A5 / SCL
SDA 4 SDA A4 / SDA
5 CSB (未接続)
6 SD0 GND or VCC

I2C 接続の場合、SD0 を GND に接続するか VCC に接続するかで I2C アドレスが変わります。

GND (LOW) VCC (HIGH)
0x76 0x77

SD0 を未結線状態にしてはいけません。必ず GND か VCC に接続する必要があります。また、UNO 等の5V 系の Arduino を使う場合には信号レベルが違うのでレベル変換を行わなくてはなりません。

See Also:

SPI 接続

SPI BME280 Arduino (UNO)
1 VCC 5V
2 GND GND
SCK 3 SCL D13 / SCK
MOSI 4 SDA D11 / MOSI
SS 5 CSB D10 / SS
MISO 6 SD0 D12 / MISO

UNO 等の5V 系の Arduino を使う場合には信号レベルが違うのでレベル変換を行わなくてはなりません。

See Also:


BME280 ライブラリ

以下のライブラリをインストールします。

SparkFun のがそのまま使えます...が、AVR 以外のコンパイラだとエラーが出てコンパイルできないかもしれません。SparkFunBME280.cpp を以下のように書き換えてください。

uint8_t BME280::readRegister(uint8_t offset)
{
        //Return value
        uint8_t result = 0// <- 0 で初期化
        uint8_t numBytes = 1;
        switch (settings.commInterface) {

        ...

サンプルスケッチ (I2C 接続)

以下の記事にあるサンプルスケッチを改変して使います (元記事はフランス語なので)。

#include "SparkFunBME280.h"
#include "Wire.h"
#include "SPI.h"

BME280 Sensor;

void setup() {
  Serial.begin(115200);
  while (!Serial);

  Sensor.settings.commInterface = I2C_MODE; 
  Sensor.settings.I2CAddress = 0x76;
  Sensor.settings.runMode = 3; 
  Sensor.settings.tStandby = 0;
  Sensor.settings.filter = 0;
  Sensor.settings.tempOverSample = 1 ;
  Sensor.settings.pressOverSample = 1;
  Sensor.settings.humidOverSample = 1;

  Serial.println("Starting BME280... ");
  delay(10);
  Sensor.begin();
}

void loop() {
  Serial.print("Temperature: ");
  Serial.print(Sensor.readTempC(), 2);
//  Serial.print(" ");
//  Serial.print((char)223);
//  Serial.print("C");
  Serial.print(" ℃");
  Serial.print("\t Pressure: ");
  Serial.print(Sensor.readFloatPressure() / 1002);
  Serial.print(" hPa");
  Serial.print("\t Humidity: ");
  Serial.print(Sensor.readFloatHumidity(), 2);
  Serial.println(" %");
  delay(1000);
}

改変と言っても英語に直して、大気圧の単位をパスカルからヘクトパスカルに変更したくらいです。

修正したライブラリを使えば ESPr Developer 32 で動作する事を確認しました。


サンプルスケッチ (SPI 接続)

SPI 接続でのサンプルスケッチです。

#include "SparkFunBME280.h"
#include "Wire.h"
#include "SPI.h"

BME280 Sensor;

void setup() {
  Serial.begin(115200);
  while (!Serial);

  Sensor.settings.commInterface = SPI_MODE; 
  Sensor.settings.chipSelectPin = SS;
  Sensor.settings.runMode = 3; 
  Sensor.settings.tStandby = 0;
  Sensor.settings.filter = 0;
  Sensor.settings.tempOverSample = 1 ;
  Sensor.settings.pressOverSample = 1;
  Sensor.settings.humidOverSample = 1;

  Serial.println("Starting BME280... ");
  delay(10);
  Sensor.begin();
}

void loop() {
  Serial.print("Temperature: ");
  Serial.print(Sensor.readTempC(), 2);
//  Serial.print(" ");
//  Serial.print((char)223);
//  Serial.print("C");
  Serial.print(" ℃");
  Serial.print("\t Pressure: ");
  Serial.print(Sensor.readFloatPressure() / 1002);
  Serial.print(" hPa");
  Serial.print("\t Humidity: ");
  Serial.print(Sensor.readFloatHumidity(), 2);
  Serial.println(" %");
  delay(1000);
}

I2C 接続と異なるのは2行だけです。

こちらも修正したライブラリを使えば ESPr Developer 32 で動作する事を確認しました。


ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。

メニュー: