2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

屋内環境を手軽にモニタリングする~⑩BME280(代用)から温度/湿度/気圧をJavaで取得する(I2C / Pi4J)~

Last updated at Posted at 2020-03-31

以前、こちらの記事で紹介した、環境情報をモニタリングする簡易ツールは、温度、湿度、気圧の各情報をテキサス・インスツルメンツ社のSensorTag CC2650から取得します。ただ、BLE環境センサータグとして、永らく世界的に知られたSensorTag CC2650は生産中止のため、今後、入手が困難になると思われます。そこで、別のセンサーにも対応することにしました。

※2020年12月16日現在、SensorTag CC2650の生産中止の記述が見当たりません。以前、そのような記述を見かけたと記憶しているのですが…。なお、上記「テキサス・インスツルメンツ社のSensorTag CC2650」でリンクしたURLのWikiは、2021年1月15日にサポートを終了するそうで、必要なファイルやその他のコンテンツをダウンロードすることをお勧めします、とのことです。

世間には、温湿度センサーは数多く存在し、どれを選べばよいか正直悩みます。ちょうどその時、参考になる情報を見付け、結果、BoschのBME280を選択しました。手頃な価格であり、数百円で入手できます。

BME280センサーとは

このセンサーは、温度、湿度、気圧を測定することができます。なお、温度は気圧の測定値を補正する用途がメインのようですが、折角なので値そのものも利用します。インターフェースはI2CとSPIに対応していますが、ここではI2Cを使います。I2Cアドレスには、0x76or0x77のいずれかを指定することができます。また、Raspberry Pi 3B or 4BのI2Cバスは、01の二つありますので、Raspberry Pi 3B or 4Bでは、BME280を最大4個、同時に使用することができます。
rainy_bme280_floor.png

作成したBME280のJavaライブラリ(bme280-driver)はGithubで公開しています。OSとセンサーの設定手順も書いておきました。また、このライブラリを組み込んだ環境情報モニタリングの簡易ツールは、こちらのGithubで公開しています。

Javaライブラリの基本的な使い方

bme280-driverの簡単な使い方を掲載します。以下のサンプルコードでは、I2Cバス=1、アドレス=0x76を指定しています。

import com.pi4j.io.i2c.I2CBus;

import io.github.s5uishida.iot.device.bme280.driver.BME280Driver;

public class MyBME280 {
    private static final Logger LOG = LoggerFactory.getLogger(MyBME280.class);
    
    public static void main(String[] args) {
        BME280Driver bme280 = null;
        try {
            bme280 = BME280Driver.getInstance(I2CBus.BUS_1, BME280Driver.I2C_ADDRESS_76);
            bme280.open();
            
            while (true) {
                float[] values = bme280.getSensorValues();
                LOG.info("temperature:" + values[0]);
                LOG.info("humidity:" + values[1]);
                LOG.info("pressure:" + values[2]);
                
                Thread.sleep(10000);
            }
        } catch (InterruptedException e) {
            LOG.warn("caught - {}", e.toString());
        } catch (IOException e) {
            LOG.warn("caught - {}", e.toString());
        } finally {
            if (bme280 != null) {
                bme280.close();
            }
        }
    }
}

このように使い方はシンプルです。なお、Pi4JというRaspberry PiのGPIOを使用するためのJavaライブラリを使用して作成しました。

最後に

このJavaライブラリを組み込んだ簡易ツールには、各センサー値をダッシュボードでモニタリングする機能とJSON形式でMQTTブローカに送信する機能があります。

最後に、簡易ツールはこちらのGithubで公開しています。

一連の記事

このシリーズは、以下の記事から構成されます。

  1. 動機とコンセプト
  2. Bluetooth LEアドバタイズ信号をJavaでキャッチする(Bluetooth LE / bluez-dbus)
     関連するGithubはこちら
  3. TI SensorTag CC2650から温度/湿度/照度などをJavaで取得する(Bluetooth LE / bluez-dbus)
     関連するGithubはこちら
  4. MH-Z19BからCO2濃度をJavaで取得する(シリアル通信 / jSerialComm)
     関連するGithubはこちら
  5. PPD42NSからPM2.5濃度をJavaで取得する(GPIO / Pi4J)
     関連するGithubはこちら
  6. 産業オートメーション機器の稼動情報をJavaで取得する(OPC-UA / Eclipse Milo)
     関連するGithubはこちら
  7. 簡易ツールにまとめる
     関連するGithubはこちら
  8. 後記
  9. モーション検知(HC-SR501 / RCWL-0516)をJavaで取得する(GPIO / Pi4J)
     関連するGithubはこちら(HC-SR501)こちら(RCWL-0516)
  10. BME280(代用)から温度/湿度/気圧をJavaで取得する(I2C / Pi4J)(今回)
     関連するGithubはこちら
  11. BH1750FVI(代用)から照度をJavaで取得する(I2C / Pi4J)
     関連するGithubはこちら
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?