ESP8266无法通过mqtt主题发布更长的数据
我使用esp8266和Arduino IDE进行编程。当我试图通过wifi网络通过esp8266的MQTT主题发布JSON数据时,它适用于以下代码ESP8266无法通过mqtt主题发布更长的数据,mqtt,publish-subscribe,arduino-ide,arduino-esp8266,arduinojson,Mqtt,Publish Subscribe,Arduino Ide,Arduino Esp8266,Arduinojson,我使用esp8266和Arduino IDE进行编程。当我试图通过wifi网络通过esp8266的MQTT主题发布JSON数据时,它适用于以下代码 void reportToServer(){ String payload = "{\"DeviceID\":"+String(devices[0].getDeviceID())+"," "\"DeviceName\":"+"\""+String(devices[0].getDeviceName())+
void reportToServer(){
String payload = "{\"DeviceID\":"+String(devices[0].getDeviceID())+","
"\"DeviceName\":"+"\""+String(devices[0].getDeviceName())+"\""+","
"\"Counter\":"+String(devices[0].getSwitchOnTime())+","
"\"Status\":"+String(devices[0].getStatus())+"};
Serial.println(payload.c_str());
client.publish("esp/test",payload.c_str());
Serial.println("Reported to server");
}
但当我尝试发布如下代码时,MQTT.fxGUI客户端不会接收数据-
void reportToServer(){
String payload = String payload = "{{\"DeviceID\":"+String(devices[0].getDeviceID())+","
"\"DeviceName\":"+"\""+String(devices[0].getDeviceName())+"\""+","
"\"Counter\":"+String(devices[0].getSwitchOnTime())+","
"\"Status\":"+String(devices[0].getStatus())+"},"+
"{\"DeviceID\":"+String(devices[1].getDeviceID())+","
"\"DeviceName\":"+"\""+String(devices[1].getDeviceName())+"\""+","
"\"Counter\":"+String(devices[1].getSwitchOnTime())+","
"\"Status\":"+String(devices[1].getStatus())+"}}";
+"{\"DeviceID\":"+String(devices[2].getDeviceID())+","
"\"DeviceName\":"+"\""+String(devices[2].getDeviceName())+"\""+","
"\"Counter\":"+String(devices[2].getSwitchOnTime())+","
"\"Status\":"+String(devices[2].getStatus())+"},"
+"{\"DeviceID\":"+String(devices[3].getDeviceID())+","
"\"DeviceName\":"+"\""+String(devices[3].getDeviceName())+"\""+","
"\"Counter\":"+String(devices[3].getSwitchOnTime())+","
"\"Status\":"+String(devices[3].getStatus())+"},"
+"{\"DeviceID\":"+String(devices[4].getDeviceID())+","
"\"DeviceName\":"+"\""+String(devices[4].getDeviceName())+"\""+","
"\"Counter\":"+String(devices[4].getSwitchOnTime())+","
"\"Status\":"+String(devices[4].getStatus())+"},"
+"{\"DeviceID\":"+String(devices[5].getDeviceID())+","
"\"DeviceName\":"+"\""+String(devices[5].getDeviceName())+"\""+","
"\"Counter\":"+String(devices[5].getSwitchOnTime())+","
"\"Status\":"+String(devices[5].getStatus())+"}}";
Serial.println(payload.c_str());
client.publish("esp/test",payload.c_str());
Serial.println("Reported to server");
}
正如评论中所讨论的那样
有效载荷太大了。解决方案是使用publish_p方法。第二个有效负载有多少字节,pubsub客户端头中有限制。有效负载的限制是什么?谢谢,最大大小是128字节。还有一种方法可以使用publish_p方法发布较长的消息,如库的README.md所示。