使用 OpenSensors 监测空气质量:Arduino 与 Python 实战指南
简介
本教程将指导你如何使用 Arduino、Shinyei PPD‑42 颗粒物传感器和 OpenSensors MQTT 代理来监测室内空气质量。我们将一步步演示如何采集实时颗粒物数据,并安全地发布到公共数据流中。
项目背景
我们希望找到一种简单而强大的方法来评估工作场所的空气质量。选择 Shinyei PPD‑42 传感器是因为它价格实惠且易于使用,搭配 Arduino UNO 和基于 Linux 的主机(如树莓派)。该传感器可持续输出对健康有潜在风险的小颗粒物浓度,我们将这些数据持续发布到 OpenSensors 消息代理。
所需硬件
- Shinyei PPD‑42 传感器
- Arduino UNO
- Linux 电脑或树莓派
参考项目
本指南基于 DustDuino 项目,该项目已将 PPD‑42 与 Arduino 和 Wi‑Fi 集成。我们改编了其接线图和代码,使其适配 OpenSensors 环境。
首先,按照 DustDuino 说明的步骤 2 将传感器连接到 Arduino。然后从 GitHub 仓库下载 DustDuinoSerial.ino 草图,在 Arduino IDE 中打开并上传到 UNO。
通过打开 Arduino IDE 的串口监视器,验证传感器是否正常发送数据。
接下来,我们将使用一个轻量级 Python 脚本,利用 Mosquitto 客户端库,将 Arduino 的串口输出桥接到 OpenSensors 代理。
Python 环境验证
为确认 Python 已就绪,请创建一个名为 hi.py 的文件,内容如下:
print("Hello World")
在终端运行:
python hi.py
控制台应输出 Hello World。
连接 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 制作万能红外遥控器:分步指南
- DIY 数字身高仪:Arduino Nano + VL53L0X 激光测距 + OLED 显示
- 热敏电阻测温轻松上手:Arduino 分步实战教程
- 提升船用空气压缩机效率的实用策略
- 测量阻焊层厚度:实用指南
- 空气干燥机工作原理:守护压缩空气洁净高效
- 压缩空气污染物清除全指南:法规、污染源与净化方案
- 硅胶腕带:低成本被动采样器实现精准空气质量监测
- 先进碳基 NO₂ 传感器提升室内空气质量监测水平
- 室内空气质量差的隐性健康风险:不容忽视的沉默杀手
- 以物联网构建先进室内空气质量监测系统