#include <WiFi.h>
#include <ArduinoJson.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* host = "1.15.242.194";
#define PIN_LED 8
// 初始化
void setup() {
Serial.begin(115200); // 设置串口输出,波特率为115200
while (!Serial); // 等待串口就绪
// We start by connecting to a WiFi network
Serial.println("");
Serial.println("");
Serial.print("Connecting to ");
Serial.println(ssid);
pinMode(PIN_LED, OUTPUT);
bool bFlag = true;
WiFi.begin(ssid, password); // 连接热点
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
digitalWrite(PIN_LED, bFlag ? HIGH : LOW);
bFlag = !bFlag;
}
digitalWrite(PIN_LED, LOW);
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP()); // 显示本机IP
}
// 循环
/*
void loop() {
Serial.print("connecting to ");
Serial.println(host);
// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) { // 连接到host服务器的80端口,失败则显示错误信息
Serial.println("connection failed");
return;
}
// We now create a URI for the request
// 访问网址 http://1.15.242.194/getweather 获取天气信息
String url = "/getweather";
Serial.print("Requesting URL: ");
Serial.println(url);
// This will send the request to the server
// 往服务器发请求
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
// 等待服务器回应
unsigned long timeout = millis();
while (client.available() == 0) { // 判断连接是否有数据到达
if (millis() - timeout > 5000) { // 如果超过5秒没有回应则显示错误信息并关闭连接
Serial.println(">>> Client Timeout !");
client.stop();
return;
}
}
// Read all the lines of the reply from server and print them to Serial
String line;
while(client.available()) { // 如果有数据到达
line = client.readStringUntil('\r'); // 读取一行数据直到回车符\r为止
Serial.print(line); // 显示读取到的数据
}
Serial.println("");
// json格式解码
DynamicJsonDocument jo(1024);
// Deserialize the JSON document
DeserializationError error = deserializeJson(jo, line);
Serial.println((int)jo["temp"]);
Serial.println((const char*)jo["weather"]);
Serial.println((const char*)jo["WD"]);
Serial.println((const char*)jo["WS"]);
Serial.println((const char*)jo["SD"]);
Serial.println((int)jo["aqi"]);
Serial.println((const char*)jo["area"]);
Serial.println((const char*)jo["date"]);
Serial.println((const char*)jo["weekday"]);
//Serial.println((uint32_t)jo["updatetime"]);
time_t updatetime = (time_t)jo["updatetime"];
Serial.println(asctime(localtime(&updatetime)));
client.stop();
Serial.println();
Serial.println("closing connection");
delay(5000000);
}
*/
#include <HTTPClient.h>
/*
void loop() {
char *url = "http://1.15.242.194/getweather";
DynamicJsonDocument jo(1024);
HTTPClient http;
http.begin(url);
int httpCode = http.GET(); // 用GET模式请求数据
if(httpCode == HTTP_CODE_OK) { // 请求成功
// 获取json数据
String line = http.getString(); // 获取返回的数据
Serial.println(line);
DeserializationError error = deserializeJson(jo, line); // json解释
if (!error)
{
Serial.println((int)jo["temp"]); // 温度
Serial.println((const char*)jo["weather"]); // 天气
Serial.println((const char*)jo["WD"]); // 风向
Serial.println((const char*)jo["WS"]); // 风力
Serial.println((const char*)jo["SD"]); // 湿度
Serial.println((int)jo["aqi"]); // 空气质量指数
Serial.println((const char*)jo["area"]); // 城市
Serial.println((const char*)jo["date"]); // 日期
Serial.println((const char*)jo["weekday"]); // 星期
//Serial.println((uint32_t)jo["updatetime"]); // 更新时间
time_t updatetime = (time_t)jo["updatetime"];
Serial.println(asctime(localtime(&updatetime)));
}
}
http.end();
delay(10000000);
}
*/
void loop() {
char *url = "http://www.weather.com.cn/data/cityinfo/101270101.html";
DynamicJsonDocument jo(1024);
HTTPClient http;
http.begin(url);
int httpCode = http.GET(); // 用GET模式请求数据
if(httpCode == HTTP_CODE_OK) { // 请求成功
// 获取json数据
String line = http.getString(); // 获取返回的数据
Serial.println(line);
DeserializationError error = deserializeJson(jo, line); // json解释
if (!error)
{
Serial.print("城市:");
Serial.println((const char*)jo["weatherinfo"]["city"]); // 城市
Serial.print("城市ID:");
Serial.println((const char*)jo["weatherinfo"]["cityid"]); // 城市ID
Serial.print("最低温度:");
Serial.println((const char*)jo["weatherinfo"]["temp1"]); // 最低温度
Serial.print("最高温度:");
Serial.println((const char*)jo["weatherinfo"]["temp2"]); // 最高温度
Serial.print("天气情况:");
Serial.println((const char*)jo["weatherinfo"]["weather"]); // 天气
Serial.print("更新时间:");
Serial.println((const char*)jo["weatherinfo"]["ptime"]); // 时间
}
}
http.end();
delay(10000000);
}