I have an array of data from MQTT to Nodemcu. I deserialize that data to turn on/off the led indicator in Blynk. But the process is too slow. How can I make it fast?
void callback(char* topic, byte* payload, unsigned int length) {
Serial.println("Message arrived");
Serial.println(mqtt_topic);
Serial.print("Message arrived in topic: ");
Serial.println(topic);
Serial.print("Message: ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
String payloadString = "";
for (int i = 0; i < length; i++) {
payloadString += (char)payload[i];
}
Serial.println(payloadString);
DynamicJsonDocument doc(1024);
doc.clear();
DeserializationError error = deserializeJson(doc, payloadString);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
String id_standby;
String id_run;
String id_stop;
String id_rgb1;
String id_motor;
String id_rgb2;
String id_aplus;
String id_bplus;
bool v_standby;
bool v_run;
bool v_stop;
bool v_rgb1;
bool v_motor;
bool v_rgb2;
bool v_aplus;
bool v_bplus;
for (int i = 0; i < 5; i++) {
String id = doc["values"][i]["id"];
if (id == "Container Station.PLC.Stand_By") {
String id_s = doc["values"][i]["id"];
id_standby = id_s;
bool v_s = doc["values"][i]["v"];
v_standby = v_s;
Serial.println("id standby :" + String(id_standby));
Serial.println("value standby :" + String(v_standby));
if (v_standby == true) {
// Set pin virtual V8 menjadi HIGH
Blynk.virtualWrite(V8, HIGH);
}
if (v_standby == false) {
// Set pin virtual V8 menjadi HIGH
Blynk.virtualWrite(V8, LOW);
}
}
if (id == "Container Station.PLC.Run") {
String id_r = doc["values"][i]["id"];
id_run = id_r;
bool v_r = doc["values"][i]["v"];
v_run = v_r;
Serial.println("id run :" + String(id_run));
Serial.println("value run :" + String(v_run));
if (v_run == true) {
Blynk.virtualWrite (V7, HIGH);
}
if (v_run == false) {
Blynk.virtualWrite(V7, LOW);
}
}
if (id == "Container Station.PLC.RED_LED") {
String id_st = doc["values"][i]["id"];
id_stop = id_st;
bool v_st = doc["values"][i]["v"];
v_stop = v_st;
Serial.println("id stop :" + String(id_stop));
Serial.println("value stop :" + String(v_stop));
if (v_stop == true) {
// Set pin virtual V1 menjadi HIGH
Blynk.virtualWrite(V11, HIGH);
}
if (v_stop == false) {
// Set pin virtual V1 menjadi HIGH
Blynk.virtualWrite(V11, LOW);
}
}
if (id == "Container Station.PLC.RGB1") {
String id_a = doc["values"][i]["id"];
id_rgb1 = id_a;
bool v_a = doc["values"][i]["v"];
v_rgb1 = v_a;
Serial.println("id auto :" + String(id_rgb1));
Serial.println("value auto :" + String(v_rgb1));
if (v_rgb1 == true) {
// Set pin virtual V4 menjadi HIGH
Blynk.virtualWrite(V14, HIGH);
}
if (v_rgb1 == false) {
// Set pin virtual V4 menjadi HIGH
Blynk.virtualWrite(V14, LOW);
}
}
if (id == "Container Station.PLC.Motor") {
String id_m = doc["values"][i]["id"];
id_motor = id_m;
bool v_m = doc["values"][i]["v"];
v_motor = v_m;
Serial.println("id motor :" + String(id_motor));
Serial.println("value motor :" + String(v_motor));
if (v_motor == true) {
// Set pin virtual V4 menjadi HIGH
Blynk.virtualWrite(V4, HIGH);
}
if (v_motor == false) {
// Set pin virtual V4 menjadi HIGH
Blynk.virtualWrite(V4, LOW);
}
}
if (id == "Container Station.PLC.RGB2") {
String id_r = doc["values"][i]["id"];
id_rgb2 = id_r;
bool v_r = doc["values"][i]["v"];
v_rgb2 = v_r;
Serial.println("id motor :" + String(id_rgb2));
Serial.println("value motor :" + String(v_rgb2));
if (v_rgb2 == true) {
// Set pin virtual V4 menjadi HIGH
Blynk.virtualWrite(V15, HIGH);
}
if (v_rgb2 == false) {
// Set pin virtual V4 menjadi HIGH
Blynk.virtualWrite(V15, LOW);
}
}
if (id == "Container Station.PLC.A_Plus") {
String id_ap = doc["values"][i]["id"];
id_aplus = id_ap;
bool v_ap = doc["values"][i]["v"];
v_aplus = v_ap;
Serial.println("id motor :" + String(id_aplus));
Serial.println("value motor :" + String(v_aplus));
if (v_aplus == true) {
// Set pin virtual V4 menjadi HIGH
Blynk.virtualWrite(V5, HIGH);
}
if (v_aplus == false) {
// Set pin virtual V4 menjadi HIGH
Blynk.virtualWrite(V5, LOW);
}
}
if (id == "Container Station.PLC.B_Plus") {
String id_bp = doc["values"][i]["id"];
id_bplus = id_bp;
bool v_bp = doc["values"][i]["v"];
v_bplus = v_bp;
Serial.println("id motor :" + String(id_bplus));
Serial.println("value motor :" + String(v_bplus));
if (v_bplus == true) {
// Set pin virtual V4 menjadi HIGH
Blynk.virtualWrite(V6, HIGH);
}
if (v_bplus == false) {
// Set pin virtual V4 menjadi HIGH
Blynk.virtualWrite(V6, LOW);
}
}
}
}
I have tried to add the millis to the program but ot won't work, and i tried to add jsonbuffer but it's not working too. And i hope that the deserialize process will be faster