4.wifi开发【网络编程2】WiFi HTTP Client编程,WiFi HTTP Server编程,Smartconfig,SNTP通信协议,FOTA远程固件升级

一。HTTP协议

1.HTTP介绍

(1)什么是超文本HyperText?

        包含有超链接(Link)和各种多媒体元素标记(Markup)的文本。这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page)。这些链接使用URL表示。最常见的超文本格式是超文本标记语言HTML。

(2)什么是URL?

        URL即统一资源定位符(Uniform Resource Locator),用来唯一地标识万维网中的某一个文档。URL由协议、主机和端口(默认为80)以及文件名三部分构成。

如:http://www.makeru.com.cn//course/3172.html

(3)什么是超文本传输协议HTTP?

        是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能。

2.HTTP工作原理(请求/响应交互模型)

在用户点击URL为http://www.makeru.com.cn//course/3172.html 的链接后,浏览器和Web服务器执行以下动作:

4.wifi开发【网络编程2】WiFi HTTP Client编程,WiFi HTTP Server编程,Smartconfig,SNTP通信协议,FOTA远程固件升级_第1张图片

1.浏览器分析超链接中的URL

2.浏览器向DNS请求解析www.makeru.com.cn的IP地址

3.DNS将解析出的IP地址202.2.16.21返回浏览器

4.浏览器与服务器建立TCP连接(80端口)

5.浏览器请求文档:GET /index.html

6.服务器给出响应,将文档 index.html发送给浏览器

7.释放TCP连接

8.浏览器显示index.html中的内容

3.HTTP报文结构

请求报文

即从客户端(浏览器)向Web服务器发送的请求报文。报文的所有字段都是ASCII码。

4.wifi开发【网络编程2】WiFi HTTP Client编程,WiFi HTTP Server编程,Smartconfig,SNTP通信协议,FOTA远程固件升级_第2张图片

响应报文

即从Web服务器到客户机(浏览器)的应答。报文的所有字段都是ASCII码。

4.wifi开发【网络编程2】WiFi HTTP Client编程,WiFi HTTP Server编程,Smartconfig,SNTP通信协议,FOTA远程固件升级_第3张图片

补充:请求报文的方法/对函数的解释

方法(Method)是对所请求对象所进行的操作,也就是一些命令。请求报文中的操作有:

4.wifi开发【网络编程2】WiFi HTTP Client编程,WiFi HTTP Server编程,Smartconfig,SNTP通信协议,FOTA远程固件升级_第4张图片

函数解释:
(1)GET

        GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=sean&password=123。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

