Я уже давно обхожусь вокруг этой проблемы. Я открываю соединение через веб-сокет от моего 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, но с обновлением проблем не возникнет.