LoginSignup
0

More than 3 years have passed since last update.

屋内環境を手軽にモニタリングする~⑤PPD42NSからPM2.5濃度をJavaで取得する(GPIO / Pi4J)~

Last updated at Posted at 2019-09-04

はじめに

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の濃度を取得できます。

一連の記事

このシリーズは、以下の記事から構成されます。
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. 後記

追記

[2019.11.16]
簡易ツールの最新情報は、こちらをご参照下さい。

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
0