上一期使用了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"); }
登录 或 注册 后才可以进行评论哦!
还没有评论,抢个沙发!