如何在 OpenSensors 上测量空气质量
如何使用 Arduino 和 Shinyei PPD-42 测量开放数据研究所的空气质量。
图>简介
因此,在考虑 Opensensors 平台的一个很好的演示时,我们想为什么不通过连接一个传感器来向 Opensensors 消息传递代理发布连续数据流来了解我们的工作场所是如何被污染的。为此,我们需要一个易于拿起和使用的传感器,我们选择了 Shinyei PPD-42。我们将使用它来测量空气中潜在危险小颗粒的数量,将 arduino 连接到 linux PC(或 Raspberry PI)。
要运行这个小项目,您需要:
- Shinyei PPD-42
- Arduino UNO
- 安装了 Linux 的计算机(您可以使用 Raspberry PI)
我们基于一个名为 DustDuino 的项目进行此演练,该项目使用带有 arduino 和 wifi 模块的 Shinyei PPD-42 传感器。在这里查看。我们在设置传感器和编写Arduino代码时使用了这个项目作为我们的参考。
首先,我们按照将传感器连接到 Arduino 的说明的第 2 步进行操作。然后我们通过打开代码 DustDuinoSerial.ino 的链接,选择 raw 并保存该页面,从项目 github 存储库下载代码。
在 arduino IDE 中打开它,我们现在通过连接 Arduino 并按上传将其上传到我们的 Arduino UNO。
您可以使用 Arduino IDE 的串行监视器检查数据是否传入。
然后我们需要弄清楚如何将传入的串行消息发送到 Opensensors 消息代理。
为此,我们选择编写一个 Python 脚本。我们使用了 Mosquitto Python 模块。我将假设您已经安装了 Python,因为它已预先打包在大多数 Linux 版本中。如果你还没有,你需要安装 pip 来下载和设置 Mosquitto python 模块。在 Ubuntu 或 Debian 上,这可以使用以下命令完成:
sudo apt-get install python-pip
安装 pip 后,我们可以使用以下命令安装 Mosquitto python 客户端模块:
sudo pip install paho-mqtt
你可以通过阅读我们上面链接的网站来了解如何使用 python 模块。编写和编译 python 真的很容易。
你好 Python 世界
打开您最喜欢的纯文本编辑器。输入行:
打印“Hello World”
将其另存为 hi.py。然后在终端中,导航到您的文档并输入命令:
python hi.py
您应该会看到“Hello World”响应。就这么简单。
你好 Opensensors
要使用 Mosquitto 客户端 python 模块,我们可以运行以下代码来测试发布。你需要用你的详细信息替换我的用户名“Louis”(保留语音标记)和密码:
我们需要与 Opensensors 消息代理通信的 mosquitto 库:
将 paho.mqtt.client 导入为 mqtt
使用我们设备的客户端 ID 初始化客户端选项:
mqttc =mqtt.Client(client_id="939")
设置我们的用户名和密码:
mqttc.username_pw_set("Louis", password="AbcDEFgH")
连接到 Opensensors 服务器:
mqttc.connect("mqtt.opensensors.io")
发布消息打个招呼:
mqttc.publish("/users/Louis/test2", payload="Hello Opensensors!", qos=0, retain=False)
断开连接:
mqttc.disconnect();
成功,你现在应该有一个功能正常的传感器 🙂
接下来我们需要让串行工作。要了解您的 arduino 串口是什么样的,我们在终端中执行了以下命令:
dmesg | grep tty
输出是这样的……
[ 0.000000] 控制台 [tty0] 已启用 [ 3522.192687] cdc_acm 7-1:1.0:ttyACM0:USB ACM 设备
第二行有我们的 Ardiuno 的详细信息。 ttyACM0 是设备名称,‘/dev/ttyACM0’是串口。
打开和读取串行端口 Python 使它变得非常容易。您可以使用以下代码运行一个小测试来检查它是否正常工作:
为了与 Arduino 通信,我们需要使用串行库:
import serialser =serial.Serial('/dev/ttyACM0') # 打开第一个串口同时 True:print ser.readline() # 打印从串口读取的每一行
最后,我们只需要将这两部分组合在一起。这是我们使用的代码:
import serialimport paho.mqtt.client as mqttimport timemqttc =mqtt.Client(client_id="939")mqttc.username_pw_set("Louis", password="AbcDEFgH") mqttc.connect("mqtt.opensensors.io")ser =serial.Serial('/dev/ttyACM0') # 打开第一个串口同时 True:message=ser.readline()print messagemqttc.publish("/users/Louis/ ODI/airquality", payload=message, qos=0, retain=False)time.sleep(1);
运行此程序,我们将传感器数据发布到 Opensensors!
我们建议调整 Arduino 代码以输出 JSON 格式的数据。这将使阅读和添加功能更容易。
您可以在此处查看我们创建的生成开放数据的主题!
代码
import serialimport paho.mqtt.client as mqttimport timemqttc =mqtt.Client(client_id="939")mqttc.username_pw_set("Louis", password="AbcDEFgH")mqttc.connect ("opensensors.io")ser =serial.Serial('/dev/ttyACM0') # 打开第一个串口同时 True:message=ser.readline()print messagemqttc.publish("/users/Louis/ODI/airquality",有效载荷=消息,qos=0,保留=假)time.sleep(1);
来源:如何在 OpenSensors 上测量空气质量
制造工艺