以前、こちらの記事で紹介した、環境情報をモニタリングする簡易ツールは、照度の情報をテキサス・インスツルメンツ社のSensorTag CC2650から取得します。ただ、BLE環境センサータグとして、永らく世界的に知られたSensorTag CC2650は生産中止のため、今後、入手が困難になると思われます。そこで、別のセンサーにも対応することにしました。
※2020年12月16日現在、SensorTag CC2650の生産中止の記述が見当たりません。以前、そのような記述を見かけたと記憶しているのですが…。なお、上記「テキサス・インスツルメンツ社のSensorTag CC2650」でリンクしたURLのWikiは、2021年1月15日にサポートを終了するそうで、必要なファイルやその他のコンテンツをダウンロードすることをお勧めします、とのことです。
今回、新たな照度センサーとして、ROHMのBH1750FVIを選択しました。手頃な価格であり、数百円で入手できます。
BH1750FVIセンサーとは
このセンサーは、照度を測定することができます。インターフェースはI2Cで、I2Cアドレスには、0x23
or0x5c
のいずれかを指定することができます。また、Raspberry Pi 3B or 4BのI2Cバスは、0
と1
の二つありますので、Raspberry Pi 3B or 4Bでは、BH1750FVIを最大4個、同時に使用することができます。
作成したBH1750FVIのJavaライブラリ(bh1750fvi-driver)はGithubで公開しています。OSとセンサーの設定手順も書いておきました。また、このライブラリを組み込んだ環境情報モニタリングの簡易ツールは、こちらのGithubで公開しています。
Javaライブラリの基本的な使い方
bh1750fvi-driverの簡単な使い方を掲載します。以下のサンプルコードでは、I2Cバス=1
、アドレス=0x23
を指定しています。
import com.pi4j.io.i2c.I2CBus;
import io.github.s5uishida.iot.device.bh1750fvi.driver.BH1750FVIDriver;
public class MyBH1750FVI {
private static final Logger LOG = LoggerFactory.getLogger(MyBH1750FVI.class);
public static void main(String[] args) {
BH1750FVIDriver bh1750fvi = null;
try {
bh1750fvi = BH1750FVIDriver.getInstance(I2CBus.BUS_1, BH1750FVIDriver.I2C_ADDRESS_23);
bh1750fvi.open();
while (true) {
float value = bh1750fvi.getOptical();
LOG.info("optical:" + value);
Thread.sleep(10000);
}
} catch (InterruptedException e) {
LOG.warn("caught - {}", e.toString());
} catch (IOException e) {
LOG.warn("caught - {}", e.toString());
} finally {
if (bh1750fvi != null) {
bh1750fvi.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はこちら。