上一期使用了ESP32点亮TFT屏幕以及获取时间之后,这期我们使用ESP32获取天气情况。
首先搜索心知天气,进入官网并且注册后,我们可以申请免费版(20次/分钟的申请频率)


我们申请的免费版后在下方会有密钥,这个密钥就是我们要用的

我们按照这样子的方式把我们的私钥填入api.seniverse.com/v3/weather/now.json?key=Your_private_key&location=beijing&language=zh-Hans&unit=c,可以直接将这个复制入浏览器上方的搜索栏观察是否有效。

这样子就成功申请到啦,我们的准备工作也就结束了。
做好上述准备工作之后我们来编写我们的代码

首先我们需要新安装HTTPClient和ArduinoJson库用以进行HTTP连接以及对接收端 Json字符串进行解析。
因为我们的HTTP请求回来时是一段Json字符串需要解析后方可以使用

接着设置我们的网站地址就是上面那个

为了更方便地存储天气信息,我们定义一个结构体来存放我们的数据
// 定义结构体来存储天气数据
struct WeatherData {
int City;//城市代码
int description;//天气代码
double temperature;//温度
};
接着我们编写获取天气的函数,主要为发送HTTP请求,如果响应成功则解析收到的内容。
void getWeatherData() {
HTTPClient http;//创建连接结构体
http.begin(weatherApiUrl);//尝试连接
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) {
String weatherData = http.getString();//获取HTTP响应
DynamicJsonDocument doc(1024);
deserializeJson(doc, weatherData);//解析HTTP
weather.City = doc["results"][0]["location"]["name"].as<int>;//城市
weather.description = doc["results"][0]["now"]["text"].as<int>>;;//天气
weather.temperature = doc["results"][0]["now"]["temperature"].as<double>();//
} else {
Serial.println("Failed to fetch weather data");
}
http.end();
}
我们将城市代码,天气情况以及温度存入我们的结构体中。之后打印我们的时间,天气等信息。
void displayWeather() {
tft.setCursor(10, 50);
timeClient.update();
tft.println(timeClient.getFormattedTime());
tft.print("City: ");
tft.println(weather.City);
tft.print("Description: ");
tft.println(weather.description);
tft.print("Temperature: ");
tft.print(weather.temperature);
tft.println(" °C");
}



登录 或 注册 后才可以进行评论哦!
还没有评论,抢个沙发!