久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3237|回復: 0
收起左側

【零知ESP8266教程】快速入門18 ESP8266HTTPClient庫 獲取天氣請求

[復制鏈接]
ID:349555 發表于 2019-10-31 11:47 | 顯示全部樓層 |閱讀模式

上次我們一起學習用ESP8266開發板創建一個熱點,即發送射頻信號,就像自己的智能手機可以打開熱點,使得他人連接,我們智能手機的角色就是向外發送射頻信號,然而,用自己的手機去連接WiFi,那手機充當的角色就是接收射頻信號的啦。。

同理,零知ESP8266開發板是WiFi模塊,既然有發送信號的功能(創建熱點),當然也有接收信號的功能。這次的分享我們來讓ESP8266開發板接收信息,一起開始實現吧。
一、硬件
電腦,windows系統
零知ESP8266開發板
micro-usb線
二、
(1)軟件庫:
本示例使用零知-ESP8266來獲取天氣信息,首先需要安裝庫:

0.0.jpg

也可以在GitHub下載,注意要下載5.~版本

(2)解壓,然后打開零知開源軟件,界面如下:

0.png

(3)安裝到庫

1.png

2.png

3.png

也可以解壓直接復制到你lingzhi_library存放的位置

這樣就完成安裝了,屆時要記得刷新一下,關閉軟件。

三、
重新打開零知開源軟件,然后燒錄以下代碼:

  1. <font color="rgb(77, 77, 77)"><font face="&quot;"><font style="font-size: 16px">/**
  2. * Demo:
  3. *    演示Http請求天氣接口信息
  4. * @author 云上上云
  5. * @date 2019/06/01
  6. */
  7. #include <ESP8266WiFi.h>
  8. #include <ArduinoJson.h>
  9. #include <ESP8266HTTPClient.h>

  10. //以下三個定義為調試定義
  11. #define DebugBegin(baud_rate)    Serial.begin(baud_rate)
  12. #define DebugPrintln(message)    Serial.println(message)
  13. #define DebugPrint(message)    Serial.print(message)

  14. const char* AP_SSID     = "**********";         //  **********-- 使用時請修改為當前你的 wifi ssid
  15. const char* AP_PSK = "**********";         //  **********-- 使用時請修改為當前你的 wifi 密碼
  16. const char* HOST = "http://api點seniverse<font color="rgb(77, 77, 77)"><font face="&quot;">點</font></font>com";
  17. const char* APIKEY = "wcmquevztdy1jpca";        //API KEY
  18. const char* CITY = "shenzhen";
  19. const char* LANGUAGE = "zh-Hans";//zh-Hans 簡體中文  會顯示亂碼

  20. const unsigned long BAUD_RATE = 115200;                   // serial connection speed
  21. const unsigned long HTTP_TIMEOUT = 5000;               // max respone time from server

  22. // 我們要從此網頁中提取的數據的類型
  23. struct WeatherData {
  24.   char city[16];//城市名稱
  25.   char weather[32];//天氣介紹(多云...)
  26.   char temp[16];//溫度
  27.   char udate[32];//更新時間
  28. };

  29. HTTPClient http;
  30. String GetUrl;
  31. String response;
  32. WeatherData weatherData;

  33. void setup() {
  34.   // put your setup code here, to run once:
  35.   WiFi.mode(WIFI_STA);     //設置esp8266 工作模式
  36.   DebugBegin(BAUD_RATE);
  37.   DebugPrint("Connecting to ");//
  38.   DebugPrintln(AP_SSID);
  39.   WiFi.begin(AP_SSID, AP_PSK);   //連接wifi
  40.   WiFi.setAutoConnect(true);
  41.   while (WiFi.status() != WL_CONNECTED) {
  42.     //這個函數是wifi連接狀態,返回wifi鏈接狀態
  43.     delay(500);
  44.     DebugPrint(".");
  45.   }
  46.   DebugPrintln("");
  47.   DebugPrintln("WiFi connected");
  48.   DebugPrintln("IP address: " + WiFi.localIP());

  49.   //拼接get請求url  
  50.   GetUrl = String(HOST) + "/v3/weather/now.json?key=";
  51.   GetUrl += APIKEY;
  52.   GetUrl += "&location=";
  53.   GetUrl += CITY;
  54.   GetUrl += "&language=";
  55.   GetUrl += LANGUAGE;
  56.   //設置超時
  57.   http.setTimeout(HTTP_TIMEOUT);
  58.   //設置請求url
  59.   http.begin(GetUrl);
  60.   //以下為設置一些頭  其實沒什么用 最重要是后端服務器支持
  61.   http.setUserAgent("esp8266");//用戶代理版本
  62.   http.setAuthorization("esp8266","yssy");//用戶校驗信息
  63. }

  64. void loop() {
  65.   //心知天氣  發送http  get請求
  66.   int httpCode = http.GET();
  67.   if (httpCode > 0) {
  68.       Serial.printf("[HTTP] GET... code: %d\n", httpCode);
  69.       //判斷請求是否成功
  70.       if (httpCode == HTTP_CODE_OK) {
  71.         //讀取響應內容
  72.         response = http.getString();
  73.         DebugPrintln("Get the data from Internet!");
  74.         DebugPrintln(response);
  75.         //解析響應內容
  76.         if (parseUserData(response, &weatherData)) {
  77.           //打印響應內容
  78.           printUserData(&weatherData);
  79.         }
  80.       }
  81.   } else {
  82.       Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
  83.   }
  84.   http.end();
  85.   delay(1000);//每1s調用一次
  86. }

  87. /**
  88. * @Desc 解析數據 Json解析
  89. * 數據格式如下:
  90. * {
  91. *    "results": [
  92. *        {
  93. *            "location": {
  94. *                "id": "WX4FBXXFKE4F",
  95. *                "name": "北京",
  96. *                "country": "CN",
  97. *                "path": "北京,北京,中國",
  98. *                "timezone": "Asia/Shanghai",
  99. *                "timezone_offset": "+08:00"
  100. *            },
  101. *            "now": {
  102. *                "text": "多云",
  103. *                "code": "4",
  104. *                "temperature": "23"
  105. *            },
  106. *            "last_update": "2017-09-13T09:51:00+08:00"
  107. *        }
  108. *    ]
  109. *}
  110. */
  111. bool parseUserData(String content, struct WeatherData* weatherData) {
  112. //    -- 根據我們需要解析的數據來計算JSON緩沖區最佳大小
  113. //   如果你使用StaticJsonBuffer時才需要
  114. //    const size_t BUFFER_SIZE = 1024;
  115. //   在堆棧上分配一個臨時內存池
  116. //    StaticJsonBuffer<BUFFER_SIZE> jsonBuffer;
  117. //    -- 如果堆棧的內存池太大,使用 DynamicJsonBuffer jsonBuffer 代替
  118.   DynamicJsonBuffer jsonBuffer;

  119.   JsonObject& root = jsonBuffer.parseObject(content);

  120.   if (!root.success()) {
  121.     DebugPrintln("JSON parsing failed!");
  122.     return false;
  123.   }

  124.   //復制我們感興趣的字符串
  125.   strcpy(weatherData->city, root["results"][0]["location"]["name"]);
  126.   strcpy(weatherData->weather, root["results"][0]["now"]["text"]);
  127.   strcpy(weatherData->temp, root["results"][0]["now"]["temperature"]);
  128.   strcpy(weatherData->udate, root["results"][0]["last_update"]);
  129.   //  -- 這不是強制復制,你可以使用指針,因為他們是指向“內容”緩沖區內,所以你需要確保
  130.   //   當你讀取字符串時它仍在內存中
  131.   return true;
  132. }

  133. // 打印從JSON中提取的數據
  134. void printUserData(const struct WeatherData* weatherData) {
  135.   DebugPrintln("Print parsed data :");
  136.   DebugPrint("City : ");
  137.   DebugPrint(weatherData->city);
  138.   DebugPrint(", \t");
  139.   DebugPrint("Weather : ");
  140.   DebugPrint(weatherData->weather);
  141.   DebugPrint(",\t");
  142.   DebugPrint("Temp : ");
  143.   DebugPrint(weatherData->temp);
  144.   DebugPrint(" C");
  145.   DebugPrint(",\t");
  146.   DebugPrint("Last Updata : ");
  147.   DebugPrint(weatherData->udate);
  148.   DebugPrintln("\r\n");
  149. }</font></font></font>
