1 使用Blues Wireless和Qubitro的物联网天气数据记录器-德赢Vwin官网 网
×

使用Blues Wireless和Qubitro的物联网天气数据记录器

消耗积分:0 | 格式:zip | 大小:0.11 MB | 2023-02-06

王鹏

分享资料个

描述

随着全球气温上升,监测环境状况变得前所未有的重要。

可以通过多种方式跟踪环境数据。您可以使用有线设备、控制器中的 SD 卡来手动捕获发回数据,或者您可以使用基于 Wi-Fi 或 BLE 通信的控制器来处理此任务。

考虑一下如果您没有时间从 SD 卡手动检索数据,或者如果您的设备不在 Wi-Fi 或蓝牙连接范围内,您将如何跟踪您的天气数据?

在本教程中,我将向您展示如何使用Blues Wireless硬件模块创建基于物联网的天气数据记录器;不需要 SD 卡、Wi-Fi 或 BLE。只需将Blues Notecard和 Notecarrier 连接到控制器即可跟踪您的天气数据。

你需要的东西:

硬件:

软件:

结构概要:

pasted_image_0.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

整个教程将遵循以下三个步骤:

第 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。

pasted_image_0.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

现在您的传感器都已连接,让我们继续进行编程部分。为此,打开 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);

}
pasted_image_0.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

下一步是设置您的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 端口重命名为你的,然后点击运行。您可以在终端中看到虚拟数据。

pasted_image_0.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

该脚本将返回上述响应。接下来,打开 Notehub 仪表板并导航到“事件”选项卡并查看数据。

pasted_image_0.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

您可以在 Notehub 中看到由 Python 脚本发送的数据,如果完成此步骤,您可以使用 UART 端口将 Blues Notecard 和 Notecarrier 连接到 Arduino Nano 33 BLE Sense。

【Blues Notecarrier同时支持I2CUART通信】

pasted_image_0.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
 

连接完成后,只需在 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 仪表板中的“事件”选项卡。

pasted_image_0.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

在那里您可以看到我们的传感器数据。

至此,您已经完成了硬件部分。您可以单击 JSON 数据并分析我们的 Blues 硬件发送的全部数据。

pasted_image_0.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

接下来,让我们转到 Notehub 集成。

Notehub 设置:

我们将数据发送到 Notehub,所以现在我们需要用一些图形和表格来可视化数据。让我们看看如何使用 Qubitro 云来做到这一点。

首先,打开 Notehub 并导航到“路由”选项卡,然后创建一个新路由。

pasted_image_0.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

然后选择集成类型为 HTTP/HTTPS。

pasted_image_0.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

现在我们必须输入一些关于我们的“Qubitro Route”的信息。

pasted_image_0.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

根据需要输入名称并输入 URL 为“ https://webhook.qubitro.com/integrations/blueswireless” ,然后单击标头,选择其他标头,然后输入 2 个标头,如下图所示。

pasted_image_0.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

[注意:标头值将在下一步中添加]

Qubitro 设置:

在这一步中,我们将在 Qubitro 中设置项目。首先,打开https://portal.qubitro.com/,使用您的凭据登录,然后创建一个新项目。您无需添加任何设备。

接下来,导航到项目设置并复制“项目 ID”。

pasted_image_0.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

然后导航到 Qubitro 门户中的凭据选项卡并复制“Webhook 登录密钥”。拿走这些并将它们输入回 Blues Notehub 的路由标题中。

pasted_image_0.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

完成整个设置后,单击“创建新路线”,这将在您的 Notehub 中添加新路线。

现在您可以在 Qubitro 门户中看到您的 Blues 设备。

picture1_JKMnjmE6gf.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

只需打开设备并查看传入的数据。Qubitro 自动从 Blues 中提取数据。在概览选项卡中,您可以看到硬件的当前位置、电压和方向。

pasted_image_0.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

接下来打开数据选项卡,在这里您可以看到您的传感器数据。

pasted_image_0.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

现在我们要做一些可视化,您可以通过打开“监控”选项卡并添加一些小部件来实现。

pasted_image_0.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

同样,将小部件添加到所有数据。这是我的示例仪表板。

pasted_image_0.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

最后,我们必须以图形和图表的形式可视化我们的传感器数据。

现在我们基于物联网的天气数据记录器几乎完成了,我们正处于最后也是最重要的一步。在移动应用程序或 Web 应用程序中与其他用户共享数据怎么样?Qubitro 允许 API 与多种平台和语言共享云数据。

要试用它,请打开 Qubitro 门户中的“凭据”选项卡并复制 API 密钥。

然后打开这个 URL https://qubitro-api.readme.io/reference/getdevice,它会要求你完成一些输入。

pasted_image_0.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

以“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)

它将从硬件返回数据。

pasted_image_0.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

所以现在您可以将您的 Blues 天气记录器的数据分享给外部世界。

结论:

pasted_image_0.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
 

在本教程中,我向您展示了如何使用 Blues 硬件模块构建您自己的基于物联网的天气数据记录器,并解释了如何与外部世界共享该数据。现在,您可以在没有电线、Wi-Fi 或 SD 卡的情况下跟踪您的天气数据。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"//www.hzfubeitong.com/m/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="https://m.elecfans.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'使用Blues Wireless和Qubitro的物联网天气数据记录器',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.hzfubeitong.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);