心知天气天气状况获取,ESP32获取天气信息(含源码)

恶心我!总说我是广告!这辈子吃不上四个菜!


用心知天气获取天气信息都是老生常谈的事情了吧。基本上能看到的开源项目都是用心知的API获取的天气信息。


心知天气网站:

https://www.seniverse.com/

又不需要访问那么多次,使用免费版就好了。

访问频次:20次/分钟        对我来说足够了

 直接点申请,会申请到API密钥

API 秘钥 就是所需要的 (注意:' - ' 不能去掉)


选择文档→产品文档查看调用API

下面以天气实况为例子:

  由API接口说明可以知道

//心知天气提供API

https://api.seniverse.com/v3/weather/now.json?key=your_api_key&location=beijing&language=zh-Hans&unit=c

//修改后加入aip_key和城市名称即可构成可用API

https://api.seniverse.com/v3/weather/now.json?key=SKmg2uxKdER08RUk-&location=北京&language=zh-Hans&unit=c

直接将修改好的API复制到浏览器网址,可获得天气信息

此时,可直接使用GET请求数据。

源码可参考获取B站粉丝数项目来修改代码

ESP32超详细学习记录:获取B站粉丝数_喜暖知寒的博客-CSDN博客

串口输出

 可见显示多云,和JSON显示的相同。

代码

代码已经验证成功!

函数介绍可参考获取B站粉丝数,基本一样!

ESP32超详细学习记录:获取B站粉丝数_喜暖知寒的博客-CSDN博客

各位不要用我的API-KEY,自己申请哈~

我把API-KEY一改就不能获取天气了!

(已验证,可直接复制编译)

#include <WiFi.h>

#include <ArduinoJson.h>
#include <HTTPClient.h>
 
const char * ID = "NATCAP_0E35";
const char * PASSWORD = "88888888";
 
//天气相关参数
String API = "SKmg2uxKdER08RUk-";
String WeatherURL = "";
String CITY = "北京";
String url_xinzhi = "";
String Weather = "0";

long sum = 0;

/* 创建实例 */

HTTPClient http;
 
String GitURL(String api,String city)
{
  url_xinzhi =  "https://api.seniverse.com/v3/weather/now.json?key=";
  url_xinzhi += api;
  url_xinzhi += "&location=";
  url_xinzhi += city;
  url_xinzhi += "&language=zh-Hans&unit=c";
  return url_xinzhi;
}
 
void ParseWeather(String url)
{  
  DynamicJsonDocument doc(1024); //分配内存,动态
  http.begin(url);
 
  int httpGet = http.GET();
  if(httpGet > 0)
  {
    Serial.printf("HTTPGET is %d",httpGet);
    
    if(httpGet == HTTP_CODE_OK)
    {
      String json = http.getString();
      Serial.println(json);
      
      deserializeJson(doc, json);
      
      Weather = doc["results"][0]["now"]["text"].as<String>();  
    }
    else
    {
      Serial.printf("ERROR1!!");
    }
  }
  else
  {
    Serial.printf("ERROR2!!");
  }
  http.end();
}
 
void setup() 
{
  Serial.begin(115200);

  //==================wifi连接==================
  
  Serial.println("WiFi:");
  Serial.println(ID);
  Serial.println("PASSWORLD:");
  Serial.println(PASSWORD);
  
  WiFi.begin(ID,PASSWORD);
  
  while(WiFi.status()!=WL_CONNECTED)
  {
    delay(500);
    Serial.println("正在连接...");
  }
 
  Serial.println("连接成功!");
  //==================wifi连接==================
  
  WeatherURL = GitURL(API,CITY); 
  
}
 
void loop() 
{
  Serial.println("连接成功!");
  ParseWeather(WeatherURL);
  Serial.println(Weather);
  Serial.print("执行次数: ");
  Serial.println(sum);
  sum ++;
  delay(50000);  
}

猜你喜欢

转载自blog.csdn.net/qq_41650023/article/details/124697234