Я не вижу серьезных проблем с вашим кодом, но кажется, что у вас есть проблемы с памятью или неисправна последовательная связь, поэтому я дам вам несколько советов, может быть, это может помочь:
Во-первых, в *Функция 1003 * гарантирует, что DynamicJsonDocument status(50);
достаточно велико для хранения ваших значений, особенно если вы добавляете большие числа.
Также в соответствии с документами :
Вы можете сохранить JsonDocument в стеке или в куче:
Использование StaticJsonDocument для хранения в стеке (рекомендуется для документов размером менее 1 КБ)
Использование DynamicJsonDocument для хранения вкуча (рекомендуется для документов размером более 1 КБ)
Поэтому я думаю, что использование StaticJsonDocument
в качестве глобальной переменной с JsonObject
- лучший выбортак как ваш объект Json не слишком большой и имеет статические ключи.
Во-вторых, для readSerial
я предлагаю вам использовать более простую функцию, такую как readString
вместо чтения байтов с задержкой.
SoftwareSerial ESP(0, 1);
StaticJsonDocument<100> status;
JsonObject object;
void setup()
{
ESP.begin(9600);
Serial.begin(9600);
object = status.to<JsonObject>();
}
void sendStatus(bool dish, byte gas, int knob, unsigned long alarmIn)
{
object["K"] = knob;
object["G"] = gas;
object["D"] = dish;
object["A"] = alarmIn;
char statusString[100];
serializeJson(status, statusString);
Serial.println(statusString);
ESP.println(statusString);
}
void readSerial()
{
String cmd;
while (ESP.available())
{
cmd = ESP.readString();
Serial.println(cmd);
}
}
void loop()
{
sendStatus(...);
readSerial();
delay(1000);
}