自制ESP32 Arduino框架下和风天气数据获取的库

其实这篇文章只是在介绍自己的库
哈哈,都有点像广告了。

ESP32 和风天气获取库

这个库目前为初版,可能会有其他诡异的问题,遇到问题,欢迎来我的仓库提交Issue!

仓库地址:https://github.com/unname499/ESP32_QWEATHER/

其实README已经够详细了,所以我把使用方法复制过来吧

1
2
3
4
5
6
7
8
9
10
11
12
#include <weather.h>           // 导入此库头文件
Config gc(your-private-key, your-kid, your-sub,
your-api-host, your-api-key, your-real-address); // 配置
WeatherNow weatherNow(gc); // 建立weatherNow对象
weatherNow.getServerCode(); // 获取API状态码
weatherNow.getTemp(); // 获取实况温度
weatherNow.getFeelLike(); // 获取实况体感温度
weatherNow.getWeatherText(); // 获取实况天气状况的文字描述
weatherNow.getWindDir(); // 获取实况风向
weatherNow.getWindScale(); // 获取实况风力等级
weatherNow.getHumidity(); // 获取实况相对湿度百分比数值
weatherNow.getPrecip(); // 获取实况降水量,毫米

介绍一下Config gc
所有参数分别是:你的私钥、项目KID和SUB、你的API HOST、你的API KEY、要查询的地址

  • your-private-key:你的 Ed25519 私钥(JWT 认证时必填,API KEY 认证时传空字符串)
  • your-kid:项目 KID(JWT 认证时必填)
  • your-sub:项目 SUB(JWT 认证时必填)
  • your-api-host:你的专属 API 域名,必填
  • your-api-key:你的 API 密钥(API KEY 认证时必填,JWT 认证时传空字符串)
  • your-real-address:查询天气的城市名称,会自动 URL 编码

另外要注意的是:Config gc()中的gc可以自定义的,只要下面的WeatherNow weatherNow(gc)中的gc改掉就行。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <Arduino.h>
#include <WiFi.h>
#include "config.h"
#include "weatherNow.h"

#define WIFI_SSID "WiFi名"
#define WIFI_PASSWD "WiFi密码"

const char* PRIVATE_KEY_PEM = R"(
-----BEGIN PRIVATE KEY-----
(你的私钥)
-----END PRIVATE KEY-----
)";

const char* KID = "(你的项目KID)";
const char* SUB = "(你的项目SUB)";

// 创建全局 Config 对象(location 使用中文,http 请求时会自动 URL 编码)
Config gc(PRIVATE_KEY_PEM, KID, SUB,
"你的API HOST", "", "住址");
/*
如果是 API KEY 用户:
Config gc("", "", "", "你的API HOST",
"你的API KEY", "住址");
*/

// 将 Config 传递给 WeatherNow
WeatherNow weatherNow(gc);

void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("\n=== SETUP START ===");

WiFi.begin(WIFI_SSID, WIFI_PASSWD);
Serial.print("连接 WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" 成功");
Serial.print("IP: ");
Serial.println(WiFi.localIP());

if (weatherNow.get()) {
Serial.println("\n====== Weather Now Info ======");
Serial.print("Server Response: ");
Serial.println(weatherNow.getServerCode());
Serial.print("Temperature: ");
Serial.println(weatherNow.getTemp());
Serial.print("FeelsLike: ");
Serial.println(weatherNow.getFeelLike());
Serial.print("Weather Now: ");
Serial.println(weatherNow.getWeatherText());
Serial.print("WindDir: ");
Serial.println(weatherNow.getWindDir());
Serial.print("WindScale: ");
Serial.println(weatherNow.getWindScale());
Serial.print("Humidity: ");
Serial.println(weatherNow.getHumidity());
Serial.print("Precip: ");
Serial.println(weatherNow.getPrecip());
Serial.println("==============================");
} else {
Serial.println("Update Failed...");
Serial.print("Server Response: ");
Serial.println(weatherNow.getServerCode());
}
}

void loop() {
delay(10000);
}