1

#打卡不停更# 基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区-51C...

 1 year ago
source link: https://ost.51cto.com/posts/18527
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

一、设计说明

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

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

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

二、硬件选型

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

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

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

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

两个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欧姆。它的阻值会随着温度的变化而改变。

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

2.3 STM32系统板

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

三、OneNet云平台创建

OneNET资源模型如下图:

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

下面是名词的解释:

【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的账号,点击右上角进行账号注册,注册之后完成实名认证即可。

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

3.2 创建产品

(1)控制台页面

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(2)多协议接入

选择多协议接入:

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(3)HTTP协议

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(4)填写产品信息

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区
#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

3.3 添加设备

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(1)添加设备

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(2)设置设备信息

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

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

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

添加完成:

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

3.4 创建数据流模板

(1)添加数据流模板

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(2)添加温度字段

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(3)添加完成

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

3.5 数据点上传

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

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

设备上传并存储数据时,必须以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】在设备列表页面,单击详情:

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

【2】点击添加APIKey

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

【3】添加成功

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区
#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(3)设备ID

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

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(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)。

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

3.6 模拟数据上传测试

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

(1)打开网络调试助手

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

IP地址: 183.230.40.33
端口号: 80
#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

连接成功:

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(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端口连接上之后,如果没有发送数据,过一会会自动断开连接的,或者一次数据发送成功,服务器也会断开连接。每次发送之前重新连接上,再发送即可。

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

发送成功的提示:

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(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平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

4.1 创建数据源模板

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

(1)创建源模板

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(2)填写数据源的信息

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(4)创建完成

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

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

4.2 创建可视化页面

(1)新建项目

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(2)控件介绍

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(3)新建多个子页面

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

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(4)控件选择数据源

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

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

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

新建成功的3个数据源。

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(5)界面样式设计

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

记得去掉数据过滤器。

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(6)保存界面发布

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(7)设备云APP

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

下面是手机APP上的效果:

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区
#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区
#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区
#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

五、规则引擎与触发器

5.1 触发器设置

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

(1)添加触发器

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(2)设置触发条件

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

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(3)设置成功

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(4)测试触发条件

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

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区
#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

5.2 添加规则

(1)添加规则

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(2)设置规则

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区
#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(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页,有对模块引脚的介绍。

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

下面是模块的实物图:

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

下面是接好线的实物图:

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

接线说明: 接线时认真看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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

【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】打开软件测试模块

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(3)模块状态指示灯

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(4)模块的AT指令手册

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区
#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

(5)有人的测试服务器

服务器: socket.usr.cn

端口号: 2317

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

#打卡不停更#  基于OneNet平台设计的多节点温度采集系统-4G上云-开源基础软件社区

6.2 示例代码

下面是STM32ZET6 + 4G +DS18B20的代码,利用4G模块将采集的DS18B20温度上传到OneNet平台。

#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)
​
*/
​
​
/*
函数功能: 清理串口3接收缓冲区
*/
void ClearUSART3_RxBuff()
{
   //清理串口接收缓冲区
    USART3_RX_FLAG=0;
    USART3_RX_CNT=0;
    memset(USART3_RX_BUFFER,0,sizeof(USART3_RX_BUFFER));
}
​
​
/*
函数功能: 向4G模块发送命令
函数返回值:0表示成功  1表示失败
*/
u8 LTE4G_TCP_SendCmd(char *cmd)
{
    u8 i=0;
    ClearUSART3_RxBuff();
    USARTx_StringSend(USART3,cmd);
​
    //等待模块响应
    for(i=0;i<5;i++)
    {
        delay_ms(200);
        if(USART3_RX_FLAG)
        {
            USART3_RX_BUFFER[USART3_RX_CNT]='\0';
            printf("RX: %s\r\n",USART3_RX_BUFFER);  
            if(strstr((char*)USART3_RX_BUFFER,"OK"))
            {
                return 0;
            }
        }
    }
    
    return 1;
}
​
/*
函数功能: 查询信号强度
*/
u8 LTE4G_GetCSQ(void)
{
    u8 run=0;
    //发送查询信号强指令
    //在透传模式下, 可以在命令前面加  usr.cn#  即可正常使用命令,而不用进入到配置模式(AT指令模式)。
    run=LTE4G_TCP_SendCmd("usr.cn#AT+CSQ\r\n");
    
    //处理数据
    //....
    return run;
}
​
​
/*
函数功能: 查询SOCKA连接的服务器配置
*/
u8 LTE4G_GetSOCKA()
{
    u8 run=0;
    //发送查询连接服务器的指令
    //在透传模式下, 可以在命令前面加  usr.cn#  即可正常使用命令,而不用进入到配置模式(AT指令模式)。
    run=LTE4G_TCP_SendCmd("usr.cn#AT+SOCKA\r\n");
    //处理数据
    //....
  
    return run;
}
​
​
/*
函数功能: 查询socket重连时间间隔
*/
u8 LTE4G_GetSOCKRSTIM()
{
    u8 run=0;
    //在透传模式下, 可以在命令前面加  usr.cn#  即可正常使用命令,而不用进入到配置模式(AT指令模式)。
    run=LTE4G_TCP_SendCmd("usr.cn#AT+SOCKRSTIM\r\n");
    //处理数据
    //....
  
    return run;
}
​
​
​
​
/*
函数功能: 4G模块连接TCP服务器配置
函数返回值:0表示成功  1表示失败
*/
u8 LTE4G_TCP_ConnectCogfig(void)
{
    u8 run;
    
    //清理串口接收缓冲区
    ClearUSART3_RxBuff();
    
    //配置模块退出透传模式,进入AT指令配置模式
    USARTx_StringSend(USART3,"+++");
    delay_ms(200);
    USARTx_StringSend(USART3,"a");
    delay_ms(200);
    
    //判断是否成功
    if(USART3_RX_FLAG)
    {
        USART3_RX_BUFFER[USART3_RX_CNT]='\0';
        printf("RX: %s\r\n",USART3_RX_BUFFER);  
        if(strstr((char*)USART3_RX_BUFFER,"ok"))
        {
            //1. 配置4G模块的模式为NET模式(可以理解为TCP透传模式)
            run=LTE4G_TCP_SendCmd("AT+WKMOD=NET\r\n");
            if(run)return 1;                
            
            //2. 配置4G模块连接的服务器地址信息
            run=LTE4G_TCP_SendCmd("AT+SOCKA=TCP,183.230.40.33,80\r\n");
            if(run)return 2;   
                        
            //3. 保存配置并重启
            run=LTE4G_TCP_SendCmd("AT+S\r\n");
            if(run)return 3; 
​
            //等待4秒,模块重启成功
            delay_ms(4000);
        }
    }
    else
    {
        return 1;   
    } 
    
    return 0;
}
​
​
/*
函数功能  : 发送数据
函数返回值: 0表示成功  1表示失败
*/
u8 LTE4G_TCP_SendData(char *data)
{
    u8 i=0;
    //清理接收缓冲区
    ClearUSART3_RxBuff();
    //发送查询服务器连接状态指令
    //在透传模式下, 可以在命令前面加  usr.cn#  即可正常使用命令,而不用进入到配置模式(AT指令模式)。
    USARTx_StringSend(USART3,"usr.cn#AT+SOCKALK\r\n");
    //等待模块响应
    for(i=0;i<5;i++)
    {
        delay_ms(200);
        if(USART3_RX_FLAG)
        {
            USART3_RX_BUFFER[USART3_RX_CNT]='\0';
            printf("RX: %s\r\n",USART3_RX_BUFFER); 
​
            //断开状态
            if(strstr((char*)USART3_RX_BUFFER,"Dis"))
            {
               break;
            }
            //连接状态
            else if(strstr((char*)USART3_RX_BUFFER,"Connect"))
            {
                //发送数据
                USARTx_StringSend(USART3,data);
                printf("TX:\r\n%s\r\n",data);
                return 0;
            }
        }
    }
    return 1;    
}
​
​
/*
函数功能: 发送一次温度数据到OneNet
*/
u8 SendTemp_To_OneNet(char *ds18b20_tmp)
{
    char send_http_cmd[300];
    //拼接数据
    snprintf(send_http_cmd,sizeof(send_http_cmd)-1,
                                "POST /devices/1009326949/datapoints HTTP/1.1\r\n" \
                                "api-key:Q1=mhFwn=zt6nfp1EYvSsUcwUX8=\r\n" \
                                "Host:api.heclouds.com\r\n" \
                                "Connection:close\r\n" \
                                "Content-Length:%d\r\n" \
                                "\r\n" \
                                "{"datastreams":[{"id":"temp","datapoints":[{"value":%s}]}]}",
                                57+strlen(ds18b20_tmp),
                                ds18b20_tmp
            );
    
    return LTE4G_TCP_SendData(send_http_cmd);
    
    /*
    说明:  上面的57+strlen(ds18b20_tmp)是什么含义?
           为了方便计算最下面这一行的数据长度,
            提前算好固定的字符串长度 +  传入的温度字符串 就是最终的数据长度。
    */
    
}
​
​
//判断网络是否建立连接
// 建立后输出高电平  否则是低电平
//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);
        time_cnt++;
    }
}

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK