参考这个内容 https://www.cnblogs.com/xingqi/p/13269929.html
1.请求网页内容,把这个链接粘贴到地址栏中会有如下信息:
http: //api.xlongwei.com/service/datetime/convert.json
2.请求步骤
3.把用getString 函数获得的内容进行解析
1.先把网页内容进行复制到https://arduinojson.org/v6/assistant/,生成arduino 代码;
2 .把获得的内容作为参数传入这个函数中
DeserializationError error = deserializeJson(doc,httpClient.getString());
1----如果下面的程序报错 可以试着这样
应该是8266自带库版本不一样,此处需要改一下用法:
WiFiClient client; //新添加
HTTPClient httpClient;
httpClient.begin(client,url);
即可。
2—还有我用arduino ide 1编译会一直重启,用arduino IDE 2.0就没问题
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>
#define URL "http://api.xlongwei.com/service/datetime/convert.json"
const char* ssid = "FAST_201"; //WiFi密码和账号
const char* password = "rz666888";
WiFiClient client; //新添加
void setup() {
Serial.begin(9600);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password); //开始连接wifi
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.print("WiFi Connected!");
httpClientRequest();
}
void loop() {
delay(1000);
}
// 发送HTTP请求并且将服务器响应通过串口输出
void httpClientRequest(){
//重点1 创建 HTTPClient 对象
HTTPClient httpClient;
//重点2 通过begin函数配置请求地址。此处也可以不使用端口号和PATH而单纯的
httpClient.begin(client,URL);
Serial.print("URL: "); Serial.println(URL);
//重点3 通过GET函数启动连接并发送HTTP请求
int httpCode = httpClient.GET();
Serial.print("Send GET request to URL: ");
Serial.println(URL);
//重点4. 如果服务器响应HTTP_CODE_OK(200)则从服务器获取响应体信息并通过串口输出
//如果服务器不响应HTTP_CODE_OK(200)则将服务器响应状态码通过串口输出
if (httpCode == HTTP_CODE_OK) {
// 使用getString函数获取服务器响应体内容
String responsePayload = httpClient.getString();
Serial.println("Server Response Payload: ");
Serial.println(responsePayload);
} else {
Serial.println("Server Respose Code:");
Serial.println(httpCode);
}
//json 解析
StaticJsonDocument<512> doc;
DeserializationError error = deserializeJson(doc,httpClient.getString());
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
const char* nongli = doc["nongli"]; // "农历2022年2月15日"
const char* chinese = doc["chinese"]; // "二零二二年二月十五"
const char* ganzhi = doc["ganzhi"]; // "壬寅"
const char* shengxiao = doc["shengxiao"]; // "虎"
int lunarYear = doc["lunarYear"]; // 2022
int lunarMonth = doc["lunarMonth"]; // 2
int lunarDay = doc["lunarDay"]; // 15
bool isLeapMonth = doc["isLeapMonth"]; // false
//串口输出
Serial.print(F("lunarYear"));
Serial.print(lunarYear);
Serial.println(F(" "));
Serial.print(F("lunarMonth: "));
Serial.print(lunarMonth);
Serial.println(F(" "));
Serial.print(F("lunarDay: "));
Serial.print(lunarDay);
Serial.println(F(" "));
//重点5. 关闭ESP8266与服务器连接
httpClient.end();
}
}
补充 :
想把输出
String location_name_String = results_0["location"]["name"].as<String>();
int now_temperature_int = results_0_now["temperature"].as<int>();
太极创客详情