0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何快速搭建一个LoRa®无线环境监测系统?WisBlock + RUI3 一键实现!

瑞科慧联(RAK) 2022-09-19 14:21 次阅读

环境监测对于人类来说至关重要,空气质量、土壤构成、环境噪音、温湿度等对我们的农业发展、城市建设、日常生活都会造成影响。以温湿度为例:温湿度高低会影响农作物的生长、影响工程建设进度、影响设备运作,如果我们能够精确地监测温湿度数据、及时作出调整,就能促进整个行业的高效运行。

基于这样的需求考虑,“如何搭建一个良好的环境监测系统”成为了我们需要思考的核心问题。

通常来说,搭建一个良好的环境监测系统,最关键的是要建立实时的环境监测预警系统,并保存完整的历史数据。以产品测试行业为例,当环境不利于产品测试时,只有及时预警,才能采取有效措施调节室内环境,从而避免监测系统损坏。同时也可以根据保存下来的实时数据进行具体分析。

由此可以知道,我们需要的是一套传输距离远、功耗低、还能实时保存数据的环境监测系统。

基于瑞科慧联(RAK)的模块化产品 WisBlock 以及软件平台 RUI 3 搭建出来的 LoRaWAN®无线环境监测预警系统,恰好符合这一点。WisBlock + RUI3 的环境监测预警系统可以做到全天 24 小时全面准确地进行环境监测。该系统也被广泛地应用在实验室温湿度环境监测、办公区环境监测、商超冰柜温度监测、农场大棚温湿度检测等多个领域。

今天我就带大家一起学习快速地搭建这套 LoRa®无线温湿度监测系统。

搭建前的准备

硬件准备

  • WisBlock Base(本示例使用 RAK5005-O)
  • WisBlock Core(本示例使用 RAK4631)
  • WisBlock Sensor(本示例使用 RAK1906)
  • LoRa®天线(本示例使用 CN470频段)
  • 网关(本示例使用 RAK7268网关)

注意:要保持网关与传感器所属的频段相同,本案例我使用的频段均为 CN470。

软件准备

  • Arduino IDE
  • RAK4631 BSP
  • Adafruit BME680 库
  • SX126x-Arduino 库
  • 注册好 Gateway的 TTN账户
  • DataCake账户

硬件安装

  1. 将 LoRa®天线接口对准并放置在 RAK4631 模块的 LoRa®天线接口搭接处,轻轻按压 LoRa®天线接口,完成安装。
  2. 将 RAK4631 模块上的连接器插头对准 RAK5005-O CUP 插槽上的连接器插座。保持连接器间平行,并将其轻放在插座连接器相应的搭接处。
  3. 将传感器模块 RAK1906 上的连接器插头对准 RAK5005-O 插槽的连接器插座。保持连接器间平行,将其轻放在插座连接器相应的搭接处。
  4. 组装过程示意图如下:

pYYBAGMgLQSAToJFAAUGj2TrJag743.pngpoYBAGMgJ32AYyOtAAYFT621vPU955.png

pYYBAGMgJ4yAa433AACFLmmwFEs496.pngpYYBAGMgJ5KAe1YfAABWHBWhR5g352.png

软件配置

在 Arduino IDE中添加 RAK4631-R 开发板

1、打开 Arduino IDE,进入“文件 > 首选项”

pYYBAGMgJ6uAB2azAABWya5p9Kw502.png

打开 Arduino IDE

2、单击图中图标,修改“附加开发板管理器网址”选项,将 RAK4631-R WisBlock Core 添加中 Arduino 开发板管理器中。

poYBAGMgJ7uAZC0wAACMG3hqEbo791.png

在 Arduino IDE上修改“附加开发板管理器网址”

3、现在复制下方 URL并粘贴至下图所示区域。如果已存在其他链接,将上述链接粘贴至新的一行。完成后,单击“好”。

https://raw.githubusercontent.com/RAKWireless/RAKwireless-Arduino-BSP-Index/main/package_rakwireless.com_rui_index.json 

poYBAGMgJ8-AfEvhAACCCQgtfWQ691.png

在Arduino IDE上粘贴复制好的URL

4、重启 Arduino IDE。进入“工具 > 开发板:“RAK4631” > 开发板管理器”。

pYYBAGMgJ92AIL0GAABiWTkso2U254.png

重启Arduino IDE并执行操作

5、在搜索框中输入“RAK”,窗口会自动出现可用的 RAKwireless WisBlock Core Boards,选择“RAKwireless RUI nRF Boards”并安装。

