#IT明星不是夢#wemos D1 arduino物聯網開發板應用筆記9-HTTP Client編程

前言git

本節,咱們開始學習wemos D1的HTTP Client編程,並實現經過HTTP GET方式獲取天氣信息的功能。github

1、基礎知識編程

1.HTTP簡介json

1.1 HTTP概要api

HTTP是Hypertext Transfer Protocol的縮寫,Hypertext(超文本)是能夠根據客戶端請求而跳轉的結構化信息。HTTP協議的請求及相應方式設計以下圖所示:
#IT明星不是夢#wemos D1 arduino物聯網開發板應用筆記9-HTTP Client編程瀏覽器

從圖中能夠看出,服務器端響應客戶端請求後馬上斷開鏈接,鏈接不會維持好久,即便同一個客戶端再次發送請求,服務端也沒法辨認出是不是原先的那個客戶端發出的請求,會以相同的方式處理新的請求。服務器

1.2 HTTP請求ide

HTTP請求是客戶端向服務端發送請求消息,請求消息能夠分爲請求行、消息頭、消息體三個部分;請求行含有請求方式信息(GET/POST等),GET用於請求數據,POST主要用於傳輸數據;消息頭包括一些訪問的域名、用戶代理、Cookie等信息;消息體就是請求的數據,僅在POST方式請求時候輸入。
#IT明星不是夢#wemos D1 arduino物聯網開發板應用筆記9-HTTP Client編程函數

1.3 HTTP響應工具

HTTP響應是指服務端根據客戶端發送的請求中的動做要求作出具體的動做,而後將結果返回給客戶端。 HTTP響應消息能夠分爲狀態行、頭信息、消息體三個部分;狀態行含有請求的狀態信息,這是其與請求消息相比最大的區別。
#IT明星不是夢#wemos D1 arduino物聯網開發板應用筆記9-HTTP Client編程

2.ESP8266HTTPClient函數說明

在Wemos D1實際開發中,直接使用ESP8266HTTPClient庫提供的函數便可。
#IT明星不是夢#wemos D1 arduino物聯網開發板應用筆記9-HTTP Client編程

http常見響應處理函數以下:
#IT明星不是夢#wemos D1 arduino物聯網開發板應用筆記9-HTTP Client編程

2、實例運行

1.Http GET方式獲取上海天氣

1.1 簡介

獲取天氣接口使用sojson提供的免費接口:http://t.weather.sojson.com/api/weather/city/city_code,本文訪問上海天氣,須要填寫上海city_code,爲101021300,不一樣城市碼能夠百度搜索獲取

首先咱們在瀏覽器直接輸入http://t.weather.sojson.com/api/weather/city/101021300 ,效果以下:
#IT明星不是夢#wemos D1 arduino物聯網開發板應用筆記9-HTTP Client編程

1.2 wemos D1程序

接着咱們開始使用wemos D1來獲取天氣,代碼以下:

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

char* ssid = "sand";
char* passwd = "12345678";

const uint16_t port = 80;
const char * host = "http://t.weather.sojson.com/api/weather/city/101021300";
 HTTPClient http;

void setup() {
   //在這裏加入初始化相關代碼,只運行一次:
   Serial.begin(115200);

   WiFi.mode(WIFI_STA);
   WiFi.begin(ssid, passwd);

   Serial.println("connecting to router... ");
   //等待wifi鏈接成功
   while (WiFi.status() != WL_CONNECTED) {
      Serial.print(".");
      delay(500);
   }
   Serial.println("");

   Serial.print("WiFi connected, local IP address:");
   Serial.println(WiFi.localIP());

   Serial.print("[HTTP] begin...\n");

   http.begin(host); //HTTP

    delay(500);
}

void loop() {
  if (WiFi.status() == WL_CONNECTED)
  {
      // start connection and send HTTP header
      int httpCode = http.GET();
      if(httpCode) {
         // HTTP header has been send and Server response header has been handled
         Serial.printf("[HTTP] GET... code: %d\n", httpCode);
         // file found at server
         if(httpCode == 200) {
               String payload = http.getString();
               Serial.println(payload);
         }
      } else {
         Serial.print("[HTTP] GET... failed, no connection or no HTTP server\n");
      }
    }

    delay(5000);
}

1.3 運行

代碼編譯後上傳到wemos D1,arduino自帶串口工具顯示以下:
#IT明星不是夢#wemos D1 arduino物聯網開發板應用筆記9-HTTP Client編程

從上圖可知,wemos D1已經完成了發送HTTP請求獲取天氣狀況,可是顯示數據存在部分亂碼,這個是因爲編碼致使,接下來咱們使用secureCRT串口工具,並設置顯示編碼方式爲UTF-8。
#IT明星不是夢#wemos D1 arduino物聯網開發板應用筆記9-HTTP Client編程

打開串口,顯示以下:
#IT明星不是夢#wemos D1 arduino物聯網開發板應用筆記9-HTTP Client編程

修改編碼方式後,顯示正常,至此咱們實現了經過wemos D1發送HTTP GET獲取天氣信息。

3、結語

如您在使用過程當中有任何問題,請加QQ羣進一步交流,也能夠github提Issue。

QQ交流羣:906015840 (備註:物聯網項目交流)

獲取源碼:關注公衆號,回覆wemos便可

一葉孤沙出品:一沙一世界,一葉一菩提

#IT明星不是夢#wemos D1 arduino物聯網開發板應用筆記9-HTTP Client編程

相關文章
相關標籤/搜索