[Springboot][STM32]Springboot+STM32+ESP8266 使用HTTP的GET与POST发送请求向Springboot项目上传数据并展示

我滴Java老本行来喽 啦啦啦啦啦啦啦

       STM32+ESP8266上传数据是怎么回事呢?STM32+ESP8266相信大家都很熟悉,但是STM32+ESP8266上传数据是怎么回事呢,下面就让小编带大家一起了解吧。
  STM32+ESP8266上传数据,其实就是使用HTTP协议发送GET或POST请求访问服务器,大家可能会很惊讶STM32+ESP8266怎么会上传数据呢?但事实就是这样,小编也感到非常惊讶。
  这就是关于STM32+ESP8266上传数据的事情了,大家有什么想法呢,欢迎在评论区告诉小编一起讨论哦!

✿✿ヽ(°▽°)ノ✿完结撒花!

诶呀你还在啊,结束了,后面什么都没有了

真的!  点头  真的!!  肯定


在我们赶到小编家里的时候只剩下这篇文章了

 

前言

我是JavaWeb程序员 我是JavaWeb程序员 我是JavaWeb程序员 

写STM32只是爱好,主业还是开发后台程序


这篇文章主要讲使用GET与POST方式发送数据有什么不同以及优缺点,并且使用Springboot作为服务端接收并展示数据

希望帮助有类似想法的开发人员与爱好者减少查找资料浪费的时间

具体如何编写STM32控制ESP8266的驱动以及发送程序可以看我之前写的文章

[STM32] Stm32f103c8t6+ESP8266-01s+DHT11 实现向服务器上传温湿度数据

目录

成果展示

5分钟间隔采集的温度数据

一分钟间隔采集的温度数据

5分钟间隔采集的湿度数据

1分钟间隔采集的湿度数据

关于Springboot

数据发送方式

         GET访问方式

GET在STM32中实现

           POST+JSON访问方式

POST+JSON在STM32中实现


成果展示

5分钟间隔采集的温度数据

一分钟间隔采集的温度数据

5分钟间隔采集的湿度数据

1分钟间隔采集的湿度数据

上述页面都是前端使用Echarts展示的

关于Springboot

本篇提到Springboot的篇幅比较少,但我还是想说服务端很重要,物联网说白了就是小设备联网上传下载数据,真正做决策的还是发送指令的服务端

我接触到的一部分人都是向网络调试助手之类的模拟server发送数据,虽然能看到接收到数据,但实际上数据并没有被存储下来,也并不能使用这些数据

这就是我搭建客户端的原因,并且我是JavaWeb开发,对后台非常熟悉,正好把软硬件组合到一起

ESP8266通过TCP方式连接Springboot服务端上传数据

服务端使用Springboot项目开发,前端使用Echarts展示数据曲线,数据库用的mysql

数据每30秒上传一次,服务端会分别保存1分钟全天1440点数据,5分钟288点数据,15分钟96点数据,30分钟48点数据,共四种颗粒度

数据库设计时考虑了很多,首先是对表中域数考虑的比较多,因为一张表的域超过100个就会影响查询效率,而由于我是横表存储数据最小的颗粒度是1分钟一个值,全天就是1440个值,并且五分钟也有288个值,最终结论是减少域的使用提升性能,数据过长就转而增加数据存储条数,就可以既满足数据库性能也能满足所有颗粒度存储,比如1440个数据,会拆分成多条数据存入数据库,当然实际情况是一分钟一入库,具体怎样入库这个逻辑有些复杂,逻辑性很强不易分享,可以根据自己程序自由设计

具体后台设计根据自己需求可以对数据进行监测并告警之类,那就是自己自由发挥了

数据发送方式

ESP8266使用HTTP协议发送请求访问服务器并上传数据

HTTP协议我这里就不讲了,我对概念类的知识不会太深入的了解,而且网上这类知识很好找到

这里主要讲讲ESP3266如何发送GET与POST请求

GET访问方式

GET有多种方式,这里使用的是在URL中拼接参数 如: IP:端口/路由/参数1/参数2

当然你也可以用另一种如: IP:端口/路由?参数名1=参数1&参数名2=参数2

都是可以的,服务端程序与只要HTTP访问方式按照使用的方式拼接好就可以访问

Springboot 的controller中编写GET访问方法

推荐使用postman先熟悉http的访问方式

选择GET方式并在utl后面用"/"分隔参数

Send一下状态码200 说明可以访问