pYYBAGMgJ-2Ab9l4AABS3825nXA261.png

选择并安装 RAKwireless RUI nRF Boards

6、BSP 安装完成后,根据图中路径选择 RAKwireless WisBlock Core模块。

poYBAGMgJ_yAct_TAABtlrDI45Q838.png

选择 RAKwireless WisBlock Core 模块

7、代码烧录

/**
   @file Environment_Monitoring ino
   @author rakwireless com
   @brief This sketch demonstrate how to get environment data from BME680
      and send the data to lora gateway 
   @version 0 1
   @date 2020-07-28
   @copyright Copyright (c) 2020
**/
#include 
#include 
#include  // Click to install library: http://librarymanager/All#Adafruit_BME680

Adafruit_BME680 bme;
/*************************************

   LoRaWAN band setting:
     RAK_REGION_EU433
     RAK_REGION_CN470
     RAK_REGION_RU864
     RAK_REGION_IN865
     RAK_REGION_EU868
     RAK_REGION_US915
     RAK_REGION_AU915
     RAK_REGION_KR920
     RAK_REGION_AS923

 *************************************/
#define OTAA_BAND     (RAK_REGION_CN470)
#define OTAA_DEVEUI   {0x20, 0x17, 0x06, 0x15, 0x0E, 0x00, 0x00, 0x15}
#define OTAA_APPEUI   {0x20, 0x17, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}
#define OTAA_APPKEY   {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x00, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}


// Might need adjustments
#define SEALEVELPRESSURE_HPA (1010.0)
uint8_t buffer[13]="";

void bme680_get()
{
  Serial.print("Temperature = ");
  Serial.print(bme.temperature);
  Serial.println(" C");

  Serial.print("Pressure = ");
  Serial.print(bme.pressure / 100.0);
  Serial.println(" hPa");

  Serial.print("Humidity = ");
  Serial.print(bme.humidity);
  Serial.println(" %");

  Serial.print("Gas = ");
  Serial.print(bme.gas_resistance / 1000.0);
  Serial.println(" KOhms");

  Serial.println();


  uint16_t t = bme.temperature * 100;
  uint32_t pre = bme.pressure / 100.0 * 100;
  uint16_t h = bme.humidity * 100;
  uint32_t gas = bme.gas_resistance;
  
  uint32_t i = 0;
  //result: T=28.25C, RH=50.00%, P=958.57hPa, G=100406 Ohms
   buffer[i++] = 0x01;
   buffer[i++] = (uint8_t)(t >> 8);
   buffer[i++] = (uint8_t)t;
   buffer[i++] = (uint8_t)(h >> 8);
   buffer[i++] = (uint8_t)h;
   buffer[i++] = (uint8_t)((pre & 0xFF000000) >> 24);
   buffer[i++] = (uint8_t)((pre & 0x00FF0000) >> 16);
   buffer[i++] = (uint8_t)((pre & 0x0000FF00) >> 8);
   buffer[i++] = (uint8_t)(pre & 0x000000FF);
   buffer[i++] = (uint8_t)((gas & 0xFF000000) >> 24);
   buffer[i++] = (uint8_t)((gas & 0x00FF0000) >> 16);
   buffer[i++] = (uint8_t)((gas & 0x0000FF00) >> 8);
   buffer[i++] = (uint8_t)(gas & 0x000000FF);
    /** Send the data package */
  if (api.lorawan.send(sizeof(buffer), (uint8_t *)buffer, 2, true, 1))
  {
    Serial.println("Sending is requested");
  } 
  else 
  {
    Serial.println("Sending failed");
  }
}
void init_bme680()
{
  Wire.begin();

  if (!bme.begin(0x76)) {
    Serial.println("Could not find a valid BME680 sensor, check wiring!");
    return;
  }

  // Set up oversampling and filter initialization
  bme.setTemperatureOversampling(BME680_OS_8X);
  bme.setHumidityOversampling(BME680_OS_2X);
  bme.setPressureOversampling(BME680_OS_4X);
  bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
  bme.setGasHeater(320, 150); // 320*C for 150 ms
}
void lora_init()
{
  // OTAA Device EUI MSB first
  uint8_t node_device_eui[8] = OTAA_DEVEUI;
  // OTAA Application EUI MSB first
  uint8_t node_app_eui[8] = OTAA_APPEUI;
  // OTAA Application Key MSB first
  uint8_t node_app_key[16] = OTAA_APPKEY;
  
  if (!api.lorawan.appeui.set(node_app_eui, 8)) {
    Serial.printf("LoRaWan OTAA - set application EUI is incorrect! \r\n");
    return;
  }
  if (!api.lorawan.appkey.set(node_app_key, 16)) {
    Serial.printf("LoRaWan OTAA - set application key is incorrect! \r\n");
    return;
  }
  if (!api.lorawan.deui.set(node_device_eui, 8)) {
    Serial.printf("LoRaWan OTAA - set device EUI is incorrect! \r\n");
    return;
  }
  
  if (!api.lorawan.band.set(OTAA_BAND)) {
    Serial.printf("LoRaWan OTAA - set band is incorrect! \r\n");
    return;
  }
  if (!api.lorawan.deviceClass.set(RAK_LORA_CLASS_A)) {
    Serial.printf("LoRaWan OTAA - set device class is incorrect! \r\n");
    return;
  }
  if (!api.lorawan.njm.set(RAK_LORA_OTAA))  // Set the network join mode to OTAA
  {
    Serial.printf
  ("LoRaWan OTAA - set network join mode is incorrect! \r\n");
    return;
  }
  if (!api.lorawan.join())  // Join to Gateway
  {
    Serial.printf("LoRaWan OTAA - join fail! \r\n");
    return;
  }
  
  /** Wait for Join success */
  while (api.lorawan.njs.get() == 0) {
    Serial.print("Wait for LoRaWAN join...");
    api.lorawan.join();
    delay(10000);
  }
  
  if (!api.lorawan.adr.set(true)) {
    Serial.printf
  ("LoRaWan OTAA - set adaptive data rate is incorrect! \r\n");
    return;
  }
  if (!api.lorawan.rety.set(1)) {
    Serial.printf("LoRaWan OTAA - set retry times is incorrect! \r\n");
    return;
  }
  if (!api.lorawan.cfm.set(1)) {
    Serial.printf("LoRaWan OTAA - set confirm mode is incorrect! \r\n");
    return;
  }
  
  /** Check LoRaWan Status*/
  Serial.printf("Duty cycle is %s\r\n", api.lorawan.dcs.get()? "ON" : "OFF"); // Check Duty Cycle status
  Serial.printf("Packet is %s\r\n", api.lorawan.cfm.get()? "CONFIRMED" : "UNCONFIRMED");  // Check Confirm status
  uint8_t assigned_dev_addr[4] = { 0 };
  api.lorawan.daddr.get(assigned_dev_addr, 4);
  Serial.printf("Device Address is %02X%02X%02X%02X\r\n", assigned_dev_addr[0], assigned_dev_addr[1], assigned_dev_addr[2], assigned_dev_addr[3]);  // Check Device Address
  Serial.println("");

}


