知的好奇心 for IoT

IoT関連の知的好奇心を探求するブログです

aitendoで売っているボッシュの温湿度・気圧センサBME280と温度・気圧センサBMP280を使ってみる

秋葉原のパーツ屋さんと言えば、秋月電子さんや千石電商さん、マルツさんが有名だと思います。

でも、他にもあったんです。ディープな(中華系の)お店が。

ぼくが知らなかっただけで、結構前からあったのがaitendoさんです。上の3店は近くにあるのですが、このお店は末広町方面にあって少し離れている場所にあるため、最近まで気づいていませんでした。

このお店、中華系なだけあって他のお店で置いていない日本で流通していない部品が置いてあるのが気に入っているのですが、キット商品が豊富な他、なんといってもお店が広い!じっくり商品を選ぶことができます。

 

BME280とBMP280

ブログでは秋月電子さんの「BME280使用 温湿度・気圧センサモジュールキット」を紹介していましたが、まぁまぁいい値段がする(税込み1,080円)のと無茶苦茶半田付けしづらいはんだジャンパを3つも付ける必要があったり(I2Cで使うから)して、う~ん...っといったところがありました。

これを一気に解決する部品をaitendoさんで見つけたんです。

温湿度・気圧センサモジュール [BME280-6P]

値段は税別795円でプルアップ抵抗実装済みの他、ピンヘッダーまで半田付けされていてそのまま使うことができます!

また、ピン配置は全く同一でとんでもなくリーズナブルな価格(税別295円)だけれど、湿度が計れないBMP280も売っていました。(BMP280はピンヘッダーが半田付けされていません。)

温度・気圧センサモジュール [BMP280-6P]

f:id:IntellectualCuriosity:20180409235651j:plain

BME280の表と裏

f:id:IntellectualCuriosity:20180409235725p:plain

BMP280の表と裏

なぜかBME280とBMP280の裏のマーキングが上下逆さになっていますが、ピン配置は一緒です。

ピンの意味は秋月電子さんのBME280のマニュアルに書いてあり、I2Cで使う場合は次のようにします。

(2019/10/5更新)

  • SDO --- 使いません。I2Cのアドレス選択。3V3(VCC)に繋いで0x77にします。
  • CSB --- 使いません。
  • SDA --- I2CのSDA信号線。
  • SCL --- I2CのSCL信号線。
  • GND --- GND(マイナス電源)に接続。
  • 3V3 (VCC) --- 3V3(プラス電源)に接続。

SDOを3V3に繋いでI2Cのアドレスを0x77にするのは、センサのライブラリにAdafruitのライブラリを使用するためです。

センサーの初期化メソッドでアドレスが指定できるようになっていました。bme.begin(0x76); // SDO GND(Open):0x76 VDD:0x77

SDOはプルダウンされているので、何も継がないとGNDになります。

 

センサのライブラリ

BME280やBMP280のArduino用ライブラリは色々ありますが、ぼくはAdafruitのライブラリを愛用しています。

f:id:IntellectualCuriosity:20180410030927p:plain

BME280用ライブラリ

f:id:IntellectualCuriosity:20180410031030p:plain

BMP280用ライブラリ

どちらのライブラリも共通のライブラリを一緒に取り込んでおく必要があります。

f:id:IntellectualCuriosity:20180410032321p:plain

共通のライブラリ

 

スケッチ

ライブラリを入れるとスケッチ例がArduinoで見れるようになるので、スケッチ例を参考にしてプログラムを書くといいですよ。

スケッチ例を少しアレンジしたサンプルスケッチを紹介しておきますね。

 

BME280のスケッチ例(ぼくバージョン)(2019/10/5更新)

#include <wire.h>
#include <adafruit_bme280.h>

// Select I2C sensor pin
#define I2C_SCL 5    // GPIO5
#define I2C_SDA 4    // GPIO4
Adafruit_BME280 bme;

void setup() {
  Serial.begin(74880);
  Wire.begin(I2C_SDA, I2C_SCL);
  if (!bme.begin(0x76)) { // SDO GND(Open):0x76 VDD:0x77
      Serial.println("Could not find a valid BME280 sensor, check wiring!");
      while (1); // Hung up!
  }
  delay(100); // let sensor boot up
}

void loop() {
  // Get data from BME280 sensor
  float t = bme.readTemperature();       // C
  float h = bme.readHumidity();          // %
  float p = bme.readPressure() / 100.0F; // hPa
  Serial.print("Temperature:");
  Serial.println(t);
  Serial.print("Humidity:");
  Serial.println(h);
  Serial.print("Pressure:");
  Serial.println(p);
  Serial.println();
  delay(2000);
}

 

BMP280のスケッチ例(ぼくバージョン)(2019/10/5更新)

#include <wire.h>
#include <adafruit_bmp280.h>

// Select I2C sensor pin
#define I2C_SCL 5    // GPIO5
#define I2C_SDA 4    // GPIO4
Adafruit_BMP280 bmp; // I2C

void setup() {
  Serial.begin(74880);
  Wire.begin(I2C_SDA, I2C_SCL);
  if (!bmp.begin(0x76)) { // SDO GND(Open):0x76 VDD:0x77
      Serial.println("Could not find a valid BMP280 sensor, check wiring!");
      while (1); // Hung up!
  }
  delay(100); // let sensor boot up
}

void loop() {
  // Get data from BMP280 sensor
  float t = bmp.readTemperature();       // C
  float p = bmp.readPressure() / 100.0F; // hPa
  Serial.print("Temperature:");
  Serial.println(t);
  Serial.print("Pressure:");
  Serial.println(p);
  Serial.println();
  delay(2000);
}