有时,了解您周围的气候和天气状况可能会很好。也许您急于赶往某个地方并想知道外面的温度。或者,您可能担心湿度会导致空气质量变差,并想知道您是否还应该参加那次跑步。不管出于什么目的,人们都想知道这些数据。个人空气监测仪旨在将其带给他们。
个人空气监测器是一种将实时本地传感器数据直接发送到手机或笔记本电脑的便捷方式。Personal Air Monitor 方便地位于便携式、封闭的传感器站内,提供了一种基于直接传感器测量即时了解您周围的天气和空气状况的方法。使用 Cayenne 的简单连接提供了一个易于阅读的仪表板界面,用于查看不同的条件,并且可以每小时配置一次事件以报告条件。
SparkFun Thing Dev ESP8266 微控制器
驱动传感器站的电路板是 SparkFun Thing ESP8266 开发板,它可以方便地将 ESP8266 的引脚分成几行,引向电路板。ESP8266 是一款具有板载无线连接功能的微控制器,Cayenne 将其用于数据传输。
Cayenne、传感器和数据传输
传感器站有几个机载传感器来测量周围的世界。这些包括:
传感器站的外壳在顶部和底部进行了防水处理,但外壳内衬有通风孔,因此内部的传感器可以获得准确的读数。然而,外壳顶部比底部大,因此雨水不会进入通风的侧面。
每隔五秒钟,来自设备传感器的数据就会通过 WiFi 传输到 Cayenne,并在 Cayenne 仪表板上显示。您可以通过手机或计算机访问它。
您将需要以下组件来构建传感器站:
*:BMP180 是退役产品。您可能会在某些地方找到一些,但如果您想找到替代品,请寻找 BMP280。但是,这些库略有不同,因此您需要将代码中的所有 BMP180 函数替换为 BMP280 函数。
要构建传感器站,首先根据以下 Fritzing 图组装电路。
要连接 SparkFun Thing Dev,请取一根小的实芯跳线,将其拉直,将其滑过您要使用的引脚,然后将顶部向下弯曲到电路板的一侧。您也可以为 BMP180 执行此操作。如果您愿意,可以将这些引脚焊接下来。
构建电路后,请执行以下步骤:
1. 将 USB Micro 电缆插入 SparkFun Thing Dev。它应该是一个相当灵活的电缆。
2. 使用电工胶带将 SparkFun Thing Dev 和 BMP180 固定到面包板上。这将使他们稍微更稳定并防止不稳定的跳投运动。
3. 将装置插入工艺盒并用电工胶带固定。在侧面切一个小孔,这样您就可以接触到电源开关。将 USB 数据线的一端穿过可用的通风孔,或切开通风孔的顶部之一并将电缆滑入。
4. 用透明胶带密封工艺盒的顶部。
5. 将它插入您的笔记本电脑,您就可以开始编程了!
为了对传感器站进行编程,我们使用 Arduino IDE,您可以在 arduino.cc找到它
下载适用于您的操作系统的最新版本。
为了使用传感器站程序对 SparkFun Thing Dev 进行编程,您需要执行以下额外操作:
1. 打开 File-Preferences 并转到显示 Additional Boards Manager URLs 的框。
2. 在框中输入以下内容,然后点击首选项页面底部的确定:
https://raw.githubusercontent.com/sparkfun/Arduino_Boards/master/IDE_Board_Manager/package_sparkfun_index.json
这将允许您在 Boards Manager 中上传 SparkFun ESP8266 包。
3.关闭首选项并打开工具-Boards-Boards Manager。向下滚动,直到找到 SparkFun ESP8266 Boards。单击它,然后单击“安装”。等待安装完成,关闭boards manager。
4. 打开 Tools-Board 并向下滚动,直到您看到 SparkFun ESP8266 Thing Dev。单击它,然后返回到工具。当您插入开发板时,您应该能够打开端口并找到显示 COM # 的内容,其中 # 是设备连接到的端口。
5. 现在您需要获取额外的库。转到 Sketch-Include Library-Manage Libraries 并搜索以下内容:
单击每个的安装按钮以获取库。
您需要在线查找 DHT 库。从此链接下载:
https://github.com/adafruit/DHT-sensor-library
然后解压缩文件(某些操作系统会自动执行此操作)并将其复制到 Arduino IDE 的库路径中。这应该在您计算机中包含所有代码的文件夹中(路径将在文档-Arduino 中)。如果它不存在,请在 Arduino 文件夹中创建一个名为 libraries 的文件夹,然后打开它并将 DHT 库粘贴到其中。完成后,您就可以开始了!
让我们看看我们将要上传的内容。首先,我们包括传感器库:
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
DHT_Unified dht(12, DHT22);
#include <Wire.h>
#include <Adafruit_BMP085_U.h>
Adafruit_BMP085_Unified BMP180 = Adafruit_BMP085_Unified(18001);
是 DHT22 和 BMP180 传感器使用的库。它提供了所有库的一些通用功能。
和 是用于 DHT22 温度和湿度传感器的库。DHT22 有四个引脚,电源、数据、N/C 和接地。只有一根线用于通信,这条线发送温度和湿度数据。Adafruit 库提供了一种方便的方式来读取这些数据。
我们创建一个名为 dht 的对象并将其设置为引脚 12,定义为 DHT22 单元。
和 是 BMP180 的库。 是用于内部 IC 通信或 I2C 的库,它是一种双线控制接口,允许多个设备连接到一个主机。在这种情况下,我们使用 BMP180。 与旧版 BMP085 和 BMP180 兼容。它处理用户和 Wire 库之间的命令,Wire 库又将命令发送到 BMP180。
我们创建一个名为 BMP180 的对象并为其指定一个任意 ID 号。如果您愿意,可以更改此设置。
接下来,让我们看看 Cayenne 的设置。
#include <CayenneMQTTESP8266.h>
char ssid[] = "SSID";
char wifiPassword[] = "password";
char username[] = "username";
char password[] = "password";
char clientID[] = "clientID";
是处理 SparkFun Thing Dev 和 Cayenne 之间通信的库。它使用 MQTT(消息队列遥测传输)发送和接收数据。由于它使用 MQTT,因此需要一些标识信息:
记得在信息周围留下引号!
定义这些东西后,我们可以继续设置传感器站。该函数将运行一次。
void setup() {
BMP180.begin();
dht.begin();
Cayenne.begin(username, password, clientID, ssid, wifiPassword);
}
这将使用 begin() 函数启动 BMP180、DHT22 和 Cayenne。Cayenne 开始使用您之前声明的 ID。
一旦设置运行一次,我们就会进入无限循环。在开始循环之前,我们声明了一些变量。
boolean humidityStatus;
boolean temperatureStatus;
float humidityValue;
float temperatureValue;
float bmpTempValue;
float pressureValue;
float altitudeValue;
boolean bmpStatus;
float temperature;
这些变量用于在循环中进行计算和保存数据。
现在我们进入循环!我们通过调用 Cayenne.loop() 来处理 Cayenne 操作来启动循环。
void loop() {
Cayenne.loop();
然后我们为 BMP180 创建一个传感器事件,以便我们可以检查数据是否可用。
sensors_event_t event;
BMP180.getEvent(&event);
if (event.pressure)
{
bmpStatus = true;
pressureValue = event.pressure;
BMP180.getTemperature(&temperature);
float seaLevelPressure = 1013;
altitudeValue = BMP180.pressureToAltitude(seaLevelPressure, event.pressure);
}
else
{
bmpStatus = false;
}
然后,此代码块使用 if 语句来确认数据可用。如果是,则状态设置为真并存储值。在这种情况下,这些值是压力、温度和高度。请注意,为了计算高度,BMP180 必须进行一些涉及当前压力和海平面压力的数学运算。seaLevelPressure 值是您可以输入的地方。平均海平面压力为 101.3 kPa(代码为 1013 hPa),但如果您有当地海平面压力(在线查找!),请继续输入以获得更高的准确性。
如果没有数据,或者传感器可能不可用,则状态变量为假。
得到BMP180数据后,我们得到DHT22数据。DHT22 返回温度(摄氏度)和湿度(百分比)。
sensors_event_t event1;
dht.temperature().getEvent(&event1);
if (isnan(event1.temperature)) {
temperatureStatus = false;
}
else {
temperatureStatus = true;
temperatureValue = event1.temperature;
}
dht.humidity().getEvent(&event1);
if (isnan(event1.relative_humidity)) {
humidityStatus = false;
}
else {
humidityStatus = true;
humidityValue = event1.relative_humidity;
}
这里我们有一个传感器事件用于获取温度和湿度事件。isnan() 是一个数学函数,用于检查返回的数据是否为数字。如果它是一个数字,状态将被设置为真并记录数据。否则,status 将被设置为 false。
现在我们有了数据,可以将它发送给 Cayenne。首先,我们将发送湿度。
if (humidityStatus == true)
{
Cayenne.virtualWrite(0, humidityValue);
}
这只会在湿度状态变量设置为真时运行。函数 Cayenne.virtualWrite() 是一个可用于将数据上传到 Cayenne 的函数。第一个变量 0 是要使用的通道号。它将显示在 Cayenne 仪表板中,我们将在稍后介绍。第二个变量是您要上传的数据。在这种情况下,它的湿度值被发送到 Cayenne。
其次,让我们发送温度。由于我们有两个板载传感器,我们可以在这里做一些数学运算。
if (temperatureStatus == true)
{
if (bmpStatus == true)
{
float averageTemp = (temperature + temperatureValue) / 2;
Cayenne.virtualWrite(1, averageTemp);
}
else
{
Cayenne.virtualWrite(1, temperatureValue);
}
}
else if (bmpStatus == true)
{
Cayenne.virtualWrite(1, temperature);
}
首先,我们检查 DHT22 的温度是否可用。如果是,我们将进行第二次检查以查看 BMP180 温度数据是否可用。如果事实证明来自两个传感器的数据都可用,我们通过将它们的值相加并除以一半来取两者的平均值。但是,如果 BMP180 数据不可用,我们就使用 DHT22 数据。但是,如果 DHT22 数据不可用而 BMP180 数据可用,我们将使用它发送给 Cayenne。通道 1 用于温度。
之后,我们发送最后两个数据值,即压力和高度。
if (bmpStatus == true)
{
Cayenne.virtualWrite(2, pressureValue);
Cayenne.virtualWrite(3, altitudeValue);
}
压力采用通道 2,高度采用通道 3。
最后,我们以 5 秒的延迟结束循环。这样做是为了在数据上传到 Cayenne 之间留出一些时间,因为快速更新会导致刷新问题并跳过数据值。DHT22 在传感器检查之间也需要至少 2 秒才能接收到所有数据。
delay(5000);
}
现在您已准备好为传感器站配置 Cayenne。我们使用计算机进行设置,以简化配置过程。首先,前往网站https://mydevices.com/并登录您的帐户(如果有的话)。如果您不这样做,请单击注册并使用您的姓名、电子邮件和帐户密码创建一个帐户。如果您有帐户,请单击登录并登录到您的帐户。之后,您应该能够获得选择设备页面。要找到 SparkFun Thing Dev,请在“所有设备”下搜索。然后您应该能够找到用户名、密码和客户端 ID。这些是您完成代码所需的最后几条信息。复制这些并将它们粘贴到代码中的用户名、密码和 clientID 的位置。现在您可以将代码上传到 SparkFun Thing Dev。这应该只需要一点时间。
在上传过程中,SparkFun Thing Dev 上的两个橙色 LED 应该快速闪烁。一旦它们停止,打开您完成配置的 Cayenne 仪表板。然后您应该看到屏幕上出现一个仪表板,上面有四个数字。这是个人空气监测仪!
现在您已经设置了 Personal Air Monitor,您可以为其创建一些触发器。单击“添加新触发器”,您将被定向到一个页面,您可以在其中为您的看板设置触发器。给它起个名字,然后将 SparkFun Thing Dev 拖到 if 框中。然后选择您的 if 语句。这可能是传感器的简单阈值,甚至是正在打开或关闭的设备。之后,点击设置通知,如果需要电子邮件,请选中发送电子邮件框,如果需要短信,请发送短信。点击“添加自定义收件人”将您的消息定向到另一个电子邮件帐户或电话号码。完成后,点击保存以创建触发器。
如果您想与周围的其他人分享您的实时数据,您可以给他们一个指向您仪表板的链接。首先,单击创建项目并为其命名。然后,将 SparkFun Thing Dev 拖到概览中并将其选中。数据随后应出现在您的项目概览中。出现后,转到“共享”并选中“概述”。复制给定的链接并将其发送给您的朋友,他们可以单击它来访问您的数据。
如果您想查看我的数据(如果它恰好在线),
您还可以在旅途中通过移动设备访问 Cayenne。为此,请在您的移动设备应用程序商店中查找 Cayenne 应用程序。下载应用程序(免费!)并打开它。单击添加新设备并查找 SparkFun Thing Dev。然后您应该能够访问您的仪表板!
将 Cayenne 用于个人空气监测器的便利之处在于传感器数据在全球范围内在线。这意味着它可以在世界任何地方访问和共享!所以,如果你正在外地度假,想提前知道回家时的空气状况,就可以打开Cayenne一探究竟!反之亦然,因为您实际上可以在任何地方将多个传感器站连接到您的 Cayenne 帐户,或多个 Cayenne 帐户!这将允许您创建一个全球监视器网络,每组监视器负责一个特定区域。该网络将能够简化互联世界,并提供一种快速、简单和方便的方式,让您触手可及地获取直接的天气和空气数据。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !