NodeMCU (Arduino IDE) «DynamicJsonBuffer» не был объявлен в этой области
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ArduinoJson.h>
#include <ESP8266HTTPClient.h>
#define USE_SERIAL Serial
ESP8266WiFiMulti WiFiMulti;
String url = "http://192.168.31.170/api/mode/qwertyui";
void setup() {
USE_SERIAL.begin(9600);
USE_SERIAL.println();
USE_SERIAL.println();
USE_SERIAL.println();
for (uint8_t t = 4; t > 0; t--) {
USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
USE_SERIAL.flush();
delay(1000);
}
WiFi.mode(WIFI_STA);
WiFiMulti.addAP("Robotics Incubator", "XXXXXXX");
}
void loop() {
// ждем подключения к WiFi
if ((WiFiMulti.run() == WL_CONNECTED)) {
HTTPClient http;
http.begin(url); // HTTP
int httpCode = http.GET();
if (httpCode == 200) {
// Парсинг
const size_t bufferSize = JSON_OBJECT_SIZE(1) + 50;
DynamicJsonBuffer jsonBuffer(bufferSize); // Это не объявленная ошибка.
JsonObject& root = jsonBuffer.parseObject(http.getString());
// Параметры
int Mode = root["mode"]; // 1
Serial.print("Name:");
Serial.println(Mode);
}
http.end();
}
if (Serial.available()) {
url = Serial.readString();
}
delay(100);
}
Как решить эту проблему? Я следовал этому руководству - ESP8266: Анализ JSON
@Adnan Sabbir, 👍2
2 ответа
Лучший ответ:
Эта ошибка вызвана использованием версии 6.xx библиотеки ArduinoJson с кодом, написанным для версии библиотеки до 6.xx.
У вас есть два варианта решения проблемы:
А. Обновите библиотеку до версии, совместимой с вашим кодом
На данный момент это, вероятно, лучший вариант, потому что версия ArduinoJson 6.xx все еще находится в стадии бета-тестирования, поэтому имеет смысл подождать, пока новый API не будет стабилизирован, прежде чем портировать свой код. Это даже рекомендуют разработчики ArduinoJson:
https://arduinojson.org/v5/faq/ ошибка-jsonbuffer-не была объявлена-в-этой-области/
- Скетч > Включить библиотеку > Управление библиотеками...
- Дождитесь завершения загрузки.
- В поле "Отфильтруйте результаты поиска..." введите "arduinojson".
- Нажмите "ArduinoJson от Бенуа Бланшона".
- В раскрывающемся меню "Выбрать версию" выберите "Версия 5.13.2".
- Нажмите "Обновить". Дождитесь завершения обновления.
- Нажмите "Закрыть".
Теперь ваш код будет скомпилирован. Если у вас включен параметр Файл > Настройки > Проверять наличие обновлений при запуске, вы по-прежнему будете получать уведомление об обновляемой библиотеке для библиотеки ArduinoJson, но вам нужно воздержаться от обновления до версии 6.xx или ошибки вернется.
Б. Обновите свой код, чтобы он был совместим с версией 6.xx библиотеки ArduinoJson
В этом случае вам нужно изменить код десериализации, чтобы использовать новый DynamicJsonDocument
вместо старого DynamicJsonBuffer
:
if (httpCode == 200) {
// Парсинг
const size_t bufferSize = JSON_OBJECT_SIZE(1) + 50;
DynamicJsonDocument jsonDocument(bufferSize);
DeserializationError error = deserializeJson(jsonDocument, http.getString());
if (error) {
Serial.println("There was an error while deserializing");
}
else {
JsonObject root = jsonDocument.as<JsonObject>();
// Параметры
int Mode = root["mode"]; // 1
Serial.print("Name:");
Serial.println(Mode);
}
}
Подробнее об этом можно узнать здесь:
https://arduinojson.org/v6/doc/upgrade/
Этот ответ необходимо обновить для всех, кто посещает этот сайт. Версия 6.xx больше не находится в стадии бета-тестирования. Просто обновитесь до последней версии. На момент написания этого ответа идентификатор версии — 6.15.2. Обновление до этого устранит ошибку.
- Как определить размер Flash?
- В ESP-12E NodeMCU, какой выход PIN A0?
- Преобразование byte* в int в Arduino
- Каково использование зарезервированных контактов и контактов SDD2, SDD3 NodeMCU?
- NodeMCU поддерживает внедрение ключей?
- Чтение файла из SPIFFS в nodemcu с использованием ArduinoJson
- Датчик движения PIR (HC-SR501) ложные результаты с NodeMCU
- Как получить текущую дату