国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ESP8266獲取天氣預(yù)報(bào)信息,并使用CJSON解析天氣預(yù)報(bào)數(shù)據(jù)

這篇具有很好參考價(jià)值的文章主要介紹了ESP8266獲取天氣預(yù)報(bào)信息,并使用CJSON解析天氣預(yù)報(bào)數(shù)據(jù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、實(shí)現(xiàn)功能

當(dāng)前文章介紹如何使用ESP8266和STM32微控制器,搭配OLED顯示屏,制作一個(gè)能夠?qū)崟r(shí)顯示天氣預(yù)報(bào)的智能設(shè)備。將使用心知天氣API來(lái)獲取天氣數(shù)據(jù),并使用MQTT協(xié)議將數(shù)據(jù)傳遞給STM32控制器,最終在OLED顯示屏上顯示。

心知天氣是一家專業(yè)的氣象數(shù)據(jù)服務(wù)提供商,致力于為全球用戶提供高質(zhì)量、定制化的氣象數(shù)據(jù)服務(wù)。其主要產(chǎn)品包括天氣API、空氣質(zhì)量API、災(zāi)害預(yù)警API等。用戶可以通過(guò)心知天氣的API接口,獲取準(zhǔn)確、實(shí)時(shí)的天氣數(shù)據(jù),從而為各種應(yīng)用場(chǎng)景提供支持,例如智能家居、出行、電商等。心知天氣的數(shù)據(jù)覆蓋全球200多個(gè)國(guó)家和地區(qū),每日處理超過(guò)10億次API請(qǐng)求,是業(yè)內(nèi)領(lǐng)先的氣象數(shù)據(jù)服務(wù)提供商之一。
https://www.seniverse.com/

ESP8266獲取天氣預(yù)報(bào)信息,并使用CJSON解析天氣預(yù)報(bào)數(shù)據(jù)

二、硬件準(zhǔn)備

1. ESP8266模塊

ESP8266是一款WiFi模塊,它具有強(qiáng)大的網(wǎng)絡(luò)連接功能,可以輕松地連接到互聯(lián)網(wǎng)。將使用ESP8266模塊來(lái)獲取天氣數(shù)據(jù),并將其發(fā)送給STM32控制器。具體來(lái)說(shuō),我們將使用正點(diǎn)原子ATK-ESP8266模塊,這是一款集成ESP8266芯片的小板子。

2. STM32微控制器

STM32是一款強(qiáng)大的32位微控制器,具有多種接口和功能。將使用STM32F103C8T6控制器,這是一款非常流行的型號(hào),易于獲得且價(jià)格較為合理。

3. OLED顯示屏

OLED是一種非常流行的顯示技術(shù),具有高對(duì)比度、低功耗、快速響應(yīng)等優(yōu)點(diǎn)。將使用0.96英寸128x64像素的OLED顯示屏。

三、CJSON解析天氣預(yù)報(bào)數(shù)據(jù)

3.1 接口返回的數(shù)據(jù)

{
  "results": [
    {
      "location": {
        "id": "WTEMH46Z5N09",
        "name": "合肥",
        "country": "CN",
        "path": "合肥,合肥,安徽,中國(guó)",
        "timezone": "Asia/Shanghai",
        "timezone_offset": "+08:00"
      },
      "now": {
        "text": "陰",
        "code": "9",
        "temperature": "12",
        "feels_like": "18",
        "pressure": "1000",
        "humidity": "89",
        "visibility": "12.0",
        "wind_direction": "西南",
        "wind_direction_degree": "245",
        "wind_speed": "19.0",
        "wind_scale": "3",
        "clouds": "85",
        "dew_point": ""
      },
      "last_update": "2023-04-04T14:20:13+08:00"
    }
  ]
}

3.2 CJSON是什么

CJSON是一款輕量級(jí)的C語(yǔ)言JSON解析器,其全稱是“cJSON”,由Dave Gamble編寫。它簡(jiǎn)單易用,可嵌入到C應(yīng)用程序中,既支持JSON字符串的解析,也支持JSON對(duì)象的創(chuàng)建及操作。CJSON不依賴于任何其他的庫(kù)或組件,使用它只需要引入其頭文件即可。

