很长一段时间以来,我一直在思考这个问题。我正在打开一个从我的 ESP32 到我的 NodeJS 后端的 websocket 连接。收到消息时,内容将使用 ArduinoJSON 进行解析。
我将解析后的内容存储在全局变量中,以便可以在我的 void loop() 中访问它们。每次有新消息进来时,它们都会被覆盖。应该是这样的。
变量声明:
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 Setup() 之后
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();
}
}
当然,我不能在 void 循环中访问 PixelArray,因为它的范围不同。现在我需要一种使 PixelArray 全局可访问的方法。
我尝试了什么:
- 在 void Setup() 之前声明了一个全局 JsonArray 但这引发了错误 ;(。
- 将其分配给另一个(全局)数组无法正常工作,因为 PixelArray 的大小会有所不同。
希望有人可以帮助我;)
提前致谢 ;)
PS:目前我使用的是 ArduinoJson 5,但升级没问题。