基于OneNet平台设计的多节点温度采集系统-有人云4G模块+STM32

Posted DS小龙哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于OneNet平台设计的多节点温度采集系统-有人云4G模块+STM32相关的知识,希望对你有一定的参考价值。

一、设计说明

设计思路: 每个测量点采用4G+STM32+温度测量模块组成;采集温度数据之后直接上传到OneNet物联网云平台,在OneNET云平台上设计可视化界面进行显示,并且也可以在手机APP设备云上显示。

当前采用的物联网平台是OneNET云平台,OneNET中国移动物联网开放平台是由中国移动打造的PaaS物联网开放平台。平台能够帮助开发者轻松实现设备接入与设备连接,提供综合性的物联网解决方案,实现物联网设备的数据获取,数据存储,数据展现。

当前这个设计算是物联网技术的一个典型应用。目前物联网产业正在飞快发展着,从智能电视、智能家居、智能汽车、医疗健康、智能玩具、机器人等延伸到可穿戴设备领域。 物联网将赋能智能硬件向多元的消费场景渗透,从而创造更加便捷、舒适、安全、节能的生活环境。 物联网是通过约定的协议将原本独立存在的设备相互连接起来,并最终实现智能识别、定位、跟踪、监测、控制和管理的一种网络,无需人与人、或人与设备的互动。通俗来说物联网就是“物物相连的网”,主要应用于智能交通、智能医疗、智能家居、智能物流、智能电力等领域。

二、硬件选型

2.1 4G模块-WH-LTE-7S1

4G模块选择有人科技的WH-LTE-7S1 模块,支持全网通,外置了卡槽,可以插卡,本身模块也内置了电信卡,可以直接使用,不用考虑买卡,不用考虑卡接触不良等问题,内置的卡目前是8年免费使用,每月100M免费流量。

有人科技,插针式Cat-1模块(WH-LTE-7S1) 4G模块使用介绍:https://www.usr.cn/Product/294.html

下面是4G模块的功能参数:

透传模式, HTTPD模式工作模式
AT+命令结构设置指令
TCP/UDP/DNS/FTP/HTTP网络协议
4Socket数量
串口AT指令、网络AT指令用户配置
域名解析DNS支持
简单透传方式支持TCP Client /UDP Client
心跳数据包支持自定义心跳包/SN心跳包/ICCID心跳包/IMEI心跳包/LBS心跳包
注册包机制支持自定义注册包/SN注册包/ICCID注册包/IMEI注册包/CLOUD注册包
FOTA升级支持
套接字分发协议支持
基站定位支持
FTP他升级协议支持
NTP校时功能支持
工作状态指引脚支持

通过该模块可以快速实现串口与网络的双向数据透传:

**农业物联网环境监测案例:**可将农业大棚里各类传感器采集的数据,通过LTE或GPRS网络快速上传
至远程服务器,方便控制中心实时监测大棚动态,及时作出响应。

**两个WH-LTE-7S1通过有人云实现一对一透传:**https://www.usr.cn/Faq/1217.html

2.2 铂电阻PT100

铂电阻,简称为:铂热电阻,它的阻值会随着温度的变化而改变。它有PT100和 PT1000等等系列产品,它适用于医疗、电机、工业、温度计算、卫星、气象、阻值计算等高精温度设备,应用范围非常之广泛。

PT100铂电阻是PT100的简称,其中PT100是铂热电阻的分度号,PT代表热电阻的材质是铂,PT后的100即表示它在0℃时阻值为100欧姆,在100℃时它的阻值约为138.5欧姆。它的阻值会随着温度的变化而改变。

2.3 STM32系统板

STM32采用STM32F103RCT6,FLASH256KB,RAM48KB,主频72MHZ。

三、OneNet云平台创建

OneNET资源模型如下图:

下面是名词的解释:

【1】产品(product)
用户的最大资源集为产品,产品下资源包括设备、设备数据、设备权限、数据触发服务以及基于设备数据的应用等多种资源,用户可以创建多个产品。

