如何在W5200中實現HTTP客戶端?

讓單片機嵌入HTTP(超級文本傳輸協議)客戶端是一個很好的添加功能,HTTP客戶端可以讓嵌入式設備從HTTP服務器獲取數據。今天給大家介紹的是基於WIZnet W5200的HTTP客戶端模塊,能夠集成到STM32 Cortex M3單片機產品的幾乎所有應用中。具體內容如下:

1 簡介

嵌入式HTTP(超級文本傳輸協議)客戶端對所有支持網絡功能的設備來說是一個很好的添加功能。HTTP客戶端可以讓嵌入式設備從HTTP服務器獲取數據。
該WIZnet W5200 HTTP客戶端應用筆記介紹的W5200E01-M3板子,提供一個完整的HTTP客戶端模塊,它能夠集成到STM32 Cortex M3單片機產品的幾乎所有應用中。IAR 5.41用來編譯該HTTP客戶端應用程序。W5200E01-M3板子用來運行該HTTP客戶端應用。
該文檔中提到的所有的代碼和文件可以從下面的鏈接下載 W5200 Download

1.1 假設

假設讀者對WIZnet W5200驅動是熟悉的。當然讀者也需要熟悉C語言編程和HTTP客戶端的概念。上述這些技術的術語將在這篇文章中用到,並且只提供簡短的概述。鼓勵一些高級用戶去閱讀相關的規範。

1.2 特點

該HTTP客戶端不具有完整的HTTP客戶端功能;本文的HTTP客戶端是針對嵌入式系統的小型客戶端。
這裡提供的HTTP客戶端具有以下特點:
• 可移植到STM32 Cortex M3系列32位單片機平台
• 支持內容解析
• 支持串口打印信息(見圖1)

 

圖1. HTTP客戶端演示圖

1.3      局限性

針對嵌入式系統設計的HTTP客戶端往往沒有足夠的緩存去接接收“大”的網頁(在該應用筆記中,http客戶端的最大接收緩存是4K字節,當然,考慮到STM32F103C8的SRAM的存儲空間,用戶可以按需求對緩存進行擴展)。推薦用簡單的text/html內容網頁訪問。如果接收緩存不夠了,HTTP客戶端將自動重啟。

 

2    HTTP協議概述

HTTP是超級文本傳輸協議的縮寫。HTTP的功能是在客戶端-服務器計算機模式下作為請求-應答協議。例如,在HTTP下,網絡瀏覽器作為客戶端,運行在計算機上的打開網址的應用程序作為服務器。客戶端向服務器提交HTTP請求消息。保存內容,或提供資源(如HTML文件,或執行其他客戶端功能)的服務器返回一個應答消息給客戶端。這個應答包括請求的完成狀態信息,這個消息可能會包括客戶端任何的請求內容。

HTTP客戶端的通信過程大致分為三步。

  1. 連接:W5200分配socket到HTTP客戶端,打開socket並連接到http服務器。
  2. 通信:連接建立了。W5200發送HTTP請求和接收來自服務器的HTTP應答。
  3. 關閉:HTTP 請求/應答完成後關閉連接。

HTTP是一個應用層協議,在網絡協議框架內。協議定義假設有一個可靠的主機到主機數據傳輸的傳輸層協議。TCP是佔主導地位的協議。

W5200已經嵌入到以太網,IP和TCP層。因此,HTTP客戶端可以很容易的實現,通過W5200的API函數(socket(),listen(),connect(),send(),receive()等等),這些函數都在W5200驅動中。下圖展示了W5200的框圖。

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的內存大小。

(a)HTTP文檔

圖 5. HTTP Document和HTML source

3.1.1    測試

3.2        演示

3.2.1    設置超級終端

從網上下載一個免費的超級終端做如下設置:

3.2.2          輸入URL

 3.2.3          DNS, HTTPc和Output Doc

3.2.4          結果

 

                                     圖 8. IE7顯示解析的數據

4.           HTTP客戶端實現

HTTP客戶端運行在TCP客戶端模式。TCP客戶端模式通過連接到服務器工作(Connect),在連接建立後(ESTABLISHED)客戶端可以發送/接收數據。獲得更多的信息,請參考W5200 用戶手冊(Datasheet)或文檔‘如何在W5200中實現TCP ’(‘How to implement TCP in W5200’)。 擴展TCP Loopback示例代碼來執行FTTP客戶端。下圖是HTTP客戶端的流程圖。

圖 8. 基於W5200的HTTP客戶端流程圖

以下代碼顯示了HTTPc 的main.c。HTTPc解析URL作為URL的域名和URL路徑。當DNS獲得了IP, HTTPc將打開。HTTPc連接到上面流程圖中的服務器。該請求信息將在連接後再次發送。服務器接收到請求後將發送數據。

注意:在該應用中用了一個簡單的算法去解析接收到的數據。為了解析不同的接收數據,用戶必須修改這部分的解析程序。

謝謝關注,關於此篇博文,如果您有任何疑問,歡迎您評論留言,也歡迎您聯繫我們!我們的郵箱:[email protected]  官方網站:www.iwiznet.cn