void setup()
{
  //Initialize the built in LED
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);
  // Initialize Serial for debug output
  Serial.begin(115200);
  time_t serial_timeout = millis();
  while (!Serial)
  {
    if ((millis() - serial_timeout) < 5000)
    {
      delay(100);
      digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
    }
    else
    {
      break;
    }
  }
  delay(1000);
  Serial.println("=====================================");
  Serial.println("Welcome to RAK4630 LoRaWan!!!");
  lora_init();
  init_bme680();

} 



void loop()
{
  if (! bme.performReading()) {
    Serial.println("Failed to perform reading :(");
    return;
  }
  bme680_get();
  delay(10000);
}

连接传感器节点至 TTN

本节为将传感器节点连接至 TTN(The Things Network)平台的操作过程。

登录到 TTN 平台

登录TTN网站,将会看到以下页面:

pYYBAGMgKCKAU6r1AAC0iyN2dsk407.png

TTN 网站的控制台页面

创建新的应用程序

进入添加 Application 界面,注册相关信息后,单击页面底部的“Create application”。

poYBAGMgKDqAfF9GAAB_2ArJJdc971.png

添加应用

进入应用程序概述页面,单击右下角“Add end devices”,在 TTN平台注册新设备。

poYBAGMgKEeAWJWLAACkMu5FMRE929.png

应用程序概述页面

注册新设备

在“Register end device”页面中,单击“Manually”页签。

配置 Frequency plan、LoRaWAN version、Regional Parameters version,并添加设备 DevEUI、AppEUI、AppKey。

poYBAGMgKFqAS37VAAFg53ZQqEY222.png

注册设备

设备频段应与网关频段相同。

