以前、こちらの記事で紹介した、環境情報をモニタリングする簡易ツールは、温度、湿度、気圧の各情報をテキサス・インスツルメンツ社のSensorTag CC2650から取得します。ただ、BLE環境センサータグとして、永らく世界的に知られたSensorTag CC2650は生産中止のため、今後、入手が困難になると思われます。そこで、別のセンサーにも対応することにしました。
※2020年12月16日現在、SensorTag CC2650の生産中止の記述が見当たりません。以前、そのような記述を見かけたと記憶しているのですが…。なお、上記「テキサス・インスツルメンツ社のSensorTag CC2650」でリンクしたURLのWikiは、2021年1月15日にサポートを終了するそうで、必要なファイルやその他のコンテンツをダウンロードすることをお勧めします、とのことです。
世間には、温湿度センサーは数多く存在し、どれを選べばよいか正直悩みます。ちょうどその時、参考になる情報を見付け、結果、BoschのBME280を選択しました。手頃な価格であり、数百円で入手できます。
BME280センサーとは
このセンサーは、温度、湿度、気圧を測定することができます。なお、温度は気圧の測定値を補正する用途がメインのようですが、折角なので値そのものも利用します。インターフェースはI2CとSPIに対応していますが、ここではI2Cを使います。I2Cアドレスには、0x76
or0x77
のいずれかを指定することができます。また、Raspberry Pi 3B or 4BのI2Cバスは、0
と1
の二つありますので、Raspberry Pi 3B or 4Bでは、BME280を最大4個、同時に使用することができます。
作成した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で公開しています。
一連の記事
このシリーズは、以下の記事から構成されます。
- 動機とコンセプト
-
Bluetooth LEアドバタイズ信号をJavaでキャッチする(Bluetooth LE / bluez-dbus)
関連するGithubはこちら。 -
TI SensorTag CC2650から温度/湿度/照度などをJavaで取得する(Bluetooth LE / bluez-dbus)
関連するGithubはこちら。 -
MH-Z19BからCO2濃度をJavaで取得する(シリアル通信 / jSerialComm)
関連するGithubはこちら。 -
PPD42NSからPM2.5濃度をJavaで取得する(GPIO / Pi4J)
関連するGithubはこちら。 -
産業オートメーション機器の稼動情報をJavaで取得する(OPC-UA / Eclipse Milo)
関連するGithubはこちら。 -
簡易ツールにまとめる
関連するGithubはこちら。 - 後記
-
モーション検知(HC-SR501 / RCWL-0516)をJavaで取得する(GPIO / Pi4J)
関連するGithubはこちら(HC-SR501)とこちら(RCWL-0516)。 -
BME280(代用)から温度/湿度/気圧をJavaで取得する(I2C / Pi4J)(今回)
関連するGithubはこちら。 -
BH1750FVI(代用)から照度をJavaで取得する(I2C / Pi4J)
関連するGithubはこちら。