Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ESP8266无法通过mqtt主题发布更长的数据_Mqtt_Publish Subscribe_Arduino Ide_Arduino Esp8266_Arduinojson - Fatal编程技术网

ESP8266无法通过mqtt主题发布更长的数据

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())+

我使用esp8266和Arduino IDE进行编程。当我试图通过wifi网络通过esp8266的MQTT主题发布JSON数据时,它适用于以下代码

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所示。