Постарайтесь избавиться от строк, они сломают вашу кучу и вызовут сбои. Определите глобальные фиксированные charBuffers (достаточно большие, чтобы принять самое большое сообщение) и помощник (tmp chars) для преобразования и других вещей. Не определяйте const-символы в l oop, делайте это перед установкой, чтобы компилятор помещал их в стек и не использует кучу во время выполнения. Я изменил ваш код по этому принципу и добавил дополнительную задержку между сообщениями:
const char topic[13] = "prototype001"; // goes to the stack
char jsonObjChar [256] = '\0'; // set it large enough goes to the stack not heap!
char numBuffer [16] = '\0'; //tmpBuffer for conversion of ints to char
void loop(){
if (!client.connected()) {
reconnect();
}
strcpy (jsonObj, "{"); // Initialize/clear char by using strcpy
strcat(jsonObj, "\"deviceId\":\"123456\""); // strcat append
strcat(jsonObj,",");
strcat(jsonObj,"\"messageType\":\"ambientSensorReading\"");
strcat(jsonObj,",");
strcat(jsonObj,"\"temperature\":\"");
// conversion only needed if temperature is an int, if its char use strcat(jsonObj,readDHTTemperature());
itoa (readDHTTemperature(), numBuffer, 10); // Converts an int to a char array
strcat(jsonObj,numbuffer);
strcat(jsonObj,"\"");
strcat(jsonObj,",");
strcat(jsonObj,"\"humidity\":\"");
// if already char use strcat(jsonObj,readDHTHumidity());
itoa (readDHTHumidity(), numBuffer, 10);
strcat(jsonObj,numbuffer);
strcat(jsonObj,"\"");
strcat(jsonObj,",");
strcat(jsonObj,"\"light\":\"");
// if char strcat(jsonObj,readLDRLight());
itoa (readLDRLight(),numBuffer. 10);
strcat(jsonObj,numbuffer);
strcat(jsonObj,"\"}");
delay(1000);
Serial.println("PREPARED");
Serial.println(jsonObjChar);
client.publish(topic, "inside loop");
delay(1000); // for test onl<
client.publish(topic, jsonObjChar);
// ... and resubscribe
client.subscribe("prototype001");
delay(5000);
client.loop();
}
Если это работает - хорошо. Если нет, то следующим шагом отладки будет посмотреть, что получено на сервере.