CJSON的使用方式相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,需要進(jìn)行以下幾個(gè)步驟:

1. 在應(yīng)用程序中包含cJSON的頭文件:#include "cJSON.h"2. 調(diào)用cJSON_Parse函數(shù),將JSON字符串轉(zhuǎn)換為CJSON對(duì)象。
3. 使用cJSON提供的API函數(shù)對(duì)CJSON對(duì)象進(jìn)行操作,包括讀取、修改、刪除、添加等。
4. 在程序結(jié)束時(shí),記得釋放cJSON對(duì)象的內(nèi)存空間,避免內(nèi)存泄漏。

CJSON的解析速度相對(duì)較快,占用的內(nèi)存開(kāi)銷也比較小,因此非常適用于資源有限的嵌入式系統(tǒng)中使用。

3.3 解析數(shù)據(jù)

使用CJSON解析上述JSON數(shù)據(jù)非常簡(jiǎn)單,只需要按照以下步驟操作:

  1. 引入CJSON庫(kù)文件
#include <cJSON.h>
  1. 解析JSON數(shù)據(jù)并創(chuàng)建cJSON對(duì)象
char* json_data = "{\"results\":[{\"location\":{\"id\":\"WTEMH46Z5N09\",\"name\":\"合肥\",\"country\":\"CN\",\"path\":\"合肥,合肥,安徽,中國(guó)\",\"timezone\":\"Asia/Shanghai\",\"timezone_offset\":\"+08:00\"},\"now\":{\"text\":\"陰\",\"code\":\"9\",\"temperature\":\"12\",\"feels_like\":\"18\",\"pressure\":\"1000\",\"humidity\":\"89\",\"visibility\":\"12.0\",\"wind_direction\":\"西南\",\"wind_direction_degree\":\"245\",\"wind_speed\":\"19.0\",\"wind_scale\":\"3\",\"clouds\":\"85\",\"dew_point\":\"\"},\"last_update\":\"2023-04-04T14:20:13+08:00\"}]}";
cJSON* root = cJSON_Parse(json_data);

在這個(gè)代碼片段中,我們首先定義了一個(gè)字符串類型的變量json_data,用于存儲(chǔ)上述JSON數(shù)據(jù)。然后,我們調(diào)用cJSON_Parse()函數(shù)來(lái)解析JSON數(shù)據(jù),并將解析結(jié)果保存在root指針?biāo)赶虻腸JSON對(duì)象中。

  1. 從cJSON對(duì)象中提取數(shù)據(jù)
cJSON* location = cJSON_GetObjectItem(root, "location");
char* city = cJSON_GetObjectItem(location, "name")->valuestring;
cJSON* now = cJSON_GetObjectItem(root, "now");
int temperature = cJSON_GetObjectItem(now, "temperature")->valueint;
char* text = cJSON_GetObjectItem(now, "text")->valuestring;

在這個(gè)代碼片段中,我們使用cJSON_GetObjectItem()函數(shù)從root指針?biāo)赶虻腸JSON對(duì)象中提取一個(gè)名為location的JSON對(duì)象,并從該JSON對(duì)象中獲取名為name的字符串類型變量。類似地,我們也可以從root指針?biāo)赶虻腸JSON對(duì)象中提取名為now的JSON對(duì)象,并從該JSON對(duì)象中獲取名為temperaturetext的整型和字符串類型變量。

  1. 釋放cJSON對(duì)象
cJSON_Delete(root);

最后,我們需要釋放之前創(chuàng)建的cJSON對(duì)象,以釋放內(nèi)存空間。

完整的代碼示例如下:

#include <cJSON.h>
#include <stdio.h>