【2】设备(device)
设备为真实终端在平台的映射,真实终端连接平台时,需要与平台设备建立一一对应关系,终端上传的数据被存储在数据流中,设备可以拥有一个或者多个数据流。

【3】数据流与数据点
数据流用于存储设备的某一类属性数据,例如温度,湿度,坐标等信息;平台要求设备上传并存储数据时,必须以key-value的格式上传数据,其中key即为数据流名称,value为实际存储的数据点,value格式可以为int、float、string、json等多种自定义格式。

【4】APIkey
APIkey为用户进行API调用时的密钥,用户访问产品资源时,必须使用该产品目录下对应的APIkey。

【5】触发器(trigger)
触发器为产品目录下的消息服务,可以进行基于数据流的简单逻辑判断并触发HTTP请求或者邮件。

【6】应用(application)
应用编辑服务,支持用户以拖拽控件并关联设备数据流的方式,生成简易网页展示应用。

3.1 官网首页

地址: https://open.iot.10086.cn/

如果没有onenet的账号,点击右上角进行账号注册,注册之后完成实名认证即可。

在产品服务里可以看到常见物联网接入服务:

3.2 创建产品

(1)控制台页面

点击右上角的控制台按钮,进入旧版控制台。 (切换成旧版,需要使用多协议接入)

(2)多协议接入

选择多协议接入:

(3)HTTP协议

选择HTTP协议,点击添加产品。

(4)填写产品信息

根据自己的项目情况,去填写这里的产品信息。

填好之后,点击确定即可。

3.3 添加设备

产品创建完之后,点击添加设备。

(1)添加设备

(2)设置设备信息

根据自己的设备信息填写。

(3)添加多个采集点设备

因为采集点有多个,一个采集点就是一个独立的设备,如果有40个采集点,就创建40个设备。

我这里为了方便测试,就创建3个设备,对应3个采集点。

添加完成:

3.4 创建数据流模板

(1)添加数据流模板

数据流模板是设置设备上报数据时存放的属性字段。

(2)添加温度字段

添加温度字段。 目前采集点只是采集温度,这里创建一个温度字段就行了。 如果采集点还需要采集更多的数据类型,这里按格式添加即可。

(3)添加完成

添加后,如果页面没有出来,鼠标右键刷新一下页面就能看到。

3.5 数据点上传

多协议接入帮助文档地址:https://open.iot.10086.cn/doc/v5/develop/detail/multiprotocol

平台通过数据流与数据点来组织设备上行数据,如下图所示:

设备上传并存储数据时,必须以key-value的格式上传数据,其中key即为数据流(stream)名称,value为实际存储的数据点(point),value格式可以为int、float、string、json等多种自定义格式。

在实际应用中,数据流可以被用于分类描述设备的某一类属性数据,例如温度,湿度,坐标等信息,用户可以自定义数据流的数据范围,将相关性较高的数据归类为一个数据流。

(1)平台接入地址

目前是采用HTTP协议上传数据,HTTP协议是短连接,所以在设备页面是看不到设备在线的情况。

IP地址: 183.230.40.33
端口号: 80

(2)创建设备APIKey

通过HTTP协议上传数据时,需要设备的apikey作为密匙。

【1】在设备列表页面,单击详情:

【2】点击添加APIKey

因为我这是设备节点3,为了好区别,我这里设置dev3

【3】添加成功

【4】将剩下的2个温度采集设备也创建APIKey

(3)设备ID

每个设备创建后都有一个ID,上传数据时,需要填写这个ID。

在设备详情页面可以看到这个ID。

(4)列出当前设备的ID和APIkey

为了方便接下来测试,我把3个设备的ID和APIkey先贴出来待用。

温度采集设备1
设备ID:  1009326949
APIKey:  Q1=mhFwn=zt6nfp1EYvSsUcwUX8=