DevEUI、AppEUI、AppKey请在传感器示例代码中获取,切记需要删除各个数字前的“0x”以及“,”。

poYBAGMgKHKAa_QRAAHPLkE-5mw255.png

获取 DevEUI、AppEUI、AppKey

单击"Register and device",完成设备注册,注册结果将汇总如下图所示。

poYBAGMgKIeAA6e6AAG5Tv0o3nU932.png

设备信息

重启设备后,设备自动入网并定时向服务器传输实时监测数据。单击See all activity→,查看传输数据。

pYYBAGMgKWKAQNBWAAETAiTiX9I791.png

环境监测数据获取

添加 Datacake集成到 TTN

具体可参考:https://docs.datacake.de/lorawan/lns/thethingsindustries

poYBAGMgKXGAbtTxAABAqmU8N8s214.png

在 Datacake中配置设备

在这里,我假设已经设置 Datacake帐户,创建好了应用程序,并准备添加设备。如果大家没有创建好账户,可以通过Datacake 文档了解创建步骤

在 Datacake 应用程序中,单击“设备”以查看设备的概述。单击“添加设备”按钮开始。

pYYBAGMgKYOAIROHAAEjYsowrSw280.png

在下一个屏幕中,选择LoRaWAN New device并点击“Next”

poYBAGMgKZKAUEG2AACziGNVVO4957.png

选择New product并写入Product Name

pYYBAGMgKaGAZ1eRAAEHpZaSzis741.png

然后,向下滚动窗口,直到看到该部分。在此处选择“TTN V3”,选择它,然后单击“下一步”按钮。

poYBAGMgKdWAbg5cAADRjVbE22Q364.png

在下一步中,我们必须输入节点的 Dev EUI 和名称。Dev EUI 必须与之前在 TTN V3应用程序中选择的节点匹配。输入信息后,再次点击“下一步”按钮。

pYYBAGMgKeCAG4w9AADmmSBkpvU042.png

根据我们在 Datacake上的帐户,以及已经注册的设备数量,在不同的支付选项之间进行选择。完成此处选择后,按“添加1个设备”按钮。

poYBAGMgKfCAPJymAAC4lH871rs098.png

现在,可以在 Datacake的概述屏幕中看到新设备。

pYYBAGMgKfqAYC_pAAFIxnJPg3E433.png

在 Datacake 中为传感器节点创建数据解析器和数据字段

要完成设备的配置,请在概述中单击它。在下一个窗口中,选择 。Configuration

pYYBAGMgKkKAPLdGAAFlphpN9zo791.png

在配置中,向下滚动,直到看到该部分。在这里,必须要输入我们的自定义有效负载解码器才能获取到达的数据。正如图中所示,解码器返回一个嵌套的 JSON 数组,其中每个 JSON 条目都有两个字段。之后会转发到可视化界面,就能让传感器进行数据传输了。Payload Decoderfieldvaluefieldvalue

poYBAGMgKkuAOnjxAADGmVpyO3U234.png

为了使事情变得更容易,我准备了一个有效负载解码器,它将会与此示例配合使用,而且它也可以轻松扩展与我们其他的WisBlock 解决方案一起使用

为了节省时间,我将代码放在这里。使用以下内容覆盖示例负载解码器:

function Decoder(payload, port) {
if(payload[0] === 0x01) {
return [
{
field: "TEMPERATURE",
value: (payload[1] << 8 | payload[2]) / 100
},
{
field: "HUMIDITY",
value: (payload[3] << 8 | + payload[4]) / 100
},
{
field: "PRESSURE",
value: (payload[8] | (payload[7] << 8) | (payload[6] << 16) | (payload[5] << 24)) / 100
},
{
field: "GAS",
value: payload[12] | (payload[11] << 8) | (payload[10] << 16) | (payload[9] << 24)
},
];
}
}

pYYBAGMgKl2AWtRLAADxeCr-pI8941.png

现在,我们检查解码器是否正常工作。向下滚动并点击“保存”按钮以更新解码器。

poYBAGMgKmWAAWyKAABcoHcbe0U384.png

然后,一直向上滚动并选择选项卡。如果此时设备处于联机状态并且已发送数据,那么就可以 .DebugDebug Log。

poYBAGMgKnKAdVpEAADx1u8aG1o163.png

如果这有效,接下来就要做更多的工作了。Datacake 使用字段为可视化查找正确的数据,但必须要先定义所有字段。

