恶心我!总说我是广告!这辈子吃不上四个菜!
用心知天气获取天气信息都是老生常谈的事情了吧。基本上能看到的开源项目都是用心知的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);
}