ESP32基于arduino和风天气获取代码

项目介绍

此库用于ESP32物联网开发板通过HTTPS协议获取和风天气API所提供的免费天气信息。使用此库可以省去繁杂的HTTPS请求以及JSON解析部分,使用几行代码即可获取有效信息,大大简化了开发步骤。

注:由于信息的安全性要求不高,故HTTPS请求中设置了不进行身份校验;
只涉及常人经常关注的信息如温度、风力、降雨等,其它一般人不关注的信息如露点温度等并未解析;

开源地址:https://github.com/ye-zhang0720/ESP32_HEWEATHER

准备工作

  1. 注册和风天气并获得key,详见 https://dev.heweather.com/docs/start/get-api-key;
  2. 安装ESP32扩展程序
  3. 安装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. 安装本库
    1). 下载压缩包或克隆;
    2). 解压并复制到项目文件夹下的libraries目录下;
    3). 重启Arduino IDE。
  2. 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());
  }
}
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值