Проблема WebSocket с отправкой данных на WebServer на ESP8266

У меня проблемы с загрузкой значений на 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>;

webSocket.broadcastTXT() — это серверная функциональность, а не клиентская. используйте webSocket.sendTXT(). Кстати, вам нужно StaticJsonDocument<256> doc; для размера вашей полезной нагрузки.
hcheung 21.04.2023 07:39

У меня есть WebSocketServer на ESP8266, когда я дал sendTXT(), он выдал мне ошибки в консоли, когда у меня есть broadcastTXT(), все работает нормально, но когда я хочу увеличить количество отправленных данных, ошибки отображаются на веб-сервере (на странице)

krakosky 21.04.2023 10:07

Укажите минимальный воспроизводимый код и точное сообщение об ошибке...

hcheung 22.04.2023 11:09

Я отредактировал сообщение. Сообщение об ошибке отсутствует, но данные, отправленные на веб-сервер, выглядят не так, как должны.

krakosky 24.04.2023 14:43

Разве это не проблема, что я отправляю слишком много данных одновременно?

krakosky 24.04.2023 15:35
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я изменился

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];

и он начал работать. Было слишком много объектов, если я хотел отправить все стандарты?

Другие вопросы по теме