温度采集设备2
设备ID:  1009327662
APIKey:  ezI=f3T=47=jlJssgKH2xVcLtBU=

温度采集设备3
设备ID:  1009327756
APIKey:  KkHKbNWmy4diHtpT=D=AfoZxy3w=

(5)数据点上传格式

当前选择的是HTTP协议上传数据,下面是标准的HTTP报文格式:

POST /devices/<填设备ID>/datapoints HTTP/1.1
api-key:<填设备的ApiKey>
Host:api.heclouds.com
Connection:close
Content-Length:<填下面需要上传的数据总字节数>

"datastreams":["id":"<填数据流名称>","datapoints":["value":<上传的值>]]

比如:我给设备采集节点1,上传一个温度值。HTTP的报文格式按如下填写。

POST /devices/1009326949/datapoints HTTP/1.1
api-key:Q1=mhFwn=zt6nfp1EYvSsUcwUX8=
Host:api.heclouds.com
Connection:close
Content-Length:61

"datastreams":["id":"temp","datapoints":["value":24.5]]

手动测试组合报文赋值的时候,这个数据长度的计算可以通过编辑器(我用的notepad++)完成。

如果在程序里发送数据时,下面的数据长度可以动态计算的(strlen)。

3.6 模拟数据上传测试

为了方便验证云平台是否能正常使用,下面使用TCP调试助手来模拟设备发出HTTP报文(上传数据点)给OneNet平台完成测试。

(1)打开网络调试助手

输入远程IP地址和端口号,然后点击连接。

IP地址: 183.230.40.33
端口号: 80

连接成功:

(2)输入发送的数据

POST /devices/1009326949/datapoints HTTP/1.1
api-key:Q1=mhFwn=zt6nfp1EYvSsUcwUX8=
Host:api.heclouds.com
Connection:close
Content-Length:61

"datastreams":["id":"temp","datapoints":["value":24.5]]

特别说明:

【1】 复制上面代码到下面的网络调试助手的时候,要注意格式。因为PDF文档复制的时候会导致换行符这些丢失。 要按下面红色框框这样的格式贴进去,才能发送。

【2】HTTP端口连接上之后,如果没有发送数据,过一会会自动断开连接的,或者一次数据发送成功,服务器也会断开连接。每次发送之前重新连接上,再发送即可。

发送成功的提示:

(3)登录云平台查看数据

刚才测试数据上传的是设备1,在设备详情页面找打设备1,点开设备详情页面,找到数据流展示页面,可以看到刚才上传的数据。

(4)剩下的温度采集节点上传温度测试

其他的温度检测设备节点如果要上传数据,也是一样的方式。

下面将3个设备的发送数据格式都列出来,方便填入调试助手发送测试:

温度采集设备1: 
POST /devices/1009326949/datapoints HTTP/1.1
api-key:Q1=mhFwn=zt6nfp1EYvSsUcwUX8=
Host:api.heclouds.com
Connection:close
Content-Length:61

"datastreams":["id":"temp","datapoints":["value":24.5]]


温度采集设备2: 
POST /devices/1009327662/datapoints HTTP/1.1
api-key:ezI=f3T=47=jlJssgKH2xVcLtBU=
Host:api.heclouds.com
Connection:close
Content-Length:61

"datastreams":["id":"temp","datapoints":["value":25.5]]


温度采集设备3: 
POST /devices/1009327756/datapoints HTTP/1.1
api-key:KkHKbNWmy4diHtpT=D=AfoZxy3w=
Host:api.heclouds.com
Connection:close
Content-Length:61

"datastreams":["id":"temp","datapoints":["value":26.5]]

四、可视化页面设计

为了方便展示温度信息,可以利用onenet提供的可视化组件设计一个网页进行显示。

地址: https://open.iot.10086.cn/studio/view/project

目前OneNet的View数据可视化组件分为3个权限: 基础版、企业版、专业版; 基础版也就是免费版,可以使用基本的组件。 一般要求不高的数据展示,基础版就差不多够用的。

