文章作者:里海
来源网站:ESP32专栏
????使用
HTTPClient 库
发送 HTTP 请求来获取实时天气数据,并使用ArduinoJSON 库
解析 JSON 数据。
使用聚合数据的天气api。
#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
// LED灯的引脚
#define LED 2
// WiFi的ID和密码
String ssid = "K40";
String password = "12345678";
String url = "http://apis.juhe.cn/simpleWeather/query";
String city = "青岛";
String key = "你的key"; // 聚合数据 https://www.juhe.cn/
void setup()
{
Serial.begin(9600);
pinMode(LED, OUTPUT);
// 断开WiFi连接
WiFi.disconnect(true);
// 尝试连接到指定的WiFi网络
WiFi.begin(ssid.c_str(), password.c_str());
// 循环检查WiFi是否已经成功连接
while (WiFi.status() != WL_CONNECTED)
{
// 如果未连接成功,则控制LED灯持续慢速闪烁
digitalWrite(LED, HIGH);
delay(500);
digitalWrite(LED, LOW);
delay(500);
}
// WiFi成功连接后,控制LED灯快速闪烁10次
for (int i = 0; i < 10; i++)
{
digitalWrite(LED, HIGH);
delay(50);
digitalWrite(LED, LOW);
delay(50);
}
// LED灯亮3秒钟后熄灭
digitalWrite(LED, HIGH);
delay(3000);
digitalWrite(LED, LOW);
// 创建 HTTPClient 对象
HTTPClient http;
// 发送GET请求
url = url + "?city=" + city + "&key=" + key;
http.begin(url.c_str());
int httpCode = http.GET();
// 获取响应状态码
Serial.printf("HTTP 状态码: %d", httpCode);
// 获取响应正文
String response = http.getString();
Serial.println("响应数据");
Serial.println(response);
http.end();
// 创建 DynamicJsonDocument 对象
DynamicJsonDocument doc(1024);
// 解析 JSON 数据
deserializeJson(doc, response);
// 从解析后的 JSON 文档中获取值
// 温度
int temperature = doc["result"]["realtime"]["temperature"].as<int>();
// 湿度
unsigned int humidity = doc["result"]["realtime"]["humidity"].as<unsigned int>();
// 天气
String info = doc["result"]["realtime"]["info"].as<String>();
// 风向
String direct = doc["result"]["realtime"]["direct"].as<String>();
// 风力
String power = doc["result"]["realtime"]["power"].as<String>();
// 空气指数
unsigned int aqi = doc["result"]["realtime"]["aqi"].as<unsigned int>();
Serial.printf("城市: %s\n", city);
Serial.printf("天气: %s\n", info);
Serial.printf("温度: %d\n", temperature);
Serial.printf("湿度: %d\n", humidity);
Serial.printf("风向: %s 风力%s\n", direct,power);
Serial.printf("空气指数: %d\n", aqi);
}
void loop()
{
}
响应数据:
{
"reason":"查询成功!",
"result":{
"city":"青岛",
"realtime":{
"temperature":"-7",
"humidity":"61",
"info":"多云",
"wid":"01",
"direct":"西北风",
"power":"5级",
"aqi":"22"
},
"future":[
{
"date":"2024-01-22",
"temperature":"-7\/-5℃",
"weather":"阵雪转多云",
"wid":{
"day":"13",
"night":"01"
},
"direct":"北风转西北风"
},
{
"date":"2024-01-23",
"temperature":"-8\/-2℃",
"weather":"多云转晴",
"wid":{
"day":"01",
"night":"00"
},
"direct":"西北风"
},
{
"date":"2024-01-24",
"temperature":"-4\/2℃",
"weather":"晴",
"wid":{
"day":"00",
"night":"00"
},
"direct":"西北风转北风"
},
{
"date":"2024-01-25",
"temperature":"-3\/3℃",
"weather":"晴",
"wid":{
"day":"00",
"night":"00"
},
"direct":"西南风"
},
{
"date":"2024-01-26",
"temperature":"-2\/6℃",
"weather":"晴",
"wid":{
"day":"00",
"night":"00"
},
"direct":"西南风"
}
]
},
"error_code":0
}
ESP32是近几年最受欢迎和最实用的模块之一。除了Wi-Fi模块,该模块还包含蓝牙4.0模块。双核CPU工作频率为80至240 MHz,包含两个Wi-Fi和蓝牙模块以及各种输入和输出引脚, ESP32是物联网项目的理想选择。
虽然ESP32的引脚数比常用的处理器少,但在引脚上复用多个功能时不会遇到任何问题。
警告:ESP32引脚的电压电平为3.3伏。如果要将ESP32连接到其他工作电压为5伏的设备,则应使用电平转换器转换电压电平。
ESP32芯片有5种模式: