花 1 小时,开源设计 LoRa 温湿度终端

提示1:锐米所有 LoRa 产品严格遵循国标标准的 LoRaWAN 协议
提示2:您可以免费复制,修改和商用本项目,请注明锐米原创
提示3:如果您有其他 LoRa 需求或建议,欢迎联系锐米 [email protected]

花 1 小时,开源设计 LoRa 温湿度终端_第1张图片

LoRa 温湿度采集

采集温湿度,基于 LoRa 传送到服务器,通过 APP 查看数值和设置采样间隔。
**物联网 Arduino LoRa LoRaWAN 温湿度采集 **

运行效果

如下图所示,上电启动后 LoRa 终端每 10 秒上报 8 字节温湿度数据(2 个浮点型,小端)。
当用户设置采样间隔 20 秒,App 向终端发送字符串“ST:P:20”(指令字符串 Set:Period:20 的缩写)。终端接收并解析该指令,随后它调整采样间隔到 20 秒。
花 1 小时,开源设计 LoRa 温湿度终端_第2张图片

项目介绍

温度和湿度是一种既常见又重要的环境参数,除了仓库,农业,工厂,机房外,如下图所示的场景更具重要意义。

温湿度场景一:医药冷链
花 1 小时,开源设计 LoRa 温湿度终端_第3张图片
温湿度场景二:食品保鲜
花 1 小时,开源设计 LoRa 温湿度终端_第4张图片
相比传统的产品,LoRa 温湿度终端具备的优点为:

  • 安装简单便捷,不需要布线
  • 远程采集,维保便捷
  • 成本低廉,没有流量费用
  • 超低功耗,2节5号电池工作数年

本项目开源设计 LoRa 温湿度终端的核心—软件和硬件,用户选择一个漂亮的外壳和电池,即可组成一个产品。
同时,简介了 LoRa 网络组件,轻松构建一个商用的温湿度物联网。

低成本快速开发

本项目基于 ArduinoLoRa 开源平台,它一种“革命性”解决方案,详情请链接:低成本快速开发 LoRa 终端:从 0 到 1

组件和材料

LoRa扩展板LoRa 扩展板 x 1 采购链接
Arduino UNO Arduino UNO x 1 采购链接

花 1 小时,开源设计 LoRa 温湿度终端_第5张图片SHT20 x 1 采购链接
天线天线 x 1 采购链接
在这里插入图片描述杜邦线 x 4 采购链接

软件和网络

LoRa网关 LoRa网关 采购链接
LoRaServer 下载链接
LoRaAppLoRaApp 下载链接
Arduino IDEArduino IDE 下载链接

技术细节

元器件介绍

LoRa 扩展板
这是专为 Arduino 而设计的 LoRa 扩展板,既可以安装在 Arduino UNO 上,也能使用杜邦线连接到 Arduino Pro Mini。

它能达到空旷 10km 的通信距离,休眠电流仅 1.3uA。精心设计的软件库,使其开发极为容易:

  • 发送数据
LoRa.write("123", 3);
  • 接收数据
if (LoRa.availabe()) { 
    len = LoRa.read(buf, MAX_LEN); 
}

Arduino UNO
Arduino UNO 是最常用的开发板,它便宜简单,接线方便。

花 1 小时,开源设计 LoRa 温湿度终端_第6张图片
SHT20 是瑞士 Sensirion 公司出口的温湿度传感器,大品牌,系列化,价格合适,使用者众多。

  • 温度:-40~125℃,±0.3℃
  • 湿度:0~100%RH,±3%RH

天线
470MHz 高频胶棒天线,增益 3.5dB,特别适合中国 LoRa 频段范围(470~510MHz)。

硬件接线

如下图所示,使用公对母的杜邦线连接 Arduino 和 SHT20 模块

Arduino 杜邦线 SHT20
3.3V vcc
GND gnd
A4 绿 sda
A5 scl

花 1 小时,开源设计 LoRa 温湿度终端_第7张图片
花 1 小时,开源设计 LoRa 温湿度终端_第8张图片

通信逻辑

如下图所示,终端上报温湿度数据,App 下行控制终端的采样间隔。

