热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[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请求






推荐阅读
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • Keepalived 提供了多种强大且灵活的后端健康检查机制,包括 HTTP_GET、SSL_GET、TCP_CHECK、SMTP_CHECK 和 MISC_CHECK 等多种检测方法。这些健康检查功能确保了高可用性环境中的服务稳定性和可靠性。通过合理配置这些检查方式,可以有效监测后端服务器的状态,及时发现并处理故障,从而提高系统的整体性能和可用性。 ... [详细]
  • 本文详细探讨了 jQuery 中 `ajaxSubmit` 方法的使用技巧及其应用场景。首先,介绍了如何正确引入必要的脚本文件,如 `jquery.form.js` 和 `jquery-1.8.0.min.js`。接着,通过具体示例展示了如何利用 `ajaxSubmit` 方法实现表单的异步提交,包括数据的发送、接收和处理。此外,还讨论了该方法在不同场景下的应用,如文件上传、表单验证和动态更新页面内容等,提供了丰富的代码示例和最佳实践建议。 ... [详细]
  • 设计实战 | 10个Kotlin项目深度解析:首页模块开发详解
    设计实战 | 10个Kotlin项目深度解析:首页模块开发详解 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 本文详细解析了 Python 2.x 版本中 `urllib` 模块的核心功能与应用实例,重点介绍了 `urlopen()` 和 `urlretrieve()` 方法的使用技巧。其中,`urlopen()` 方法用于发送网络请求并获取响应内容,而 `urlretrieve()` 方法则用于下载文件并保存到本地。文章通过具体示例展示了这两个方法在实际开发中的应用场景,帮助读者更好地理解和掌握 `urllib` 模块的使用。 ... [详细]
  • 为了评估精心优化的模型与策略在实际环境中的表现,Google对其实验框架进行了全面升级,旨在实现更高效、更精准和更快速的在线测试。新的框架支持更多的实验场景,提供更好的数据洞察,并显著缩短了实验周期,从而加速产品迭代和优化过程。 ... [详细]
  • Sanic 是一个类似于 Flask 的 Python 3.5 Web 服务器,以其出色的写入速度而著称。与 Flask 不同,Sanic 支持异步请求处理,这使得它在处理高并发请求时表现更加出色。通过利用 Python 的异步特性,Sanic 能够显著提高应用程序的性能和响应能力,适用于构建高性能的异步 Web 应用。 ... [详细]
  • 在PHP的设计中,预定义了9个超级全局变量、8个魔术变量和13个魔术函数,这些变量和函数无需声明即可在脚本的任意位置使用。这些特性在PHP开发中极为常见,能够显著提升开发效率和代码的灵活性。相比之下,Java并没有类似的内置机制,但通过其他方式如上下文对象和反射机制,也可以实现类似的功能。本文将详细探讨这两种语言中这些特殊变量和函数的使用方法及其应用场景。 ... [详细]
  • 本课程详细介绍了如何使用Python Flask框架从零开始构建鱼书应用,涵盖高级编程技巧和实战项目。通过视频教学,学员将学习到Flask的高效用法,包括数据库事务处理和书籍交易模型的实现。特别感谢AI资源网提供的课程下载支持。 ... [详细]
author-avatar
栋哥0822_893
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有