Сделать ArduinoJSON Array глобально доступным - PullRequest
0 голосов
/ 05 ноября 2019

Я уже давно обхожусь вокруг этой проблемы. Я открываю соединение через веб-сокет от моего ESP32 до моего NodeJS Backend. При получении сообщения содержимое анализируется с помощью ArduinoJSON.

Я сохраняю проанализированный контент в глобальных переменных, чтобы получить к ним доступ в цикле void (). Каждый раз, когда приходит новое сообщение, они перезаписываются. Вот так и должно быть.

Объявление переменных:

uint8_t  brightness = 10;
uint8_t lastMillis = 0;
int ArrayPointer = 0;
int interval = 2000;
bool immediate = true;
const size_t capacity = JSON_ARRAY_SIZE(32) + JSON_OBJECT_SIZE(1) + 290;

После установки void ()

void onMessageCallback(WebsocketsMessage message) {
    Serial.print("Got Message: ");
    DynamicJsonBuffer jsonBuffer(capacity);
    JsonObject & JSONResponse = jsonBuffer.parseObject(message);
    JsonArray & PixelArray = JSONResponse["frame"];
    brightness = JSONResponse["brightness"];
    ArrayPointer = 0;
    immediate = true;
}

void loop() {
  client.poll();


  if(millis() - lastMillis >= interval || immediate == true) {
    // Here I would like to access the Variable PixelArray
    lastMillis = millis();
  }
}

Конечно, я не могу получить доступ к PixelArray в цикле voidпотому что это другая сфера. Теперь мне нужен способ сделать PixelArray глобально доступным.

То, что я пытался:

  • Объявил глобальный JsonArray перед void Setup (), но это вызвало ошибку; (.
  • Назначение его другому (глобальному) массивуне работает должным образом, потому что размер PixelArray варьируется.

Надеюсь, кто-нибудь может мне помочь;)

Заранее спасибо;)

PS: В настоящее время я используюArduinoJson 5, но с обновлением проблем не возникнет.

1 Ответ

1 голос
/ 06 ноября 2019

Не делайте так.

Вы должны использовать ArduinoJson только для сериализации и десериализации объектов JSON, а не для сохранения состояния программы. Его документация делает это очень ясным.

Правильный способ сделать это (способ, которым пакет ArduinoJSON предназначен для использования) - это поддерживать внутреннюю структуру данных, сериализовать и десериализовать вашJSON возражает против него.

Таким образом, у вас будет глобальная переменная, которая будет вашим внутренним представлением PixelArray, а затем скопируйте в нее значения из JsonArray при получении сообщения JSON. Вы используете brightness правильно здесь;вы должны сделать то же самое с PixelArray.

...