下面是企业版的价格费用:

4.1 创建数据源模板

可视化页面上的控件显示数据时,需要设置数据来源。所以,这里先创建数据的来源。

(1)创建源模板

(2)填写数据源的信息

根据提示填写产品ID和Key,下面的设备和数据流选择对应的设备即可。每个设备都需要建立一个数据源模板。

(3)产品ID和key在哪里看?

在产品的概述页面,可以找到产品ID和对应的key。

(4)创建完成

为了好区分名字,可以将数据源模板的名称按照序号设置,这样一个设备对应一个数据源。

因为我创建了3个设备,这里对应创建了3个数据源模板。

4.2 创建可视化页面

(1)新建项目

新建项目可以选择空白模板,也可以选择现有的模板创建。 就算选择空白模板,也可以去参考现成的模块设计的。

我这里选择空白模板创建新项目。

新建成功后,点击编辑按钮进行页面设计。

(2)控件介绍

进入到编辑页面,可以看到有很多的控件可以选择使用。其中带的表示,当前基础版无法使用,高级控件需要升级专业版才可以使用。(新用户有7天的专业版试用期,可以体验一下专业版的控件)

(3)新建多个子页面

为了方便显示每个采集点的温度信息,可以新建多个子页面显示数据,也可以在一个页面显示,具体看自己需求。

我这里新建了3个页面,分别显示3个采集点的温度数据。 并且页面的名字,页面的类型都可以修改。 页面类似可以选择PC端样式,也可以选择手机端样式。

(4)控件选择数据源

每个控件显示的数据,可以选择数据的来源。

比如: 我使用仪表盘显示温度信息,点击仪表盘控件,在右边选择数据源。

第一步,选择管理数据源。

第二步。使用数据源模板新建数据源

新建成功的3个数据源。

第三步,设置控件的数据源

比如:我这个仪表盘显示温度采集点1的数据,就选择数据源为设备1的数据。 并且需要把下面的数据过滤器去掉。

(5)界面样式设计

【1】修改表盘显示的单位为摄氏度。

【2】为了方便区分设备,添加一个标题,显示文字提示

记得去掉数据过滤器。

界面的背景也可以设置,也可以设置图片作为背景。

(6)保存界面发布

由于onenet的可视化界面处于维护期,这个期间编写的界面无法保存,发布。 但是在编辑页面的仪表盘还是可以看到数据的实时变化,可以测试整套流程。 等10.24之后,应该就可以正常使用了,到时候在重新设计页面。

(7)设备云APP

在手机上安装设备云APP,如果项目发布之后,除了分享链接浏览器打开查看以外,也可以登录手机APP查看页面。

下面是手机APP上的效果:

五、规则引擎与触发器

5.1 触发器设置

触发器可以设置一些简单的条件,比如,温度大于多少,小于多少。 可以让OneNet给指定地址发送邮件通知。或者当指定范围内的数据点满足触发条件的要求时,也可以向url参数指定的地址发送post请求(可以对接自己的服务器)。

(1)添加触发器

(2)设置触发条件

可以选择关联指定设备,或者关联全部设备。然后设置触发条件,设置关联的邮箱。

当温度超出某个阀值,可以触发条件,发送邮件通知。

(3)设置成功

(4)测试触发条件

我这里的触发条件是温度大于50就会发送邮件。这里采用网络调试助手测试,上传一个大于50的温度,触发条件发送邮件。

发送数据之后,可以看到邮件已经收到了。

5.2 添加规则

(1)添加规则

(2)设置规则

可以设置规则的筛选方式。

(3)开通SMS短信服务

地址: https://open.iot.10086.cn/sms/console/product/#/openSms

目前短信服务是针对企业开放。

六、硬件部分

6.1 有人云WH-LTE-7S1模块调试

(1)模块引脚功能说明

模块的使用说明书:https://www.usr.cn/Down/WH-LTE-7S1_V1.0.4.pdf