(2)POST

        1.POST把提交的数据则放置在是HTTP包的包体中。

        2.POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的Security的含义,比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存,(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击。

        3.总结一下,Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为"GET",实质上,GET和POST只是发送机制不同,并不是一个取一个发!

实验:wifi访问百度首页

(1)实验要求

模拟http协议,访问百度首页www.baidu..com/index.html 串口打印出百度反回数据

(2)功能实现

新建httpclient工程目录

1.在SDK目录下新建httpclient目录

2.拷贝tcpclient目录下所有文件到httpclient目录下

新建httpclient源码文件

1.在user目录下新建t httpclient.c

2.在include目录下新建httpclient.h

Sourceinsight配置

在之前的工程中,移除tcpclient文件夹

添加httpclient文件夹

(3)代码实现

1.复制之前tcpclient代码到httpclient上,进行修改

    (1)重命名TcpClient_init为HttpClient_init

    (2)重命名ATaskTcpClient为ATaskHttpClient

2.修改user_main.c

    (1)包涵httpclient.h

    (2)在user_init里修改为HttpClient_init

代码详细解释:

1.判断是否获取到IP地址

2.创建socket

3.设置接收超时时间

4.获取域名IP

5.赋值server信息

6.连接到server端

7.发送数据到server端

8.从server端接收数据

二。Http Server编程

1.HTML介绍

(1)超文本标记语言 ,是用来描述网页的一种语言。

(2)HyperText Markup Language 不是一种编程语言。

(3)使用标记标签来描述网页 HTML,HTML 文档包含了HTML 标签及文本内容。

(4)HTML文档也叫做 web 页面。

一个例子:

4.wifi开发【网络编程2】WiFi HTTP Client编程,WiFi HTTP Server编程,Smartconfig,SNTP通信协议,FOTA远程固件升级_第5张图片

1.HTML 标签是由尖括号包围的关键词,比如 。

2.HTML 标签通常是成对出现的,比如 和 。

3.标签对中的第一个标签是开始标签,第二个标签是结束标签。

4.开始和结束标签也被称为开放标签和闭合标签。

5.标签是用来描述内容如何显示在页面浏览器访问者是看不到标签的。

HTML元素

一组HTML标签将一段内容含其中之后,这个标签与文字被称为一个元素

1.应用

        在所有的HTML文件,最外层的元素是有HTML标签建立的,在HTML标签内,包含了两个直接的子元素,这两个标签是有head与body标签所构成的。head提供HTML文件的配置信息,body提供页面内容主体。

实验:

1.功能分析

1.模拟httpServer等待网页访问。

2.PC访问网址,查看网页信息。

2.功能实现

新建httpserver工程目录

1.在SDK目录下新建httpserver目录

2.拷贝tcpserver目录下所有文件到httpserver目录下

新建httpserver源码文件

1.在user目录下新建t httpserver.c

2.在include目录下新建httpserver.h

Sourceinsight配置

1.在之前的工程中,移除tcpserver文件夹

2.添加httpserver文件夹

3.代码实现流程

1.判断是否获取到IP地址

2.创建socket

3.设置接收超时时间

4.赋值server信息

5.绑定socket

6.监听socket

7.处理Client 连接

8.接收Client 数据

9.发送数据到client

10.关闭socket

三。Smartconfig编程

1.Smartconfig

2.Airkiss

3.功能实现

四。SNTP协议

1.SNTP协议

        NTP 是网络时间协议(Network Time Protocol),它用来同步网络设备【如计算机、手机】的时间的协议。

        SNTP由NTP改编而来(简单网络时间协议,Simple Network Time Protocol)大大简化了NTP协议,同时也能保证时间达到一定的精确度。在实际应用中,SNTP协议主要被用来同步因特网上计算机的时间。

        SNTP协议采用客户端/服务器的工作方式,可以采用单播(点对点)或者广播(一点对多点)模式操作。SNTP服务器通过接收GPS信号或自带的原子钟作为系统的时间基准。单播模式下,SNTP客户端能够通过定期访问SNTP服务器获得准确的时间信息,用于调整客户端自身所在系统的时间,达到同步时间的目的。广播模式下,SNTP服务器周期性地发送消息给指定的IP广播地址或者IP多播地址。SNTP客户端通过监听这些地址来获得时间信息。

NTP 服务器列表

        1.最常见、熟知的就是 www.pool.ntp.org/zone/cn,国内地址为:cn.pool.ntp.org。

       2. Windows 系统上自带的俩个:time.windows.com 和 time.nist.gov。

       3. Mac OS X 上自带的俩个:time.apple.com 和 time.asia.apple.com。

       4. 一个国内无偿提供的 NTP 服务器,速度挺快,但地址池有两个 IP 已不可用,我已邮件给官方。官网:NTP授时快速域名服务,NTP 服务器:cn.ntp.org.cn。

        5.来自阿里云的 NTP 服务器:

                ntp1.aliyun.com

                ntp2.aliyun.com

                ntp3.aliyun.com

                ntp4.aliyun.com

                ntp5.aliyun.com

                ntp6.aliyun.com

                ntp7.aliyun.com

2.SNTP接口说明

void sntp_setserver(unsigned char idx, ip_addr_t *addr);

功能:通过 IP 地址设置 SNTP 服务器,一共最多支持设置 3 个 SNTP 服务器。

参数:

    (1)unsigned char idx :SNTP 服务器编号,最多⽀持3个 SNTP 服务器(0~2);0 号为主服务器,1号和2 号为备用服务器。

    (2)ip_addr_t *addr :IP 地址;用户需自行确保,传入的是合法SNTP服务器。

返回:        无

void sntp_setservername(unsigned char idx, char *server);

1.功能:通过域名设置 SNTP 服务器,一共最多支持设置 3 个 SNTP 服务器。

2.参数:

     (1)unsigned char idx :SNTP 服务器编号,最多⽀持3个SNTP服务器(0 ~ 2);0号为主服务器,1号和2号为备用服务器。

    (2)char *server :域名;用户需自行确保,传入的是合法 SNTP 服务器。

3.返回:无

sntp_init

功能:SNTP 初始化

函数定义:void sntp_init(void)

参数:无

返回:无

sntp_stop

功能:SNTP 关闭

函数定义:void sntp_stop(void)

参数:无

返回:无

sntp_get_current_timestamp

功能:查询当前距离基准时间( 1970.01.01 00: 00: 00 GMT + 8)的时间戳,单位:秒

函数定义:uint32 sntp_get_current_timestamp()

参数:无

返回:距离基准时间的时间戳

sntp_get_real_time

功能:查询实际时间( GMT + 8)

函数定义:char* sntp_get_real_time(long t)

参数:long t - 与基准时间相距的时间戳

返回:实际时间

3.SNTP功能实现

(1)功能分析

1.定时5秒串口打印一次,网络时间

2.在freeRTOS下新建SNTP任务实现

(2)代码流程

1.判断是否获取到IP地址

2.设置NTP 服务器

3.SNTP初始化

4.延时5秒钟

5.获取时间戳

6.打印 实时时间

五。远程升级OTA

1.FOTA远程固件升级

4.wifi开发【网络编程2】WiFi HTTP Client编程,WiFi HTTP Server编程,Smartconfig,SNTP通信协议,FOTA远程固件升级_第6张图片

        FOTA(Firmware Over-The-Air)移动终端的空中下载软件升级,指通过云端升级技术,为具有连网功能的设备:例如手机、平板电脑、便携式媒体播放器、移动互联网设备等提供固件升级服务,用户使用网络以按需、易扩展的方式获取智能终端系统升级包,并通过FOTA进行云端升级,完成系统修复和优化。

ESP8266远程升级

        ESP8266能通过网络远程更新固件,需要将编译生成的user1.bin和user2.bin放到服务器上,可以使用用户自己的服务器,也可以使用乐鑫官方提供的免费服务器。

    (1)使用用户自己的服务器,这方式比较简单,将新的固件放到服务器的路径下, ESP8266使用http get的方式下载新的固件写到FLASH里面,然后重启运行新的固件。

    (2)使用乐鑫官方提供的免费服务器,这种方式要复杂一些,毕竟使用别人的东西,需要遵循别人定的规则,首先要从乐鑫官网申请一个key(密匙),将这个密匙写到程序中,再将新的固件放到乐鑫的服务器上,然后填写一些和固件相关的信息,程序中也要有相关的部分。程序可参照官方的: ESP8266 IOT PLATFORM,文档可参考: 99CESP8266_FOTA_UPGRADE_CN.PDF。

Flash空间划分

4.wifi开发【网络编程2】WiFi HTTP Client编程,WiFi HTTP Server编程,Smartconfig,SNTP通信协议,FOTA远程固件升级_第7张图片

2.功能分析

4.wifi开发【网络编程2】WiFi HTTP Client编程,WiFi HTTP Server编程,Smartconfig,SNTP通信协议,FOTA远程固件升级_第8张图片

        在局域网内运行WebServer,将固件放到WebServer的目录下,使用ComBox建立TCP连接,触发ESP8266从WebServer上下载新固件,然后ESP8266重启,运行新固件。

Upgrade源码移植

4.wifi开发【网络编程2】WiFi HTTP Client编程,WiFi HTTP Server编程,Smartconfig,SNTP通信协议,FOTA远程固件升级_第9张图片

1.RTOS SDK中没有upgrade源码,此源码已放到课程资料里upgrade文件夹内为FOTA实现 2.Upgradefirmware.c为固件升级操作实现

3.功能实现

你可能感兴趣的:(http,网络协议,网络)