心知天气api ESP32
时间: 2024-12-30 07:30:10 浏览: 16
### 集成心知天气API到ESP32
为了在ESP32上集成和使用心知天气API进行天气数据请求,需遵循一系列配置和技术细节。
#### 准备工作
确保已安装Arduino IDE,并通过板管理器添加了ESP32的支持。此外,还需下载并安装`HTTPClient.h`库用于发起HTTP请求以及`WiFi.h`库以便连接Wi-Fi网络[^1]。
#### 连接至Wi-Fi
编写代码使ESP32能够成功接入无线局域网(WiFi),这是向任何在线API发送查询前必不可少的第一步操作。
```cpp
#include <WiFi.h>
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to the Wi-Fi network");
}
```
#### 发起API请求
一旦设备稳定地连上了互联网,则可利用之前提到过的`HTTPClient.h`库来构建针对心知天气API的具体调用逻辑。下面给出了一段简单的示例代码展示如何获取指定城市的当前天气状况:
```cpp
#include <HTTPClient.h>
// ... 上述WiFi部分...
String api_key = "your_apikey"; // 替换成自己的apikey
String city_id_or_location = "Wuhan"; // 可以是城市名或经纬度坐标
String url = String("https://api.seniverse.com/v3/weather/now.json?key=") + api_key +
"&location=" + city_id_or_location;
void loop() {
if ((millis() - previousMillis) >= interval) { // 定义previousMillis 和interval变量,在setup函数初始化
HTTPClient http;
int httpResponseCode = http.GET(url.c_str());
if (httpResponseCode>0){
String payload = http.getString();
Serial.println(httpResponseCode);
Serial.println(payload);
DynamicJsonDocument doc(1024); // 动态分配内存解析JSON响应体
deserializeJson(doc, payload);
const char* result_code = doc["results"][0]["status"];
if(strcmp(result_code,"ok")==0){ // 判断返回状态是否正常
float temperature = doc["results"][0]["now"]["temperature"].as<float>();
String weather = doc["results"][0]["now"]["text"];
Serial.print("Temperature:");
Serial.println(temperature);
Serial.print("Weather Condition:");
Serial.println(weather);
}
}else{
Serial.print("Error on sending GET: ");
Serial.println(httpResponseCode);
}
http.end(); // 关闭连接
previousMillis = millis();
}
}
void setup(){
// 初始化Serial、WiFi...
previousMillis = 0; // 记录上次更新时间戳
interval = 60 * 1000L; // 设置每分钟刷新一次
}
```
此段代码实现了每隔一分钟向心知天气API发出GET请求,并打印出所选地点的温度与天气情况。注意替换其中的API密钥和个人Wi-Fi凭证信息。
阅读全文