int main() {
    char* json_data = "{\"results\":[{\"location\":{\"id\":\"WTEMH46Z5N09\",\"name\":\"合肥\",\"country\":\"CN\",\"path\":\"合肥,合肥,安徽,中國(guó)\",\"timezone\":\"Asia/Shanghai\",\"timezone_offset\":\"+08:00\"},\"now\":{\"text\":\"陰\",\"code\":\"9\",\"temperature\":\"12\",\"feels_like\":\"18\",\"pressure\":\"1000\",\"humidity\":\"89\",\"visibility\":\"12.0\",\"wind_direction\":\"西南\",\"wind_direction_degree\":\"245\",\"wind_speed\":\"19.0\",\"wind_scale\":\"3\",\"clouds\":\"85\",\"dew_point\":\"\"},\"last_update\":\"2023-04-04T14:20:13+08:00\"}]}";
    cJSON* root = cJSON_Parse(json_data);

    cJSON* location = cJSON_GetObjectItem(root, "location");
    char* city = cJSON_GetObjectItem(location, "name")->valuestring;
    cJSON* now = cJSON_GetObjectItem(root, "now");
    int temperature = cJSON_GetObjectItem(now, "temperature")->valueint;
    char* text = cJSON_GetObjectItem(now, "text")->valuestring;

    printf("City: %s\n", city);
    printf("Temperature: %d\n", temperature);
    printf("Weather: %s\n", text);

    cJSON_Delete(root);

    return 0;
}

在這個(gè)代碼示例中,使用了cJSON_Parse()、cJSON_GetObjectItem()、cJSON_Delete()等函數(shù)來(lái)解析和處理JSON數(shù)據(jù)。

3.4 獲取數(shù)據(jù)

下面是ESP8266訪問(wèn)HTTP接口請(qǐng)求的代碼:

#include <SoftwareSerial.h>

// 定義ESP8266串口對(duì)象
SoftwareSerial esp8266(PA10, PA9); // RX, TX

void setup() {
  Serial.begin(9600);

  // 初始化ESP8266串口通信波特率為9600
  esp8266.begin(9600);

  // 發(fā)送AT指令測(cè)試ESP8266是否正常工作
  esp8266.println("AT");
  delay(500);
  if (esp8266.find("OK")) {
    Serial.println("ESP8266 is working properly.");
  } else {
    Serial.println("ESP8266 is not working properly.");
  }
}

void loop() {
  // 向ESP8266發(fā)送HTTP請(qǐng)求
  esp8266.println("AT+CIPSTART=\"TCP\",\"api.seniverse.com\",80");
  if (esp8266.find("OK")) {
    Serial.println("TCP connection established.");
  } else {
    Serial.println("TCP connection failed.");
  }

  String url = "/v3/weather/now.json?key=your_API_KEY&location=your_LOCATION";
  String request = "GET " + url + " HTTP/1.1\r\n" +
                   "Host: api.seniverse.com\r\n" +
                   "User-Agent: STM32/1.0\r\n" +
                   "Connection: close\r\n\r\n";
  int length = request.length();
  String cmd = "AT+CIPSEND=" + String(length);
  esp8266.println(cmd);
  if (esp8266.find(">")) {
    Serial.println("Sending HTTP request...");
    esp8266.print(request);
  } else {
    Serial.println("Failed to send HTTP request.");
  }

  // 接收HTTP響應(yīng)
  while (esp8266.available()) {
    String response = esp8266.readStringUntil('\n');
    Serial.println(response);
  }

  // 關(guān)閉TCP連接
  esp8266.println("AT+CIPCLOSE");
  delay(1000);
}

在這個(gè)示例代碼中,初始化了ESP8266串口對(duì)象,并通過(guò)發(fā)送AT指令測(cè)試ESP8266是否正常工作。然后,在loop()函數(shù)中,向ESP8266發(fā)送一個(gè)HTTP請(qǐng)求,包括請(qǐng)求頭和請(qǐng)求體。發(fā)送完畢后,等待ESP8266返回HTTP響應(yīng)并將其打印出來(lái)。最后,關(guān)閉TCP連接并等待一秒鐘,然后重復(fù)上述步驟。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-496604.html

