Если я основываюсь на вашем json выводе и вычисляю размер буфера с помощью Arduino Json Assistant , я получаю это:
const size_t capacity = 5*JSON_ARRAY_SIZE(1) + JSON_ARRAY_SIZE(5) + 10*JSON_OBJECT_SIZE(1) + 6*JSON_OBJECT_SIZE(2) + 7*JSON_OBJECT_SIZE(3) + JSON_OBJECT_SIZE(4) + JSON_OBJECT_SIZE(7) + JSON_OBJECT_SIZE(15) + 2270;
Заметил + 2270
в конце ? Ваш синтаксический анализ json не удался, потому что у вас не хватает 2270 байт в bufferSize (т. Е. Ваш размер bufferSize слишком мал).
Обновление
Я не пытался отлаживать Ваш код, но у меня под рукой есть код моего веб-клиента, поэтому я просто запускаю, и он работает для меня
Мой код основан на HTTPClient, который является частью ESP32 Arduino Core, о чем вы можете прочитать в ESP-Arduino github . Он основан на Arduino WifiClient, который вы использовали, но с гораздо более простым и удобным API, особенно для получения полезной нагрузки ответа. Я бы порекомендовал вам взглянуть.
Я добавляю Arduino Json в свой код, чтобы увидеть, есть ли какие-либо проблемы с синтаксическим анализом полученного json, но мины основаны на синтаксисе v6, вы можете преобразовать его к синтаксису v5, если вы все еще чувствуете, что вам легче использовать v5. Кстати, документ json содержит Unicode, я должен добавить #define ARDUINOJSON_DECODE_UNICODE 1
в верхней части программы в oder, чтобы он работал, в противном случае я получу deserialization error: NotSupported
.
#define ARDUINOJSON_DECODE_UNICODE 1
#include <ArduinoJson.h>
#include <WiFi.h>
#include <HTTPClient.h>
HTTPClient http;
const char* ssid = "your_SSID";
const char* password = "your_password";
const char* url = "https://spreadsheets.google.com/feeds/cells/1RICYSv0y0wEEu-PhcCL45jZmh7DlFSAsbW8Bie0inbA/1/public/values?alt=json&range=A1";
void setup() {
Serial.begin(115200);
while (!Serial) {}
Serial.print("Connecting to wifi: "); Serial.print(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(200);
Serial.print(".");
}
Serial.println();
Serial.print("IP address: "); Serial.println(WiFi.localIP());
http.begin(url);
int httpCode = http.GET(); //send GET request
if (httpCode != 200) {
Serial.print("Error on HTTP request: ");
Serial.println(httpCode);
} else {
String payload = http.getString();
Serial.println(payload);
// the following is based on ArduinoJson v6 API
StaticJsonDocument<4000> doc;
DeserializationError err = deserializeJson(doc, payload);
if (err) {
Serial.print("deserialization error ");
Serial.println(err.c_str());
}
JsonObject feed = doc["feed"];
const char* clientData = feed["entry"][0]["content"]["$t"];
Serial.println(clientData);
}
http.end(); //Free the resources
}
void loop() {
}