拿到模块之后首先就是要了解引脚说明,明白每个引脚的功能。 在手册的第9页,有对模块引脚的介绍。

下面是模块的实物图:

调试模块时,必接的引脚有5个。 分别是:电源VCC(5V),电源GND,串口发送,串口接收,开机引脚。

下面标出这几个引脚的位置:

下面是接好线的实物图:

下面是标出引脚的排线编号规律:

接线说明: 接线时认真看IO口编号,对号入座,千万别接错了。

目前模块供电的VCC+正极有2个脚。一个支持3.4-4.2V (第16脚),一个支持5V~16V(第13脚和第14脚)。供电的时候,这两个脚只能选择其中一个。 其中,3.4-4.2V 供电是留给锂电池使用的,5V~16V的供电接口方便接单片机的电源。

当前的这个项目是需要使用STM32开发板来驱动模块完成网络连接,处理。 所以,这里模块供电引脚直接选择5V,方便接在单片机开发板引出的电源口上。

接线总结:

模块的第6个脚(UART-TX): 接单片机或者USB转TTL模块的RXD
模块的第7个脚(UART-RX): 接单片机或者USB转TTL模块的TXD
模块的第10个脚(key):    接单片机的电源正-3.3v (表示模块开机)
模块的第12个脚(GND):    接单片机的电源地-GND (给模块供电)
模块的第13个脚(DCIN):   接单片机的电源正-5v (给模块供电)

(2)模块接上位机软件测试

第一次拿到模块,肯定要先测试模块是否正常。 有人科技提供了模块对应的串口调试上位机,可以直接在官网下载。

【1】下载上位机调试软件

下载地址:https://www.usr.cn/Download/939.html

【2】将模块与USB-TTL模块接好线,连接到电脑USB口上。

接线按下面的来:

模块的第6个脚(UART-TX): 接单片机或者USB转TTL模块的RXD
模块的第7个脚(UART-RX): 接单片机或者USB转TTL模块的TXD
模块的第10个脚(key):    接单片机的电源正-3.3v (表示模块开机)
模块的第12个脚(GND):    接单片机的电源地-GND (给模块供电)
模块的第13个脚(DCIN):   接单片机的电源正-5v (给模块供电)

【3】打开软件测试模块

软件打开后,选择串口后,打开串口。 点击获取当前参数,就能看到串口打印获取到数据。

依次可以点击查询信号强度,查询当前版本,查询DMEI:

注意: 模块默认的工作模式是NET模式,他也就是连接的有人的服务器。 如果要执行AT指令,需要先进入配置状态才可以正常执行。

(3)模块状态指示灯

模块的第9个引脚是状态指示灯输出接口,正常启动后,这个引脚会按照1 秒的频率输出高低电平变化,可以将这个引脚接在单片机上的某个LED灯口上,通过观察LED灯的闪烁状态确定模块是否正常工作。也可以作为输入脚接到单片机的某个IO口上,用于判断模块是否工作正常。

(4)模块的AT指令手册

下载地址:https://www.usr.cn/Download/940.html

(5)有人的测试服务器

服务器: socket.usr.cn

端口号: 2317

这是有人的公网测试TCP服务器,向这个服务器发送数据,服务器会将发送的数据返回。 可以用这个服务器测试4G模块的联网情况。

6.2 示例代码

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include <string.h>
#include "timer.h"
#include "ds18b20.h"


/*
硬件连接方式:

(1) 有人的WH-LTE-7S1-4G模块与STM32的串口3连接。

模块的第6个脚(UART-TX): 接单片机PB11(RXD)
模块的第7个脚(UART-RX): 接单片机PB10(TXD)
模块的第10个脚(key)   : 接单片机的电源正-3.3v (表示模块开机)
模块的第12个脚(GND)   : 接单片机的电源地-GND (给模块供电)
模块的第13个脚(DCIN)  : 接单片机的电源正-5v (给模块供电)


(2) DS18B20温度传感器
VCC---3.3V
GND---GND
PB15---DS18B20(IN)

*/




