HTTP获取城市温度
学习目的及目标
· 掌握HTTP原理和工作过程
· 掌握乐鑫ESP32HTTP获取服务器温度的程序设计
HTTP原理
HTTP是一套计算机网络通讯规则。下面只讲下请求格式,其他原理。
HTTP请求格式
HTTP请求是客户端往服务端发送请求动作,告知服务器自己的要求。其中信息由三部分组成:
1. 请求方法,URI协议/版本:包括请求方式Method、资源路径URL、协议版本Version
2. 请求头:包括一些访问的域名、用户代理、Cookie等信息
3. 请求正文:就是HTTP请求的数据
备注:请求方式Method一般有GET、POST、PUT、DELETE,含义分别是获取、修改、上传、删除,其中GET方式仅仅为获取服务器资源,方式较为简单,因此在请求方式为GET的HTTP请求数据中,请求正文部分可以省略,直接将想要获取的资源添加到URL中。下图所示就是GET的请求,没有请求正文。详细的说明在下边。
现在大多数协议版本为http/1.1
HTTP 应答格式
服务器收到了客户端发来的HTTP请求后,根据HTTP请求中的动作要求,服务端做出具体的动作,将结果回应给客户端,称为HTTP响应。数据主要由三部分组成:
1. 协议状态:包括协议版本Version、状态码Status Code、回应短语
2. 响应头:包括搭建服务器的软件,发送响应的时间,回应数据的格式等信息
3. 响应正文:就是响应的具体数据
备注:我们主要关心并且能够在客户端浏览器看得到的是三位数的状态码,不同的状态
码代表不同的含义,其中
常见状态码的含义:
1. 200---OK/请求已经正常处理完毕
2. 301---/请求永久重定向
3. 302---/请求临时重定向
4. 304---/请求被重定向到客户端本地缓存
5. 400---/客户端请求存在语法错误
6. 401---/客户端请求没有经过授权
7. 403---/客户端的请求被服务器拒绝,一般为客户端没有访问权限
8. 404---/客户端请求的URL在服务端不存在
9. 500---/服务端永久错误
10. 503---/服务端发生临时错误
HTTP报文格式(原文)
HTTP报文是HTTP应用程序之间传输的数据块,HTTP报文分为HTTP请求报文和HTTP响应报文,但是无论哪种报文,他的整体格式是类似的,大致都是由起始、首部、主体三部分组成,起始说明报文的动作,首部说明报文的属性,主体则是报文的数据。接下来具体说明。
HTTP请求报文
请求报文的起始由请求行构成(有些资料称为状态行,名字不一样而已,都是指的一个东西),用来说明该请求想要做什么,由、、 三个字段组成,注意每个字段之间都有一个空格。
其中字段有不同的值:
GET --- 访问服务器的资源
POST --- 向服务器发送要修改的数据
HEAD --- 获取服务器文档的首部
PUT --- 向服务器上传资源
DELETE--- 删除服务器的资源
字段表示服务器的资源目录定位
字段表示使用的http协议版本
首部部分由多个请求头(也叫首部行)构成,那些首部字段名有如下,不全:
Accept 指定客户端能够接收的内容格式类型
Accept-Language 指定客户端能够接受的语言类型
Accept-Ecoding 指定客户端能够接受的编码类型
User-Agent 用户代理,向服务器说明自己的操作系统、浏览器等信息
Connection 是否开启持久连接(keepalive)
Host 服务器域名
...
主体部分就是报文的具体数据。
HTTP响应报文
响应报文的起始由状态行构成,用来说明服务器做了什么,由、、三个字段组成,同样的每个字段之间留有空格;
上边已经说明;
首部由多个响应头(也叫首部行)组成, 首部字段名如下,不全:
Server 服务器软件名,Apache/Nginx
Date 服务器发出响应报文的时间
Last-Modified 请求资源的最后的修改时间
...
主体部分是响应报文的具体数据。
JSON解析
此处HTTP获取城市的温度是访问心知天气的服务器,心知天气返回的数据是json格式,那么我们就需要使用到第三方的开源库cJSON了。ESP32的SDK已经自带这些移植好的库了,我们只需要直接使用即可。天气预报的数据格式如下所示:
关于cjson的使用,可参考。
软件设计
HTTP获取城市温度的主逻辑
ESP32的HTTP详细过程逻辑
ESP32的HTTP接口介绍
同TCP接口,因为此处是使用TCP数据包模拟HTTP包,完成发送和读取。
更多更详细接口请参考官方指南。
ESP32的HTTP总结
初始化wifi配置后,程序会根据WIFI的实时状态,在回调函数中给出状态返回,所以只需要在回调中进行相关操作,STA开始事件触发SC开始进行一键配置,在SC的回调中处理SC配置过程的事件,sc完成后,WIFI连上网后,就开始了HTTP的工作过程,很简单。
HTTP任务编写
温度数据JSON解析
效果展示
测试流程
· SmartConfig快配账号密码
· 自动连服务器获取温度
· 串口打开即可看获取的温度
效果展示
· SmartConfig配置
· 获取温度
HTTP总结
· 此处HTTP是使用TCP模拟的,所以过程和TCP章类似。
· HTTP部分参考官方的源码,sc参考官方源码。
· Sc没有保存密码。
· 源码地址:https://github.com/xiaolongba/wireless-tech
开源地址:https://github.com/HX-IoT/