写点什么

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

作者:DS小龙哥
  • 2022-10-26
    重庆
  • 本文字数:10643 字

    阅读完需:约 35 分钟

一、设计说明

设计思路: 每个测量点采用 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 模块的功能参数:




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



**农业物联网环境监测案例:**可将农业大棚里各类传感器采集的数据,通过 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】APIkeyAPIkey 为用户进行 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:  1009326949APIKey:  Q1=mhFwn=zt6nfp1EYvSsUcwUX8=
温度采集设备2设备ID: 1009327662APIKey: ezI=f3T=47=jlJssgKH2xVcLtBU=
温度采集设备3设备ID: 1009327756APIKey: KkHKbNWmy4diHtpT=D=AfoZxy3w=
复制代码

(5)数据点上传格式

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


POST /devices/<填设备ID>/datapoints HTTP/1.1api-key:<填设备的ApiKey>Host:api.heclouds.comConnection:closeContent-Length:<填下面需要上传的数据总字节数>
{"datastreams":[{"id":"<填数据流名称>","datapoints":[{"value":<上传的值>}]}]}
复制代码


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


POST /devices/1009326949/datapoints HTTP/1.1api-key:Q1=mhFwn=zt6nfp1EYvSsUcwUX8=Host:api.heclouds.comConnection:closeContent-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.1api-key:Q1=mhFwn=zt6nfp1EYvSsUcwUX8=Host:api.heclouds.comConnection:closeContent-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.1api-key:Q1=mhFwn=zt6nfp1EYvSsUcwUX8=Host:api.heclouds.comConnection:closeContent-Length:61
{"datastreams":[{"id":"temp","datapoints":[{"value":24.5}]}]}

温度采集设备2: POST /devices/1009327662/datapoints HTTP/1.1api-key:ezI=f3T=47=jlJssgKH2xVcLtBU=Host:api.heclouds.comConnection:closeContent-Length:61
{"datastreams":[{"id":"temp","datapoints":[{"value":25.5}]}]}

温度采集设备3: POST /devices/1009327756/datapoints HTTP/1.1api-key:KkHKbNWmy4diHtpT=D=AfoZxy3w=Host:api.heclouds.comConnection:closeContent-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.3VGND---GNDPB15---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++; }}
复制代码


发布于: 刚刚阅读数: 5
用户头像

DS小龙哥

关注

之所以觉得累,是因为说的比做的多。 2022-01-06 加入

熟悉C/C++、51单片机、STM32、Linux应用开发、Linux驱动开发、音视频开发、QT开发. 目前已经完成的项目涉及音视频、物联网、智能家居、工业控制领域

评论

发布
暂无评论
基于OneNet平台设计的多节点温度采集系统-有人云4G模块+STM32_10月月更_DS小龙哥_InfoQ写作社区