はじめに
PM2.5濃度を測定するセンサーとして、安価なPPD42NSを使用します。これは検出結果をデジタル出力のHi/Loで出力して、所定の計算式でPM2.5濃度を算出します。本記事では、Raspberry Pi 3BのJavaのGPIOモジュールとしてPi4Jを使用して、PPD42NSからPM2.5濃度を取得するために作成したJavaライブラリppd42ns-driverの概要を紹介します。といっても、Githubの内容そのままです。実装の詳細や使い方のサンプルは、Githubのコードを参照して下さい。
PPD42NSとRaspberry Pi 3Bの接続
5V、GND、PM2.5、Txを以下の通り接続します。なお、こちらも参考になります。
-
Pins
of PPD42NS- Vin (pin#3 - Red)
- GND (pin#1 - Black)
- PM2.5 (pin#4 - Yellow)
-
GPIO of Raspberry Pi 3B
- Vin --> (2) or (4)
- GND --> (6), (9), (14), (20), (25), (30), (34) or (39)
- Tx --> (19) GPIO10, (38) GPIO20 or (8) GPIO14
なお、OSの設定については、前回の記事「屋内環境を手軽にモニタリングする~④MH-Z19BからCO2濃度をJavaで取得する(シリアル通信 / jSerialComm)~」を参照して下さい。
WiringPiインストール
Raspberry Pi 3BのGPIOを操作するJavaライブラリPi4Jを使用するにあたり、WiringPiというライブラリが必要になります。以下の通りにインストールします。
# apt-get update
# apt-get install wiringpi
Raspberry Pi 4Bで使用する場合は、最新版を以下のようにインストールします。こちらを参考にして下さい。
# wget https://project-downloads.drogon.net/wiringpi-latest.deb
# dpkg -i wiringpi-latest.deb
バージョンが2.52であることを確認して下さい。
# gpio -v
gpio version: 2.52
なお、2019年10月の時点で、Pi4JとWiringPiの組み合わせでRaspberry Pi 4Bを使用する公式な情報を確認していません。一応、簡単に動作することを確認しましたが、何らかの問題が発生するかもしれません。
サンプルコード
ppd42ns-driverの使い方のサンプルは以下の通りです。注意点として、一回の測定に約30秒かけていますので、センサーデータの読み出しppd42ns.read()
の戻りは、毎回30秒程度かかります。
import com.pi4j.io.gpio.Pin;
import com.pi4j.io.gpio.RaspiPin;
import io.github.s5uishida.iot.device.ppd42ns.driver.PPD42NSDriver;
import io.github.s5uishida.iot.device.ppd42ns.driver.PPD42NSObservationData;
public class MyPPD42NS {
private static final Logger LOG = LoggerFactory.getLogger(MyPPD42NS.class);
public static void main(String[] args) {
PPD42NSDriver ppd42ns = PPD42NSDriver.getInstance(RaspiPin.GPIO_10);
ppd42ns.open();
while (true) {
try {
PPD42NSObservationData data = ppd42ns.read();
LOG.info("[{}] {}", ppd42ns.getName(), data.toString());
} catch (IOException e) {
LOG.warn("caught - {}", e.toString());
}
}
// if (ppd42ns != null) {
// ppd42ns.close();
// }
}
}
ppd42ns.read()
で返るデータの詳細は、こちらのクラスを参照して下さい。pcs/0.01cf
とμg/m^3
の二つの単位でPM2.5の濃度を取得できます。
一連の記事
このシリーズは、以下の記事から構成されます。
- 動機とコンセプト
-
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はこちら。 - 後記
追記
[2019.11.16]
簡易ツールの最新情報は、こちらをご参照下さい。