随着全球气温上升,监测环境状况变得前所未有的重要。
可以通过多种方式跟踪环境数据。您可以使用有线设备、控制器中的 SD 卡来手动捕获发回数据,或者您可以使用基于 Wi-Fi 或 BLE 通信的控制器来处理此任务。
考虑一下如果您没有时间从 SD 卡手动检索数据,或者如果您的设备不在 Wi-Fi 或蓝牙连接范围内,您将如何跟踪您的天气数据?
在本教程中,我将向您展示如何使用Blues Wireless硬件模块创建基于物联网的天气数据记录器;不需要 SD 卡、Wi-Fi 或 BLE。只需将Blues Notecard和 Notecarrier 连接到控制器即可跟踪您的天气数据。
硬件:
软件:
整个教程将遵循以下三个步骤:
第 1 步:硬件设置
第一步是收集环境数据,因此我们将使用一个 DHT11、一个雨水传感器、一个空气质量传感器和一个光传感器来这样做。Arduino Nano 33 BLE Sense 连接到所有传感器,这些传感器将充当处理数据的控制器。
第 2 步:Notehub 设置
从传感器收集的数据将使用 Blues Notecard 和 Blues Notecarrier 发送到 Blues Notehub 云。
第 3 步:Qubitro 设置
一旦我们的传感器数据到达云端,我们将使用 Qubitro 对其进行可视化和后处理。
除 DHT11 之外的所有传感器都是模拟的。将 DHT11 连接到 Arduino Nano 33 BLE Sense 的 D13,并将 A0 直接连接到 Arduino Nano 33 模拟引脚的 A2。
现在您的传感器都已连接,让我们继续进行编程部分。为此,打开 Arduino IDE 并编译以下代码。它将收集所有传感器数据并将其输出到串行监视器。
#include "Air_Quality_Sensor.h"
#include
String Stage;
AirQualitySensor sensor(A1); //Analog pin A1 for Air Quality sensor
#define DHTPIN 13 //Digital pin 13 for DHT11 sensor
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup(void) {
dht.begin(); // Init DHT11
Serial.println("Waiting sensor to init...");
delay(10000);
}
void loop(void) {
int quality = sensor.slope();
Serial.print("AQ Sensor value : ");
Serial.println(sensor.getValue());
Serial.print("Pollution Level : ");
if (quality == AirQualitySensor::FORCE_SIGNAL) {
String Stage = "ERROR!";
Serial.println(Stage);
}
else if (quality == AirQualitySensor::HIGH_POLLUTION) {
String Stage = "High pollution!";
Serial.println(Stage);
}
else if (quality == AirQualitySensor::LOW_POLLUTION) {
String Stage = "Low pollution!";
Serial.println(Stage);
}
else if (quality == AirQualitySensor::FRESH_AIR) {
String Stage = "Fresh air!";
Serial.println(Stage);
}
float h = dht.readHumidity();
Serial.print("Humidity Level : ");
Serial.print(h);
Serial.println(" %");
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
Serial.print("Temperature Level : ");
Serial.print(t);
Serial.println(" C");
int value = analogRead(A2); //Analog pin A2 for Light sensor
float valuel = map(value, 0, 800, 0, 100);
Serial.print("Light Sensor Level : ");
Serial.print(valuel);
Serial.println(" %");
int rainSensor = analogRead(A3); //Analog pin A3 for Rain sensor
float rainSensor1 = map(rainSensor, 0, 1024, 0, 100);
Serial.print("Rain Sensor Level : ");
Serial.println(rainSensor);
Serial.print("Dry level : ");
Serial.print(rainSensor1);
Serial.println(" %");
Serial.println("------------------------------------------------");
delay(10000);
}
下一步是设置您的Blues Notecarrier。将 Notecard 连接到 Notecarrier(我使用的是外部 SIM 卡,所以我将解释如何操作)。通过微型 USB 数据线将 Notecarrier 连接到您的 PC。
如果您在启动和运行时遇到任何问题,可以联系我们在Blues 论坛上寻求帮助。]
如果你想像我一样使用外部 SIM (Airtel),请另外按照以下步骤配置你的 Notecard。
# disable the cellular modem on the Notecard
{"req":"hub.set","mode":"off"}
# set the Airtel APN
{"req":"card.wireless","mode":",airtelgprs.com"}
# make sure the Notecard cloud host is set to the default (if you changed it)
{"req":"hub.set","host":"a.notefile.net"}
# enable the cellular modem (minimum requires explicit sync requests)
{"req":"hub.set","mode":"minimum"}
# force a sync (if it hasn't started already)
{"req":"hub.sync","allow":true}
现在我们将试用 Blues Notecarrier。我正在使用 Python 将一些虚拟数据发送到 Notehub。
import json
import notecard
import serial
import time
productUID = "com.gmail.pradeeplogu26:env_data_logger" #Change this with yours
# Select Serial
use_uart = True
card = None
# Configure the serial connection to the Notecard
serial = serial.Serial('COM7', 9600) #Change this with your COM port
card = notecard.OpenSerial(serial, debug=True)
req = {"req": "hub.set"}
req["product"] = productUID
req["mode"] = "continuous"
card.Transaction(req)
while True:
temp = 10
humidity = 20
print('Temperature: {} degrees C'.format(temp))
print('Humidity: {}%'.format(humidity))
req = {"req": "note.add"}
req["file"] = "sensors.qo"
req["start"] = True
req["body"] = {"temp": temp, "humidity": humidity}
card.Transaction(req)
time.sleep(15)
只需将 projectUID 和 Com 端口重命名为你的,然后点击运行。您可以在终端中看到虚拟数据。
该脚本将返回上述响应。接下来,打开 Notehub 仪表板并导航到“事件”选项卡并查看数据。
您可以在 Notehub 中看到由 Python 脚本发送的数据,如果完成此步骤,您可以使用 UART 端口将 Blues Notecard 和 Notecarrier 连接到 Arduino Nano 33 BLE Sense。
【Blues Notecarrier同时支持I2C和UART通信】
连接完成后,只需在 Arduino IDE 中编译以下 Arduino 代码,这会将传感器数据发送到 Notehub。
#include
#include "Air_Quality_Sensor.h"
#include
AirQualitySensor sensor(A1); //Analog pin A1 for Air Quality sensor
#define DHTPIN 13 //Digital pin 13 for DHT11 sensor
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#define txRxPinsSerial Serial1
#define productUID "xxxxxxxxxxxxxxxxxxxx"
Notecard notecard;
String Stage;
void setup(void) {
notecard.begin(txRxPinsSerial, 9600);
J *req = notecard.newRequest("hub.set");
JAddStringToObject(req, "product", productUID);
JAddStringToObject(req, "mode", "continuous");
notecard.sendRequest(req);
delay(1000);
dht.begin(); // Init DHT11
Serial.println("Waiting sensor to init...");
delay(10000);
}
void loop(void) {
int quality = sensor.slope();
Serial.print("AQ Sensor value : ");
Serial.println(sensor.getValue());
Serial.print("Pollution Level : ");
if (quality == AirQualitySensor::FORCE_SIGNAL) {
String Stage = "ERROR!";
Serial.println(Stage);
}
else if (quality == AirQualitySensor::HIGH_POLLUTION) {
String Stage = "High pollution!";
Serial.println(Stage);
}
else if (quality == AirQualitySensor::LOW_POLLUTION) {
String Stage = "Low pollution!";
Serial.println(Stage);
}
else if (quality == AirQualitySensor::FRESH_AIR) {
String Stage = "Fresh air!";
Serial.println(Stage);
}
float h = dht.readHumidity();
Serial.print("Humidity Level : ");
Serial.print(h);
Serial.println(" %");
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
Serial.print("Temperature Level : ");
Serial.print(t);
Serial.println(" C");
int value = analogRead(A2);
float valuel = map(value, 0, 800, 0, 100);
Serial.print("Light Sensor Level : ");
Serial.print(valuel);
Serial.println(" %");
int rainSensor = analogRead(A3);
float rainSensor1 = map(rainSensor, 0, 1024, 0, 100);
Serial.print("Rain Sensor Level : ");
Serial.println(rainSensor);
Serial.print("Dry level : ");
Serial.print(rainSensor1);
Serial.println(" %");
J *req = notecard.newRequest("note.add");
if (req != NULL) {
JAddStringToObject(req, "file", "sensors.qo");
JAddBoolToObject(req, "sync", true);
J *body = JCreateObject();
if (body != NULL) {
JAddNumberToObject(body, "temperature", t);
JAddNumberToObject(body, "humidity", h);
JAddNumberToObject(body, "air quality value", sensor.getValue());
JAddNumberToObject(body, "light intencity", valuel);
JAddNumberToObject(body, "rain sensor", rainSensor);
JAddNumberToObject(body, "dry level", rainSensor1);
JAddItemToObject(req, "body", body);
}
notecard.sendRequest(req);
}
Serial.println("------------------------------------------------");
delay(10000);
}
只需打开串口监视器并查看输出的数据。接下来,移至 Notehub 仪表板中的“事件”选项卡。
在那里您可以看到我们的传感器数据。
至此,您已经完成了硬件部分。您可以单击 JSON 数据并分析我们的 Blues 硬件发送的全部数据。
接下来,让我们转到 Notehub 集成。
我们将数据发送到 Notehub,所以现在我们需要用一些图形和表格来可视化数据。让我们看看如何使用 Qubitro 云来做到这一点。
首先,打开 Notehub 并导航到“路由”选项卡,然后创建一个新路由。
然后选择集成类型为 HTTP/HTTPS。
现在我们必须输入一些关于我们的“Qubitro Route”的信息。
根据需要输入名称并输入 URL 为“ https://webhook.qubitro.com/integrations/blueswireless” ,然后单击标头,选择其他标头,然后输入 2 个标头,如下图所示。
[注意:标头值将在下一步中添加]
在这一步中,我们将在 Qubitro 中设置项目。首先,打开https://portal.qubitro.com/,使用您的凭据登录,然后创建一个新项目。您无需添加任何设备。
接下来,导航到项目设置并复制“项目 ID”。
然后导航到 Qubitro 门户中的凭据选项卡并复制“Webhook 登录密钥”。拿走这些并将它们输入回 Blues Notehub 的路由标题中。
完成整个设置后,单击“创建新路线”,这将在您的 Notehub 中添加新路线。
现在您可以在 Qubitro 门户中看到您的 Blues 设备。
只需打开设备并查看传入的数据。Qubitro 自动从 Blues 中提取数据。在概览选项卡中,您可以看到硬件的当前位置、电压和方向。
接下来打开数据选项卡,在这里您可以看到您的传感器数据。
现在我们要做一些可视化,您可以通过打开“监控”选项卡并添加一些小部件来实现。
同样,将小部件添加到所有数据。这是我的示例仪表板。
最后,我们必须以图形和图表的形式可视化我们的传感器数据。
现在我们基于物联网的天气数据记录器几乎完成了,我们正处于最后也是最重要的一步。在移动应用程序或 Web 应用程序中与其他用户共享数据怎么样?Qubitro 允许 API 与多种平台和语言共享云数据。
要试用它,请打开 Qubitro 门户中的“凭据”选项卡并复制 API 密钥。
然后打开这个 URL https://qubitro-api.readme.io/reference/getdevice,它会要求你完成一些输入。
以“Bearer-API Key”格式输入 API 密钥,输入您在 Qubitro 项目设置中使用的设备 ID 和项目,然后单击“Try It”按钮。您可以从您的 Blues 硬件中查看您的全部数据。
让我们制作一个简单的 Python 脚本来获取 API 响应。只需复制下面的 Python 脚本并更改密钥,然后执行。
import requests
import time
from colorama import Fore, Back, Style
while (True):
headers = {
"Accept": "application/json",
"Authorization": "Bearer-xxxxxxxxxxxxxxxxxxxxxxxx"
}
response = requests.get(url, headers=headers)
print(response.text)
time.sleep(10)
它将从硬件返回数据。
所以现在您可以将您的 Blues 天气记录器的数据分享给外部世界。
在本教程中,我向您展示了如何使用 Blues 硬件模块构建您自己的基于物联网的天气数据记录器,并解释了如何与外部世界共享该数据。现在,您可以在没有电线、Wi-Fi 或 SD 卡的情况下跟踪您的天气数据。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !