У меня проблемы с загрузкой значений на WebServer. В целом все работает правильно, пока я не добавлю больше данных, которые хочу отправить. Когда я пытаюсь загрузить больше данных, появляются неверные данные, например UNDEFINED, или отображаются только 0, 0, 0. В консоли все выглядит хорошо, так что конвертация работает хорошо.
{"RGB_Rvalue": 101, "RGB_Gvalue": 166, "RGB_Bvalue": 141, "CMYK_Cvalue": 39, "CMYK_Mvalue": 0, "CMYK_Yvalue": 15, "CMYK_Kvalue": 35, "HSV_Hvalue": 157," HSV_Svalue": 39, "HSV_Vvalue": 65, "HSL_Hvalue": 157, "HSL_Svalue": 27, "HSL_Lvalue": 52, "XYZ_Xvalue": 24, "XYZ_Yvalue": 32, "XYZ_Zvalue": 30}
void conversion_to_webpage()
{
unsigned long now = millis();
if ((unsigned long)(now - previousMillis) > interval)
{
String jsonString = "";
StaticJsonDocument<200> doc;
JsonObject object = doc.to<JsonObject>();
//RGB
object["RGB_Rvalue"] = color_RGB[0];
object["RGB_Gvalue"] = color_RGB[1];
object["RGB_Bvalue"] = color_RGB[2];
//CMYK
object["CMYK_Cvalue"] = color_CMYK[0];
object["CMYK_Mvalue"] = color_CMYK[1];
object["CMYK_Yvalue"] = color_CMYK[2];
object["CMYK_Kvalue"] = color_CMYK[3];
serializeJson(doc, jsonString);
Serial.println(jsonString);
webSocket.broadcastTXT(jsonString);
previousMillis = now;
}
}
этот код работает хорошо 1 , но когда я хочу добавить HSL или HSV таким же образом, он перестает работать. Выглядит это так: 2. Цвета не отображаются в поле, XYZ показывает только 0,0,0. HSL показывает x, 0, 0, а иногда показывает НЕОПРЕДЕЛЕННОЕ значение. Преобразование в другие стандарты в порядке. Ниже код, который я использую для этого.
void conversion_to_webpage()
{
unsigned long now = millis();
if ((unsigned long)(now - previousMillis) > interval)
{
String jsonString = "";
StaticJsonDocument<256> doc;
JsonObject object = doc.to<JsonObject>();
//RGB
object["RGB_Rvalue"] = color_RGB[0];
object["RGB_Gvalue"] = color_RGB[1];
object["RGB_Bvalue"] = color_RGB[2];
//XYZ
object["XYZ_Xvalue"] = round(color_XYZ[0]);
object["XYZ_Yvalue"] = round(color_XYZ[1]);
object["XYZ_Zvalue"] = round(color_XYZ[2]);
//CMYK
object["CMYK_Cvalue"] = color_CMYK[0];
object["CMYK_Mvalue"] = color_CMYK[1];
object["CMYK_Yvalue"] = color_CMYK[2];
object["CMYK_Kvalue"] = color_CMYK[3];
//HSV
object["HSV_Hvalue"] = round(color_HSV[0]);
object["HSV_Svalue"] = round(color_HSV[1]);
object["HSV_Vvalue"] = round(color_HSV[2]);
//HSL
object["HSL_Hvalue"] = round(color_HSL[0]);
object["HSL_Svalue"] = round(color_HSL[1]);
object["HSL_Lvalue"] = round(color_HSL[2]);
serializeJson(doc, jsonString);
Serial.println(jsonString);
webSocket.broadcastTXT(jsonString);
previousMillis = now;
}
}
Я попытался расширить память из документа StaticJsonDocument<200>; в документ StaticJsonDocument<400>;
У меня есть WebSocketServer на ESP8266, когда я дал sendTXT(), он выдал мне ошибки в консоли, когда у меня есть broadcastTXT(), все работает нормально, но когда я хочу увеличить количество отправленных данных, ошибки отображаются на веб-сервере (на странице)
Укажите минимальный воспроизводимый код и точное сообщение об ошибке...
Я отредактировал сообщение. Сообщение об ошибке отсутствует, но данные, отправленные на веб-сервер, выглядят не так, как должны.
Разве это не проблема, что я отправляю слишком много данных одновременно?
Я изменился
object["RGB_Rvalue"] = color_RGB[0];
object["RGB_Gvalue"] = color_RGB[1];
object["RGB_Bvalue"] = color_RGB[2];
к
object["RGB_value"] = String(color_RGB[0]) + ", " + color_RGB[1] + ", " + color_RGB[2];
и он начал работать. Было слишком много объектов, если я хотел отправить все стандарты?
webSocket.broadcastTXT()
— это серверная функциональность, а не клиентская. используйтеwebSocket.sendTXT()
. Кстати, вам нужноStaticJsonDocument<256> doc;
для размера вашей полезной нагрузки.