<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      基于Arduino和ESP8266的JSON數據獲取與解壓之和風天氣

      基于Arduino和ESP8266的JSON數據獲取與解壓之和風天氣

      摘要

      • 簡要比較了幾個免費天氣數據接口;介紹了通過HTTP和HTTPS獲取數據,以及Gzip壓縮格式數據的獲取;解壓Gzip格式數據的方法;介紹了獲取網絡數據時的注意事項,包括數據完整性、數據存儲、內存分配、數據有效性檢查。推薦了一個獲取并解析和風天氣數據的第三方庫。

      背景說明

      • 起因:點燈科技氣象數據接口暫停使用,尋找替代方案。

      • 免費天氣數據接口比較

        數據來源 網絡協議 內容編碼 數據格式 接口限制 更新頻率
        點燈科技 HTTPS None JSON 30次/天 2小時
        和風天氣 HTTPS Gzip JSON 1000次/天 10分鐘
        高德天氣 HTTPS None JSON 300000/天 多次/時

      操作實踐

      獲取數據

      • 通過 HTTP 獲取數據

        HTTPClient httpclient;
        WiFiClient wificlient;
        
        if(httpclient.begin(wificlient, URL))
        {
            httpCode = httpclient.GET();
            if(httpCode == HTTP_CODE_OK) 
                String payload = httpclient.getString();
            else
                Serial.printf("[HTTP] GET... failed, error: %s\n", httpclient.errorToString(httpCode).c_str());
            httpclient.end();
        }
        
      • 通過 HTTPS 獲取數據

        HTTPClient httpsclient;
        BearSSL::WiFiClientSecure wificlient;
        
        wificlient.setInsecure();
        
        if(httpsclient.begin(wificlient, URL))
        {
            httpCode = httpsclient.GET();
            if(httpCode == HTTP_CODE_OK) 
                String payload = httpsclient.getString();
            else
                Serial.printf("[HTTP] GET... failed, error: %s\n", httpsclient.errorToString(httpCode).c_str());
            httpsclient.end();
        }
        
      • 通過 HTTPS 獲取壓縮格式數據

        HTTPClient httpsclient;
        BearSSL::WiFiClientSecure wificlient;
        
        wificlient.setInsecure();
        
        if(httpsclient.begin(wificlient, URL))
        {
            httpCode = httpsclient.GET();      
            if(httpCode == HTTP_CODE_OK) 
            {
                content_len = httpsclient.getSize(); // get length of document (is -1 when Server sends no Content-Length header)
                content_encoding = httpsclient.header("content-encoding");
        
                if((httpsclient.hasHeader("content-encoding")) && (content_encoding.equals("gzip"))) 
                {
                    while((httpsclient.connected()) && ((content_len > 0) || (content_len == -1))) 
                    {
                        available_size = wificlient.available(); // !返回值最大只有245.
        
                        if(available_size) 
                        {
                            realsize = (available_size > payload_buffer_size) ? payload_buffer_size : available_size;
                            readBytesSize = wificlient.readBytes(payload_buffer+offset, realsize); 
                            offset += readBytesSize;
        
                            if(content_len > 0)
                                content_len -= readBytesSize;
                        }
                    }
                    *payload_size = offset;
              }
            }
        }
        

      解壓數據

      • 采用tignioj/ArduinoZlib庫對gzip格式的數據進行解壓。ArduinoZlib封裝了zlib庫的解壓縮功能。

      • zlib庫支持對gzip和Zip格式的數據進行解壓和壓縮。

      注意事項

      • 數據完整性:函數wificlient.available()返回的等待讀取的數據字節數似乎有限制(245),需要多次讀取才能獲得完整的數據,因此應增加數據完整性檢查。

      • 數據存儲:在進行 HTTP/HTTPS 訪問時使用大數組會導致網絡訪問出錯,使用malloc()手動分配堆可以解決這個問題。

      • 內存分配:使用malloc()分配堆時需要切換內存管理方案為16KB cache + 48KB IRAM and 2nd Heap (shared),此時才支持標準的malloc()API。具體信息可參見調整ICACHE與IRAM的比率

      • 數據檢查:返回的天氣數據不一定是正確的,可以使用String.indexOf()查找返回的字符串數據中是否有指定的關鍵字。

      • 和風天氣:返回的數據已強制使用gzip壓縮,在請求頭中添加&gzip=n的方法已失效。如果僅使用和風天氣的數據接口,可使用tignioj/ESP8266_Heweather庫提供的接口來獲取和風天氣提供的天氣數據。

      參考資料


      版權聲明:本文為「夢幻之心星」原創,依據 CC BY-NC-SA 4.0 許可證進行授權,轉載請附上原文出處鏈接及本聲明。


      博客園地址:http://www.rzrgm.cn/Sky-seeker

      關注微信公眾號,獲取即時推送;點擊左下角閱讀原文,享受最佳閱讀體驗!

      微信名:夢幻之心星 微信號:Sky-seeker


      posted @ 2023-05-16 00:09  夢幻之心星  閱讀(1918)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 国产成人免费观看在线视频| 青青草无码免费一二三区| 国产一区二区波多野结衣| 亚洲男人的天堂久久香蕉| 国产亚洲欧美另类一区二区| gogogo高清在线观看视频中文| 亚洲综合伊人久久大杳蕉| 午夜精品久久久久久久2023| 中文字幕国产日韩精品| 亚洲中文字字幕精品乱码| 精品人妻丰满久久久a| 无码人妻斩一区二区三区| 乱色老熟妇一区二区三区| 亚洲人成电影网站色| 你懂的一区二区福利视频| 欧美国产日产一区二区| 亚洲日韩久热中文字幕| 久久精品免视看国产成人| 日本免费精品| 亚洲av综合色一区二区| 久久久久久久一线毛片| 久久国产乱子精品免费女| 久久久久国精品产熟女久色| 国产福利深夜在线播放| 亚洲国产精品成人无码区| 亚洲欧洲美洲无码精品va | 人成午夜免费视频无码| 日韩精品一区二区在线看| 日本一区二区不卡精品| 日韩欧美在线综合网另类| 狠狠综合久久av一区二| 成人免费亚洲av在线| 天堂国产一区二区三区四区不卡 | 高级艳妇交换俱乐部小说| 亚洲码国产精品高潮在线| 巨熟乳波霸若妻在线播放| 俄罗斯老熟妇性爽xxxx| 乱人伦中文视频在线| 人妻少妇精品系列一区二区| 亚洲夂夂婷婷色拍ww47| 久久99国产亚洲高清观看首页|