返回到配置选项卡并向下滚动,直到看到该部分。到达那里后,单击添加字段按钮。Fields

poYBAGMgKnuAOUIFAABS8LZ56o8900.png

在窗口中,选择数据类型、字段名称和单位。Add Field

注意:这里必须与负载解码器中分配的字段名称匹配。因此,对于“温度”,正确的字段名称是“温度”。Identifier。

输入所有信息后,点击“添加字段”按钮。

poYBAGMgKoiABrsCAADKtZixm9M934.png

必须重复此步骤,直到定义了将包含传感器数据的所有四个字段。最后,应该如下所示:Fields

pYYBAGMgKpWAeQ-xAACjbtovr2g795.png

到这里,我们就完成所有的准备工作。现在,我们用一些漂亮的图表来显示数据。

设置仪表板以可视化传入的传感器数据

返回设备概述并打开选项卡。目前,它是空的。需要添加新的微件,单击右侧的小编辑图标。Dashboard

poYBAGMgKqWASVXfAABAd1yRjtk603.png

现在,我们会看到一个添加小部件按钮。单击它开始。

pYYBAGMgKseAMHdsAAAvaPIbmEM604.png

在下一个屏幕中,会看到一系列不同的可视化选项。我选择了这里。Chart

pYYBAGMgKtOAA0HBAADne9hDM9U551.png

下一个窗口有四个选项卡。从选项卡开始。就可以在此处输入图表标题。Basic

pYYBAGMgKt2AWkknAABxL_Zhyiw284.png

Field选项卡中,选择Temperature

pYYBAGMgKuWAZGRVAABjRUkRNiI825.png

现在,它将显示带有温度数据的第一个小部件。我们可以使用微件右下角的小箭头调整大小。

pYYBAGMgKvKAAn4kAAAo5K16eoo751.png

对其他字段重复这些步骤后,就可以看到包含接收数据的图表。主要要单击旁边的黄色图标保存你的操作,然后返回主仪表板视图。HumidityPressureAir QualityUnsaved changes

poYBAGMgKvuAJgI0AAGctfJ2Zns179.png

现在,来自环境传感器的数据以一个很好的可视化效果呈现出来了,我们可以从任何地方访问和查看。

添加Rules

这里我们可以对由设备测量值引起的事件执行操作。它们允许设置不同的触发器和警报,例如:

1、通过电子邮件或短信发送通知消息

2、通过网络挂钩调用外部服务

3、将下行链路发送到 LoRa®设备

pYYBAGMgKwmAM6xyAAD1WqqiA1c461.png

这里可以从工作区的侧边栏菜单创建和访问规则。与设备相关的规则(一个或多个条件引用设备)还会显示在设备的“规则”选项卡中。

通过单击右上角的“添加规则”按钮创建第一个规则。

poYBAGMgKxCAN1z9AAB3lu8qmNk303.png

我们在这里通过设置温度的告警值通过邮件的方式提醒

poYBAGMgKxuAMGBNAAGcWGcbIxA852.png

当温度高于 26℃ 时,Datacake将会通过邮件的方式通知,而且显示当前的温度

poYBAGMgKyWAYxI0AAAk9x-NuVo986.png

希望这个教程能够对大家有所帮助,如果大家有任何问题,也可以留言告诉我们。

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

    关注

    0

    文章

    35

    浏览量

    9938
  • LoRa
    +关注

    关注

    346

    文章

    1543

    浏览量

    230363