復制代碼


2、驗證,上傳程序。

四、點擊“調試”,就可看到結果啦,如下圖:

4.png


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 男女网站在线观看 | av免费网| 精品三级在线观看 | 99热.com | 午夜电影在线播放 | 亚洲精视频 | 2018国产精品 | 欧美爱爱视频网站 | 欧美三级网站 | 青青伊人久久 | 欧美久久国产 | 亚洲成人精品 | 国产一级在线观看 | 91在线观看 | 中文字幕 欧美 日韩 | 国产精品99久久久久久久久久久久 | 亚洲精品乱码久久久久久9色 | 日本一区二区三区在线观看 | 欧美日韩亚洲视频 | 精品视频在线播放 | 亚洲网在线 | wwwww在线观看| 久久久久久久久久久久久九 | 成人小视频在线观看 | 日韩成年人视频在线 | 久久一区二区三区四区五区 | 国产电影一区二区在线观看 | 欧美精品乱码99久久影院 | 欧美在线一区二区三区 | 成人精品国产一区二区4080 | 日韩一区在线观看视频 | 婷婷精品 | 中文字幕精品一区二区三区精品 | 亚洲国产一区二区视频 | 亚洲午夜电影 | 日本亚洲精品成人欧美一区 | 国产福利在线视频 | 亚洲色欧美另类 | 日韩二 | 亚洲成人一区 | 中文字幕专区 |