到了這里,關(guān)于ESP8266獲取天氣預(yù)報(bào)信息,并使用CJSON解析天氣預(yù)報(bào)數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 003.0.96‘OLED+合宙ESP32C3+和風(fēng)天氣預(yù)報(bào)

    003.0.96‘OLED+合宙ESP32C3+和風(fēng)天氣預(yù)報(bào)

    使用VScode platformio開(kāi)發(fā) 1.oled顯示 2.配置WIFI 3.得到B站粉絲數(shù) 4.使用json解析獲得的粉絲數(shù),顯示到OLED 結(jié)構(gòu)體 定義結(jié)構(gòu)體 實(shí)例化結(jié)構(gòu)體 WeatherData *data可以理解為 int *data,而*data則是指針,指針就是地址 todaymsg取出存放的數(shù)據(jù),todaymsg相當(dāng)于地址(指針),數(shù)據(jù)就存在這個(gè)地址中,

    2023年04月24日
    瀏覽(19)
  • 【雕爺學(xué)編程】Arduino智能家居之使用定時(shí)器獲取未來(lái)三天的天氣預(yù)報(bào)

    【雕爺學(xué)編程】Arduino智能家居之使用定時(shí)器獲取未來(lái)三天的天氣預(yù)報(bào)

    Arduino是一個(gè)開(kāi)放源碼的電子原型平臺(tái),它可以讓你用簡(jiǎn)單的硬件和軟件來(lái)創(chuàng)建各種互動(dòng)的項(xiàng)目。Arduino的核心是一個(gè)微控制器板,它可以通過(guò)一系列的引腳來(lái)連接各種傳感器、執(zhí)行器、顯示器等外部設(shè)備。Arduino的編程是基于C/C++語(yǔ)言的,你可以使用Arduino IDE(集成開(kāi)發(fā)環(huán)境)來(lái)

    2024年02月04日
    瀏覽(27)
  • 《AIGC學(xué)習(xí)之 LangChain獲取天氣預(yù)報(bào)》

    《AIGC學(xué)習(xí)之 LangChain獲取天氣預(yù)報(bào)》

    1、把https://colab.research.google.com/drive/1zTTPYk51WvPV8GqFRO18kDe60clKW8VV 拷貝到自己的 drive ? 2、先運(yùn)行 3、然后下拉到最下面 can throw errors based on API return length 原理是用自然語(yǔ)言問(wèn) OpenMeteo API 關(guān)于某個(gè)地區(qū)的天氣。 得到長(zhǎng)沙的天氣是22.9°,可以打開(kāi)天氣預(yù)報(bào)查看,也是差不多這個(gè)溫度

    2024年02月16日
    瀏覽(39)
  • Rust采集天氣預(yù)報(bào)信息并實(shí)時(shí)更新數(shù)據(jù)

    Rust采集天氣預(yù)報(bào)信息并實(shí)時(shí)更新數(shù)據(jù)

    最近天氣溫度時(shí)高時(shí)低,雖說(shuō)這是大自然的力量人無(wú)法抗拒,不能改變那么我們就做預(yù)防工作。今天我將用Rust寫一個(gè)爬蟲程序?qū)崿F(xiàn)電腦桌面實(shí)時(shí)更新天氣情況,這個(gè)是一個(gè)底層邏輯,需要多方面配合,不僅要有完善的代碼還有爬蟲IP試試更新才能保證數(shù)據(jù)最完整最新。 這是一

    2024年01月19日
    瀏覽(22)
  • 微信小程序?qū)崙?zhàn)項(xiàng)目開(kāi)發(fā)(天氣預(yù)報(bào)項(xiàng)目實(shí)戰(zhàn)):內(nèi)涵開(kāi)發(fā)說(shuō)明文檔、需求文檔 && 手把手分步驟教你寫出自己的小程序項(xiàng)目 && 天氣預(yù)報(bào)小程序 && 時(shí)實(shí)請(qǐng)求獲取天氣 && 自定義功能 && 完整的源代碼

    微信小程序?qū)崙?zhàn)項(xiàng)目開(kāi)發(fā)(天氣預(yù)報(bào)項(xiàng)目實(shí)戰(zhàn)):內(nèi)涵開(kāi)發(fā)說(shuō)明文檔、需求文檔 && 手把手分步驟教你寫出自己的小程序項(xiàng)目 && 天氣預(yù)報(bào)小程序 && 時(shí)實(shí)請(qǐng)求獲取天氣 && 自定義功能 && 完整的源代碼

    微信小程序開(kāi)發(fā)實(shí)現(xiàn)天氣預(yù)報(bào) 需求分析 靜態(tài)頁(yè)面設(shè)計(jì) :要求界面美觀 → 在wxss代碼文件中對(duì) wxml代碼文件進(jìn)行合理布局和美化,舒適的交互效果. 功能邏輯完善 :能夠使用到 wx.request 請(qǐng)求接口實(shí)現(xiàn)天氣預(yù)報(bào)查詢的功能 主要使用到的技術(shù)棧如下: wxml:中使用了 picker 組件標(biāo)簽

    2024年02月02日
    瀏覽(32)
  • Vue中使用天氣預(yù)報(bào)

    Vue中使用天氣預(yù)報(bào)

    第一步 : 打開(kāi)這個(gè)網(wǎng)站自己設(shè)置好想要的樣式 和風(fēng)天氣插件 | 和風(fēng)天氣插件產(chǎn)品,免費(fèi)、跨終端。適配你的網(wǎng)站、APP、公眾號(hào) 一般選第一個(gè)就好 第二步 : 調(diào)整好樣式 生成你的代碼 最后記得點(diǎn)生成 第三步: 創(chuàng)建一個(gè) 新的組件(.vue文件) 在里面寫入以下的代碼 注意事項(xiàng)寫

    2024年02月11日
    瀏覽(26)
  • 【小項(xiàng)目】微信定時(shí)推送天氣預(yù)報(bào)Github項(xiàng)目使用及原理介紹-包含cron、天氣預(yù)報(bào)、常用api...

    【小項(xiàng)目】微信定時(shí)推送天氣預(yù)報(bào)Github項(xiàng)目使用及原理介紹-包含cron、天氣預(yù)報(bào)、常用api...

    一、資料鏈接 1、github地址 https://github.com/qq1534774766/wx-push 2、教程地址 https://blog.csdn.net/qq15347747/article/details/126521774 3、易客云API(自動(dòng)發(fā)送天氣) https://yikeapi.com/account/index 4、apispace-各種接口(名人名言) https://www.apispace.com/console/api?orgId=6356 5、微信公眾平臺(tái) https://mp.weixin.qq.com/d

    2024年02月02日
    瀏覽(34)
  • .NET7使用HttpClient實(shí)現(xiàn)查詢天氣預(yù)報(bào)接口

    朋友做網(wǎng)站需要根據(jù)城市展示天氣預(yù)報(bào),找了一圈沒(méi)有找到靠譜的接口,今天在中央氣象臺(tái)的官網(wǎng)查詢某個(gè)城市找到了接口,先用postman試了一下居然可以使用,可以查詢某個(gè)城市7天的天氣預(yù)報(bào)等信息。但是查詢編碼是氣象臺(tái)自己的編碼,在網(wǎng)上搜索了一下居然有這個(gè)編碼。

    2023年04月14日
    瀏覽(33)
  • ESP8266使用AT指令獲取時(shí)間和心知天氣

    ESP8266使用AT指令獲取時(shí)間和心知天氣

    一.硬件:ESP8266,USB TO TTL模塊,軟件:串口調(diào)試助手 二.在心知官網(wǎng)注冊(cè)賬號(hào):心知天氣 - 高精度氣象數(shù)據(jù) - 天氣數(shù)據(jù)API接口 - 行業(yè)氣象解決方案 三.連接esp8266和usb轉(zhuǎn)ttl,打開(kāi)串口調(diào)試助手 四.發(fā)送AT指令 1.復(fù)位模塊 發(fā)送 AT+RST 返回 ready 2.測(cè)試AT指令 發(fā)送 AT 返回 OK 3.配置STA模式

    2024年02月04日
    瀏覽(26)
  • kotlin 編寫一個(gè)簡(jiǎn)單的天氣預(yù)報(bào)app (七)使用material design

    kotlin 編寫一個(gè)簡(jiǎn)單的天氣預(yù)報(bào)app (七)使用material design

    對(duì)之前的天氣預(yù)報(bào)的app進(jìn)行了優(yōu)化,原先的天氣預(yù)報(bào)程序邏輯是這樣的。 使用text和button組合了一個(gè)輸入城市,并請(qǐng)求openweathermap對(duì)應(yīng)數(shù)據(jù),并顯示的功能。 但是搜索城市的時(shí)候,可能會(huì)有錯(cuò)誤,比如大小寫,比如拼寫之類的,所以打算給他升級(jí)一下。 目標(biāo): 在搜索的時(shí)候需

    2024年04月27日
    瀏覽(34)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包