收藏 人收藏

    评论

    相关推荐

    环境监测的革新者:UWB模块在环境监测系统中的应用研究

    的核心组成部分,在环境监测系统中具有重要作用,可以实现环境参数(如温度、湿度、气体浓度等)的高精度监测和实时数据传输,为
    的头像 发表于 04-12 15:03 110次阅读

    景区环境监测方案监测参数与功能

    和集中管理的应用需求,利用物联网技术、数据通讯技术、地理信息技术等。针对景区环境监测设计搭建了一套或多套在景区生态区域环境观测大气、水体等方面数据的监测方案,
    的头像 发表于 04-11 17:24 101次阅读

    智慧旅游景区环境监测系统应用

    ,提升游客体验。 为了更好地满足环境监测的需求,智慧旅游景区环境监测系统应运而生。该系统集数据采集、存储、传输、管理于一体的环境自动监控
    的头像 发表于 04-09 15:57 117次阅读

    简单的家用环境监测传感器

    项目作者:黄桃味的酸奶本文来自全志XR806开发板评测活动文章,作者使用XR806开发板制作简单的家用环境监测传感器,可以获取当前的温度、湿度、气压、海拔这四参数,同时能够通过外
    发表于 03-25 11:25

    LoRa模块在环境监测中的角色:可持续发展的支持者

    随着全球对环境可持续发展的关注日益增加,环境监测变得尤为重要。LoRa(低功耗广域网)模块以其出色的通信能力和低功耗特性,为环境监测提供了强大的支持。本文将探讨
    的头像 发表于 03-20 10:43 118次阅读

    LoRa ZWS云应用(5)-环境监测系统组态篇

    面对环境监测需求复杂多变的行业现状,依托低代码平台快速构建环境监测行业系统效率高、投入低、响应快,已成为越来越多环境监测企业的心仪选择。应用
    的头像 发表于 02-19 12:10 398次阅读
    <b class='flag-5'>LoRa</b> ZWS云应用(5)-<b class='flag-5'>环境监测</b><b class='flag-5'>系统</b>组态篇

    LoRa ZWS云应用(4)-环境监测设备接入篇

    环境监测系统中,要将监测设备接入物联网云平台,才能进行对环境数据实现实时监测、统计分析等操作。
    的头像 发表于 01-26 08:25 411次阅读
    <b class='flag-5'>LoRa</b>  ZWS云应用(4)-<b class='flag-5'>环境监测</b>设备接入篇

    基于树莓派的环境监测系统

    派作为环境监测系统的核心 树莓派是一款低成本的单片机计算机,支持各种操作系统,如Linux等。它具有强大的处理能力和丰富的输入输出接口,使得它成为一个理想的环境监测
    的头像 发表于 01-04 15:15 430次阅读

    基于启明6M5开发板的无线环境监测小车系统设计

    本项目旨在基于启明6M5开发板设计一个无线环境监测小车系统,用于监测实验室环境,用户能够通过蓝牙对小车进行控制,并通过onenet云平台进行
    的头像 发表于 12-11 12:22 467次阅读
    基于启明6M5开发板的<b class='flag-5'>无线</b><b class='flag-5'>环境监测</b>小车<b class='flag-5'>系统</b>设计

    物联网网关设备在环境监测中应用实现环境状况的全方位监测和管理

    、大数据、人工智能等技术的快速发展,环境监测行业也在不断升级和转型。其中,基于物联网的环境监测系统得到了广泛应用,通过物联网网关连接传感器、设备和云平台,为企业提供了实时、准确的
    的头像 发表于 12-07 16:46 270次阅读
    物联网网关设备在<b class='flag-5'>环境监测</b>中应用<b class='flag-5'>实现</b>对<b class='flag-5'>环境</b>状况的全方位<b class='flag-5'>监测</b>和管理

    室内无线LORA温湿度传感器介绍

    无线LORA温湿度监测系统是一种基于LORA无线通信技术的
    的头像 发表于 11-17 13:56 378次阅读

    基于射频技术的无线环境监测系统设计与实现

    电子发烧友网站提供《基于射频技术的无线环境监测系统设计与实现.pdf》资料免费下载
    发表于 10-23 09:31 0次下载
    基于射频技术的<b class='flag-5'>无线</b><b class='flag-5'>环境监测</b><b class='flag-5'>系统</b>设计与<b class='flag-5'>实现</b>

    基于无线传感器网络的环境监测系统研究与设计

    电子发烧友网站提供《基于无线传感器网络的环境监测系统研究与设计.pdf》资料免费下载
    发表于 10-07 16:23 0次下载
    基于<b class='flag-5'>无线</b>传感器网络的<b class='flag-5'>环境监测</b><b class='flag-5'>系统</b>研究与设计

    基于DTU ZWS云组态,快速搭建智慧环境监测系统

    为了对环境数据进行精细化监测,辅助实现高效的环境治理,基于DTU&ZWS云组态,能够集成大气、水质、土壤等环境数据,进行组态数据大屏展示,实
    的头像 发表于 09-07 08:26 413次阅读
    基于DTU ZWS云组态,<b class='flag-5'>快速</b><b class='flag-5'>搭建</b>智慧<b class='flag-5'>环境监测</b><b class='flag-5'>系统</b>

    【开源】4G_Lora远程土壤环境监测

    概述: ​ SB-FSS08 是款基于C2M低代码核心模组开发的《4G_Lora远程土壤环境监测器》设备,可实现4G或Lora远程获取土
    发表于 06-15 09:47