为此,需要配置如下的网络组件:

  • LoRa 网关重定向到本地 Server
  • 在 LoRa Server 上添加终端
  • LoRa App 连接到 LoRa Server
  • 配置 LoRa App
    花 1 小时,开源设计 LoRa 温湿度终端_第9张图片

行业第一的超低功耗—休眠仅 1.4uA

如下图所示(实物拍摄),Arduino LoRa+ 的低功耗可达 1.4uA,这不仅是行业第一的超低功耗,而且达到了器件极限 ArduinoLoRa 休眠极限 1.4uA
在这里插入图片描述
如下图所示,2 节 5 号碱性电池容量约 2890mAH,因为温湿度短时间变化不大,设每 10 分钟采集,电池可工作近 6 年。
终端电池寿命计算器
在这里插入图片描述

Arduino 代码

编译本工程需要添加 LoRa 和 SHT20 驱动库,下载这 2 个库:
LoRa 驱动库
SHT20 驱动库

使用 Arduino IDE 打开工程,点击"Sketch / Include Library / Add .ZIP Library…"

Arduino 的 zip 库安装路径一般为:C:\Users\Administrator\Documents\Arduino\libraries

Arduino 的代码简洁,容易理解,下载链接

  • DEBUG 设置为 0 禁止调试功能;设置为 1 它将通过 8 和 9 两个引脚打印调试信息(使用“USB转串口”连接到 PC)
  • Sample() 从 SHT20 采集温湿度,通过 LoRa 发送到 App
  • ParseCmd() 从 App 接收指令(格式=ST:P:xxx),解析并设置上报间隔
  • CvtInt() 将字符串(如“123”)转换成数值(如123)
#include "Wire.h"
#include "DFRobot_SHT20.h"
#include 

lora LoRa;
DFRobot_SHT20    sht20;

#define MIN_PERIOD    10
unsigned int period = 10;

#define DEBUG    0

#if DEBUG
#include 
SoftwareSerial debugSerial(8, 9);  // 8=RX, 9=TX
#endif

void setup()
{
    sht20.initSHT20(); // Init SHT20 Sensor
    delay(100);  // for SHT20 initialize itself

    Serial.begin(115200); 

#if DEBUG
    debugSerial.begin(9600); // start software serial port at 9600-8-N-1
#endif
}

void loop()
{
    Sample();

    ParseCmd();
    
#if DEBUG
    debugSerial.println(period);
#endif
 
    delay(period * 1000);
}
  

void Sample() 
{
    float array[2];
  
    array[0] = sht20.readTemperature(); // Read Temperature
    array[1] = sht20.readHumidity(); // Read Humidity
  
    LoRa.write(array, sizeof(array));
}


void ParseCmd()
{
    #define MAXINSZ    9  // like as: ST:P:xxx
    char instr[MAXINSZ];    // Input buffer
    int  len;
    
    if (LoRa.available() == 0) {
        return;
    }

    len = LoRa.read(instr, MAXINSZ);
    if (('S' == instr[0]) && ('T' == instr[1]) && (':' == instr[2]) && ('P' == instr[3]) && (':' == instr[4])) {  // match the "ST:P:"   
        period = CvtInt(instr, 5, len);
        if (period < MIN_PERIOD) {
            period = MIN_PERIOD;
        }
        
    }
}

// Convert ASCII digit character to numeric value by subtracting
// 0x30 ('0'), and mult by decade position (i.e. 1, 10, or 100).
// Will not convert numbers larger than 999.
int CvtInt(char *strval, int strt, int slen)
{
    int intval;

    if ((slen - strt) == 1) {
        intval = strval[strt] - '0';
    }
    else if ((slen - strt) == 2) {
        intval = ((strval[strt] - '0') * 10) + (strval[strt+1] - '0');
    }
    else if ((slen - strt) == 3) {
        intval = ((strval[strt] - '0') * 100) + ((strval[strt+1] - '0') * 10) + (strval[strt+2] - '0');
    }
    else
        intval = 0;

    return intval;
}

低成本批量生产

批量生产的一些技术挑战:尺寸,成本,功耗,烧录,升级
我们为您准备好解决方案:低成本快速开发LoRa终端:从1到10000

你可能感兴趣的:(LoRaWAN,LoRaDevice,LoRa,LoRaWAN,Arduino,温湿度,IoT)