状态码:  200 服务器接收到响应 400参数有误 404无法访问

后台打印

后台接收到数据,说明该访问方法没有问题

那么怎么用单片机访问这个地址呢

这就用到postman的工具了

点击Code可以看到http的访问代码,这个就是浏览器访问一个地址背后所有参数

我们只需要输入地址访问,而其余的参数都是浏览器帮我们添加的,这里就可以看到访问地址背后还需要什么参数

除了Cookie之外都是我们要用的,再加上Host地址

GET /STM32/stm32esp8266/weather/123/456 HTTP/1.1
Accept-Language: zh-CN,zh;q=0.9
Host:192.168.3.8

转成模板就是:

GET {项目路由地址} HTTP/1.1\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n
Host:{服务器ip}\r\n
\r\n换行

要注意的是我这里换行是方便讲解,最终在ESP8266中是一整行字符串换行用的转移字符"\r\n",并且最后必须加上一个换行

 

敲黑板,划重点

GET在STM32中实现

知道HTTP请求写法之后就是要在STM32中组装参数并用ESP8266发送出去

STM32传给8266的字符串就是下面的写法,8266使用TCP方式连接服务器并发送这个字符串就可以实现一次GET访问

"GET /STM32/stm32esp8266/weather/123/456 HTTP/1.1\r\nAccept-Language: zh-CN,zh;q=0.9\r\nHost:192.168.3.8\r\n\r\n"

GET方式讲完了

接下来是我目前阶段推荐的数据上传方式

POST+JSON访问方式

因为GET方式需要在URL里面无限拼接参数

导致添加新的传感器数据后不止单片机要重新烧录新的代码,

连服务器上的接收数据的Springboot项目也要在接收方法添加新增参数,维护起来费时费力

举个例子就是这样,每增加一个参数都要修改服务端代码,麻烦不说也不好维护

而POST+JSON是将数据按照JSON键值对方式组装好再整体的发给服务端,服务端根据JSON的键值进行遍历执行参数对应的方法

这样就算是增加传感器增加发送参数,只需要在JSON中添加即可,无需再修改服务端代码

Springboot 的controller中编写POST访问方法

服务器接收一个JSON格式的键值对参数,并用for循环遍历出参数,再传给处理业务逻辑的方法

服务端的接收方法知道了,那单片机怎么发送JSON呢?(这个问法显着我好傻啊,哪有自问自答的呢)

同样先在postman工具上模拟一次POST+JSON发送

使用postman发送JSON

这里展示随便加减JSON串的参数,无需像GET方式考虑一对一

因为统一将数据写入JSON中,不必像GET方法需要单片机与服务端参数一对一来接收

同样使用postman的Cide工具查看HTTP访问代码

稍稍改动一下

POST /STM32/stm32esp8266/weathermirror? HTTP/1.1
Host: 192.168.8.108:8085
Content-Type: application/json;charset=utf-8
Content-Type: text/plain
Content-Length:38
cache-control: no-cache
{"temperature":"123","humidity":"456"}

POST+JSON方式模板

POST {项目路由地址}? HTTP/1.1\r\n
Host: {服务器ip}:{项目部署端口}\r\n
Content-Type: application/json;charset=utf-8\r\n
Content-Type: text/plain\r\n
Content-Length:{下面JSON长度包括大括号}\r\n
cache-control: no-cache\r\n
{JSON}

敲黑板,划重点

POST+JSON在STM32中实现

和get方式一样也是写成字符串让8266发送

POST {项目路由地址}? HTTP/1.1\r\nHost: {服务器ip}:{项目部署端口}\r\nContent-Type: application/json;charset=utf-8\r\nContent-Type: text/plain\r\nContent-Length:{下面JSON长度包括大括号}\r\ncache-control: no-cache\r\n{JSON}

有几点要注意

1.JSON串中的KEY与VALUE值都要用双引号引上,不然发送会失败,后台会报错 

如: {\"10001\":\"%d\",\"10002\":\"%d\",\"10003\":\"%d\"}

2.使用JSON要注意的是要加上Content-Length:XX参数,含义是发送JSON字符串长度,而这个长度包括JSON的大括号

到目前为止使用STM32+ESP8266使用HTTP协议发送数据的方法已经讲完了

真完结撒花✿✿ヽ(°▽°)ノ✿

最后分享一下我开发时

展示一下我STM32的代码

这个是第一次项目成功接收8266发送的POST请求

猜你喜欢

转载自blog.csdn.net/qq_41873771/article/details/114012598