项目介绍
此库用于ESP32物联网开发板通过HTTPS协议获取和风天气API所提供的免费天气信息。使用此库可以省去繁杂的HTTPS请求以及JSON解析部分,使用几行代码即可获取有效信息,大大简化了开发步骤。
注:由于信息的安全性要求不高,故HTTPS请求中设置了不进行身份校验;
只涉及常人经常关注的信息如温度、风力、降雨等,其它一般人不关注的信息如露点温度等并未解析;
开源地址:https://github.com/ye-zhang0720/ESP32_HEWEATHER
准备工作
- 注册和风天气并获得key,详见 https://dev.heweather.com/docs/start/get-api-key;
- 安装ESP32扩展程序
- 安装ArduinoJson库,详见 https://github.com/bblanchon/ArduinoJson;
其他说明:
-
私钥获取 https://dev.heweather.com/docs/start/get-api-key;
-
城市代码 https://github.com/heweather/LocationList
excel表 Location_ID,亦可通过城市搜索获取 ; -
和风天气开发者官方文档:https://dev.heweather.com/;
使用方法
- 安装本库
1). 下载压缩包或克隆;
2). 解压并复制到项目文件夹下的libraries目录下;
3). 重启Arduino IDE。 - example目录中列出了使用的基本结构和所有函数示例,为主要参考文档;
获取实时天气信息
WeatherNow weatherNow; // 建立weatherNow对象
weatherNow.config(UserKey, Location, Unit, Lang); // 配置请求信息
weatherNow.getServerCode(); // 获取API状态码
weatherNow.getLastUpdate(); // 获取服务器更新天气信息时间
weatherNow.getTemp(); // 获取实况温度
weatherNow.getFeelLike(); // 获取实况体感温度
weatherNow.getIcon(); // 获取当前天气图标代码
weatherNow.getWeatherText(); // 获取实况天气状况的文字描述
weatherNow.getWindDir(); // 获取实况风向
weatherNow.getWindScale(); // 获取实况风力等级
weatherNow.getHumidity(); // 获取实况相对湿度百分比数值
weatherNow.getPrecip(); // 获取实况降水量,毫米
获取天气预报信息
WeatherForecast WeatherForecast; // 建立WeatherForecast对象
WeatherForecast.config(UserKey, Location, Unit, Lang); // 配置请求信息
WeatherForecast.getServerCode(); // 获取API状态码
WeatherForecast.getLastUpdate(); // 获取服务器更新天气信息时间
// 以下i取值为 0,1,2,分别代表今天,明天和后天
WeatherForecast.getTempMax(i); // 获取最高温度
WeatherForecast.getTempMin(i); // 获取最低温度
WeatherForecast.getIconDay(i); // 获取天气图标代码
WeatherForecast.getTextDay(i); // 获取天气状况的文字描述
WeatherForecast.getWindDirDay(i); // 获取风向
WeatherForecast.getwindScaleDay(i); // 获取风力等级
WeatherForecast.getHumidity(i); // 获取相对湿度百分比数值
WeatherForecast.getPrecip(i); // 获取降水量,毫米
WeatherForecast.getUvIndex(i); // 获取紫外线强度指数
获取空气质量信息
AirQuality AirQuality; // 建立AirQuality对象
AirQuality.config(UserKey, Location, Unit, Lang); // 配置请求信息
WeatherForecast.getServerCode(); // 获取API状态码
WeatherForecast.getLastUpdate(); // 获取服务器更新天气信息时间
AirQuality.getServerCode(); // 获取API状态码
AirQuality.getLastUpdate(); // 获取服务器更新天气信息时间
AirQuality.getAqi(); // 实时空气质量指数
AirQuality.getCategory(); // 实时空气质量指数级别
AirQuality.getPrimary(); // 实时空气质量的主要污染物,优时返回值为NA
获取空气质量实列
#include <ESP32_Heweather.h>
const char* ssid = "SSID"; // WiFi名称
const char* password = "PASSWORD"; // WiFi密码
String UserKey = "YOUR-KEY"; // 私钥 https://dev.heweather.com/docs/start/get-api-key
String Location = "101010100"; // 城市代码 https://github.com/heweather/LocationList,表中的 Location_ID
String Unit = "m"; // 公制-m/英制-i
String Lang = "zh"; // 语言 英文-en/中文-zh
float ROUND = 0.5; // 更新间隔<小时>空气质量API 1小时更新一次
AirQuality AirQuality;
void setup(){
Serial.begin(9600);
Serial.println("");
ConnectWiFi(); // 连接WiFi
AirQuality.config(UserKey, Location, Unit, Lang); // 配置请求信息
}
void loop(){
if(AirQuality.get()){ // 获取更新
Serial.println(F("======AirQuality Info======"));
Serial.print("Server Response: ");
Serial.println(AirQuality.getServerCode()); // 获取API状态码
Serial.print(F("Last Update: "));
Serial.println(AirQuality.getLastUpdate()); // 获取服务器更新天气信息时间
Serial.print(F("AirQuality Aqi: "));
Serial.println(AirQuality.getAqi()); // 实时空气质量指数
Serial.print(F("Category: "));
Serial.println(AirQuality.getCategory()); // 实时空气质量指数级别
Serial.print(F("Primary: "));
Serial.println(AirQuality.getPrimary()); // 实时空气质量的主要污染物,优时返回值为 NA
Serial.println(F("========================"));
} else { // 更新失败
Serial.println("Update Failed...");
Serial.print("Server Response: ");
Serial.println(AirQuality.getServerCode()); // 参考 https://dev.heweather.com/docs/start/status-code
}
delay(ROUND * 3600000);
}
// 连接WiFi
void ConnectWiFi(){
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Connecting to ");
Serial.print(ssid);
int i = 0;
while (WiFi.status() != WL_CONNECTED && (i < 10)) {
delay(1000);
Serial.print('.');
i++;
}
if (i == 10) { // 10s失败
Serial.println("WiFi Connection Failed");
} else { // 成功
Serial.println("");
Serial.println("WiFi Connection Successful!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
}
1097





