如何在W5200中实现HTTP客户端?

时间:2022-09-11 14:35:55


让单片机嵌入HTTP(超级文本传输协议)客户端是一个很好的添加功能,HTTP客户端可以让嵌入式设备从HTTP服务器获取数据。今天给大家介绍的W5200E01-M3评估板是基于WIZnet W5200,可以作为HTTP客户端使用,能够集成到STM32 Cortex M3单片机产品的几乎所有应用中。具体内容如下:

1 简介

嵌入式HTTP(超级文本传输协议)客户端对所有支持网络功能的设备来说是一个很好的添加功能。HTTP客户端可以让嵌入式设备从HTTP服务器获取数据。

该WIZnet W5200 HTTP客户端应用笔记中所介绍的并使用的W5200E01-M3评估板,可以在STM32 Cortex M3系列单片机几乎所有的应用中使用。 IAR 5.41用来编译该HTTP客户端应用程序。W5200E01-M3板子用来运行该HTTP客户端应用。
该文档中提到的所有的代码和文件可以从下面的链接下载 www.wiznet.co.kr/w5200/download。

1.1 假设

假设读者对WIZnet W5200驱动是熟悉的。当然读者也需要熟悉C语言编程和HTTP客户端的概念。上述这些技术的术语将在这篇文章中用到,并且只提供简短的概述。鼓励一些高级用户去阅读相关的规范。

1.2 特点

该HTTP客户端不具有完整的HTTP客户端功能;本文的HTTP客户端是针对嵌入式系统的小型客户端。
这里提供的HTTP客户端具有以下特点:
• 可移植到STM32 Cortex M3系列32位单片机平台
• 支持内容解析
• 支持串口打印信息(见图1)

如何在W5200中实现HTTP客户端?

图1. HTTP客户端演示图

1.3 局限性

针对嵌入式系统设计的HTTP客户端往往没有足够的缓存去接接收“大”的网页(在该应用笔记中,http客户端的最大接收缓存是4K字节,当然,考虑到STM32F103C8的SRAM的存储空间,用户可以按需求对缓存进行扩展)。推荐用简单的text/html内容网页访问。如果接收缓存不够了,HTTP客户端将自动重启。

2 HTTP协议概述

HTTP是超级文本传输协议的缩写。HTTP的功能是在客户端-服务器计算机模式下作为请求-应答协议。例如,在HTTP下,网络浏览器作为客户端,运行在计算机上的打开网址的应用程序作为服务器。客户端向服务器提交HTTP请求消息。保存内容,或提供资源(如HTML文件,或执行其他客户端功能)的服务器返回一个应答消息给客户端。这个应答包括请求的完成状态信息,这个消息可能会包括客户端任何的请求内容。

如何在W5200中实现HTTP客户端?

HTTP客户端的通信过程大致分为三步。

  1. 连接:W5200分配socket到HTTP客户端,打开socket并连接到http服务器。
  2. 通信:连接建立了。W5200发送HTTP请求和接收来自服务器的HTTP应答。
  3. 关闭:HTTP 请求/应答完成后关闭连接。

HTTP是一个应用层协议,在网络协议框架内。协议定义假设有一个可靠的主机到主机数据传输的传输层协议。TCP是占主导地位的协议。

如何在W5200中实现HTTP客户端?

W5200已经嵌入到以太网,IP和TCP层。因此,HTTP客户端可以很容易的实现,通过W5200的API函数(socket(),listen(),connect(),send(),receive()等等),这些函数都在W5200驱动中。下图展示了W5200的框图。

如何在W5200中实现HTTP客户端?

2.1 HTTP会话

一个HTTP会话是一系列的网络请求-响应传输。HTTP客户端通过建立一个TCP连接到服务器上的特定端口(一般都是端口80)来初始化一个请求。监听该端口HTTP服务器等待客户端的请求消息。一旦接收该请求,服务器返回一个状态行,如“HTTP/1.1 200 OK”,和一个自己的消息,该消息也许是所请求的资源,一个错误信息,或一些其他信息。

2.2 请求消息

请求消息包括下面这些::

  • 向服务器请求称作/images/logo.png请求行,如GET /images/logo.png HTTP/1.1
  • 头部,如Accept-Language: en

注意:在HTTP/1.1协议里,除了Host外所有头部是可选。

  • 一个空行。
  • 一个可选的信息体。

例如,下面是最简单的HTTP Get请求:

GET /index.html HTTP/1.1\r\n

Host: www.example.com\r\n

\r\n

该请求行和头部必须以<CR><LF>结束(一个回车后跟换行)。空行必须只包括<CR><LF>并且没有其他空白。虽然需要<CR><LF>,但大部分服务器也接受只有<LF>。

2.3 请求方法

HTTP定义了9种方法指示在标识的资源上执行期望的动作。这里HTTP客户端不支持完整的HTTP客户端功能;它针对嵌入式系统的小型客户端。只可使用GET 方法。

  • GET: 向特定的资源发出请求。

3 HTTP客户端

3.1 HTTP文档

下面HTTP页是用来演示HTTP客户端。可以通过是DOCTYPE HTTP 的(b) HTTP Source来检查。

注意:如前面说的,HTTP Document (img, txt, etc)的大小,需要考虑STM32F108C8的内存大小。

如何在W5200中实现HTTP客户端?

(a)HTTP文档

如何在W5200中实现HTTP客户端?

图 5. HTTP Document和HTML source

3.1.1 测试

如何在W5200中实现HTTP客户端?

3.2 演示

3.2.1 设置超级终端

从网上下载一个免费的超级终端做如下设置:

如何在W5200中实现HTTP客户端?

3.2.2 输入URL

如何在W5200中实现HTTP客户端?

3.2.3 DNS, HTTPc和Output Doc

如何在W5200中实现HTTP客户端?

如何在W5200中实现HTTP客户端?

如何在W5200中实现HTTP客户端?

3.2.4 结果

如何在W5200中实现HTTP客户端?

图 8. IE7显示解析的数据

4. HTTP客户端实现

HTTP客户端运行在TCP客户端模式。TCP客户端模式通过连接到服务器工作(Connect),在连接建立后(ESTABLISHED)客户端可以发送/接收数据。获得更多的信息,请参考W5200 数据手册(Datasheet)或文档‘如何在W5200中实现TCP ’(‘How to implement TCP in W5200’)。 扩展TCP Loopback示例代码来执行FTTP客户端。下图是HTTP客户端的流程图。

如何在W5200中实现HTTP客户端?

图 8. 基于W5200的HTTP客户端流程图

以下代码显示了HTTPc 的main.c。HTTPc解析URL作为URL的域名和URL路径。当DNS获得了IP, HTTPc将打开。HTTPc连接到上面流程图中的服务器。该请求信息将在连接后再次发送。服务器接收到请求后将发送数据。

注意:在该应用中用了一个简单的算法去解析接收到的数据。为了解析不同的接收数据,用户必须修改这部分的解析程序。

如何在W5200中实现HTTP客户端?

谢谢关注,关于此篇博文,如果您有任何疑问,欢迎您评论留言,也欢迎您联系我们!