//判断网络是否建立连接
// 建立后输出高电平  否则是低电平
//STM32的PE0接在模块的第1个脚
#define m_LTE4G_LINKA PEin(0) 
void LTE4G_GetLINKA_State()

  //开时钟
    RCC->APB2ENR|=1<<6;
    //配置模式
    GPIOE->CRL&=0xFFFFFFF0;
    GPIOE->CRL|=0x00000008;


int main()

    u8 i;
    u8 run=0;
    u32 time_cnt=0;
    u16 ds18b20_temp;
    char tmp_buffer[10];
    

    USART1_Init(115200); //串口1用于Debug打印
    
    USART3_Init(115200);   //串口3接4G模块
    TIMER3_Init(72,20000); //超时时间20ms
    
    DS18B20_Init(); //温度传感器
    
    LTE4G_GetLINKA_State();
  
    //检测DS18B20硬件状态
    run=DS18B20_Check();
    if(run==0)
    
        printf("DS18B20 温度传感器正常.\\r\\n");
    
    else
    
        printf("DS18B20 温度传感器不存在.\\r\\n");
    
    
    
    printf("正在初始化4G模块请稍等.\\r\\n");
    for(i=0;i<5;i++)
    
        printf("配置第%d次\\r\\n",i);
        run=LTE4G_TCP_ConnectCogfig();
        if(run==0)
        
            printf("配置成功.\\r\\n");
            break;
        
        else
        
            printf("本次配置失败,错误编号:%d\\r\\n",run);
        
        
        delay_ms(1000);
    
    
    
    while(1)
      
        //2秒钟上传一次
        if(time_cnt>200)
        
            time_cnt=0;
            
            //读取一次温度
            ds18b20_temp=DS18B20_ReadTemp();
            if(ds18b20_temp==65535)
            
                 //默认温度
                sprintf(tmp_buffer,"%s","26.8");
            
            else
            
              //转换后得到温度
              sprintf(tmp_buffer,"%d.%d",ds18b20_temp>>4,ds18b20_temp&0xF);
            
           
            //查询信号质量
            LTE4G_GetCSQ();
            
            //查询连接的服务器配置
            LTE4G_GetSOCKA();
            
            //查询重连时间间隔
            LTE4G_GetSOCKRSTIM();
            
            
            if(m_LTE4G_LINKA)
            
                printf("网络连接正常...\\r\\n");
            
            else
            
                 printf("模块网络未连接...\\r\\n");
            
          
            
            //发送一次温度
            run=SendTemp_To_OneNet(tmp_buffer);
            if(run)
            
                printf("本次温度发送失败.\\r\\n");
            
            else
            
                printf("温度上传成功.\\r\\n");
            
            //清理接收缓冲区
            ClearUSART3_RxBuff();
        
        
        //接收4G模块返回的数据
        if(USART3_RX_FLAG)
        
            USART3_RX_BUFFER[USART3_RX_CNT]='\\0';
            
            printf("4G模块收到数据.....\\r\\n");
            //向串口打印4G模块返回的数据
            for(i=0;i<USART3_RX_CNT;i++)
            
                printf("%c",USART3_RX_BUFFER[i]);
            
            
            USART3_RX_CNT=0;
            USART3_RX_FLAG=0;
        


        //轮询记时
        DelayMs(10以上是关于基于OneNet平台设计的多节点温度采集系统-有人云4G模块+STM32的主要内容,如果未能解决你的问题,请参考以下文章

基于华为云IOT平台实现多节点温度采集(STM32+NBIOT)

基于华为云IOT平台实现多节点温度采集(STM32+NBIOT)

带你动手设计一个高速公路多节点温度采集系统

基于STM32设计物联网在线智能称重系统(OneNet)_2022

基于STM32设计物联网在线智能称重系统(OneNet)_2022

基于单片机多功能智能台灯控制系统设计(时钟姿态矫正温度采集)