OpenSensorsで空気質を測定: ArduinoとPythonによるガイド
Arduino、Shinyei PPD-42粒子センサー、OpenSensors MQTTブローカーを使用して室内空気質を監視する方法を学びます。このステップバイステップチュートリアルでは、リアルタイムで微粒子データを収集し、安全にパブリックデータストリームに公開する方法を実演します。
はじめに
このプロジェクトでは、職場の空気質を評価するシンプルかつ強力な方法を求めていました。Shinyei PPD-42センサーはその安価さと使いやすさから選択し、Arduino UNOとLinuxベースのホスト(Raspberry Piなど)と組み合わせました。このセンサーは健康リスクをもたらす微小粒子の濃度をストリーミングし、そのデータをOpenSensorsメッセージングブローカーに継続的に公開します。
必要なもの
- Shinyei PPD-42センサー
- Arduino UNO
- LinuxコンピューターまたはRaspberry Pi
このガイドはDustDuinoプロジェクトに従っています。これはPPD-42をArduinoとWi-Fiで統合するものです。その配線図とコードをOpenSensorsのセットアップで動作するように適応させました。
まず、DustDuinoの手順ステップ2に従ってセンサーをArduinoに接続します。次にGitHubリポジトリからDustDuinoSerial.inoスケッチをダウンロードし、Arduino IDEで開いてUNOにアップロードします。
Arduino IDEのシリアルモニターを開いて、センサーがデータを送信しているか確認します。
次に、Mosquittoクライアントライブラリを活用した軽量なPythonスクリプトを使用して、Arduinoのシリアル出力をOpenSensorsブローカーにブリッジします。
Hello Python World
マシンでPythonの準備ができているか確認するため、以下の内容でhi.pyというファイルを作成します:
print("Hello World")
ターミナルから実行します:
python hi.py
コンソールにHello Worldが表示されるはずです。
Hello OpenSensors
まだインストールしていない場合は、Mosquitto Pythonクライアントをインストールします:
sudo apt-get install python-pip
sudo pip install paho-mqtt
以下の最小限のスクリプトでOpenSensorsへの公開をテストします(Louisとパスワードを自分の認証情報に置き換えてください):
import paho.mqtt.client as mqtt
mqttc = mqtt.Client(client_id="939")
mqttc.username_pw_set("Louis", password="AbcDEFgH")
mqttc.connect("mqtt.opensensors.io")
mqttc.publish("/users/Louis/test2", payload="Hello Opensensors!", qos=0, retain=False)
mqttc.disconnect()
正常に実行されると、OpenSensorsコンソールにメッセージが表示されます。
Arduinoのシリアルポートに接続するには、以下でデバイスを特定します:
dmesg | grep tty
典型的な出力は以下のようになります:
[ 0.000000] console [tty0] enabled
[ 3522.192687] cdc_acm 7-1:1.0: ttyACM0: USB ACM device
ここで/dev/ttyACM0が使用するシリアルポートです。
Pythonでシリアルデータを読み取ります:
import serial
ser = serial.Serial('/dev/ttyACM0')
while True:
print(ser.readline())
センサー出力とMQTTの統合
シリアルリーダーとMQTTパブリッシャーを単一のスクリプトに統合します。以下の例では、センサーデータの各行をトピック/users/Louis/ODI/airqualityに毎秒公開します:
import serial
import paho.mqtt.client as mqtt
import time
mqttc = mqtt.Client(client_id="939")
mqttc.username_pw_set("Louis", password="AbcDEFgH")
mqttc.connect("mqtt.opensensors.io")
ser = serial.Serial('/dev/ttyACM0') # ポートが異なる場合は調整
while True:
message = ser.readline()
print(message)
mqttc.publish("/users/Louis/ODI/airquality", payload=message, qos=0, retain=False)
time.sleep(1)
ダウンストリーム処理を容易にするため、Arduinoの出力をJSON形式に整形してから公開することを検討してください。
作成したトピックにアクセスしてこちらでOpenSensorsのデータストリームを確認できます。
完全なコード例
import serial
import paho.mqtt.client as mqtt
import time
mqttc = mqtt.Client(client_id="939")
mqttc.username_pw_set("Louis", password="AbcDEFgH")
mqttc.connect("opensensors.io")
ser = serial.Serial('/dev/ttyACM0') # 最初のシリアルポートを開く
while True:
message = ser.readline()
print(message)
mqttc.publish("/users/Louis/ODI/airquality", payload=message, qos=0, retain=False)
time.sleep(1)
出典: How to Measure Air Quality on OpenSensors
製造プロセス
- Heliumベースのソーラー駆動空気質センサー:設計と導入ガイド
- ArduinoでユニバーサルIRリモコンを自作:ステップバイステップガイド
- サーミスタを使った温度測定: Arduinoステップバイステップガイド
- 船舶エアコンプレッサー効率向上:実証済み戦略
- はんだマスク厚さの測定:実践ガイド
- エアドライヤーの仕組み:圧縮空気を清潔かつ効率的に保つ
- 圧縮空気からコンタミネーションを除去する包括ガイド:規制、汚染物質、ろ過・アフタークーリング対策
- シリコーンリストバンドが受動サンプラーとして大気質モニタリングに有効─ 妊娠期曝露評価への応用
- 先進カーボンベースNO₂センサーが室内空気質モニタリングを強化
- 室内空気質の悪化がもたらす隠れた健康リスクとIoTによる対策
- IoTで構築する高度な室内空気質監視システム