带有Arduino ESP8266的MQTT,在多次发布后无法发布到代理

带有Arduino ESP8266的MQTT,在多次发布后无法发布到代理,arduino,mqtt,esp8266,arduino-esp8266,sleep-mode,Arduino,Mqtt,Esp8266,Arduino Esp8266,Sleep Mode,我正在尝试用Arduino和ESP8266实现MQTT。安装程序应该发布到代理,进入睡眠状态一段时间,然后重置自身,以便循环继续 草图: #include <WiFiEsp.h> #include <WiFiEspClient.h> #include <WiFiEspUdp.h> #include "SoftwareSerial.h" #include <PubSubClient.h> #include "LowPower.h" IPAddres

我正在尝试用Arduino和ESP8266实现MQTT。安装程序应该发布到代理,进入睡眠状态一段时间,然后重置自身,以便循环继续

草图:

#include <WiFiEsp.h>
#include <WiFiEspClient.h>
#include <WiFiEspUdp.h>
#include "SoftwareSerial.h"
#include <PubSubClient.h>
#include "LowPower.h"

IPAddress server(10, 8, 17, 14);
char ssid[] = "myssid";       
char pass[] = "pass";           
int status = WL_IDLE_STATUS;   

WiFiEspClient espClient;
PubSubClient client(espClient);
SoftwareSerial soft(2,3); 

void setup() {
  Serial.begin(9600);
  soft.begin(9600);
  WiFi.init(&soft);
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    while (true);
  }
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to WPA SSID: ");
    Serial.println(ssid);
    status = WiFi.begin(ssid, pass);
  }
  Serial.println("You're connected to the network");
  client.setServer(server, 1883);
}

void(* resetFunc)(void)=0;

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  Serial.println("going to sleep");
  delay(500);
  for(int i=0;i<8;i++)
    LowPower.powerDown(SLEEP_8S,ADC_OFF,BOD_OFF);
  delay(500);
  Serial.println("resetting");
  delay(500);
  resetFunc();
}

void reconnect() {
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    if (client.connect("arduinoClient")) {
      Serial.println("connected");
      client.publish("IITMandi","testing mqtt powersaver...");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      delay(5000);
    }
  }
}
在几次发布之后,我看到的最高连续发布量约为20次,它无法发布更多。Nano不会变热,但ESP会变热

谁能告诉我原因是什么


我已经和ESP8266斗争了大约一周了,所以我感觉我知道你们的问题是什么。你的ESP8266可能是油炸的,对你来说没有错。故障原因可能是内部二极管出现故障,导致设备出现电流问题。根据制造商的不同,二极管额定值不正确,使用一小段时间后会短路。如果是更即时的故障,则可能是您的模块无法处理来自arduino的5v DIO。祝你好运。它可能非常挑剔。

也许您的mqtt服务器没有很快放弃旧连接,您可以跟踪库代码中失败的rc=-2行,并找出这是什么错误返回代码吗?因为错误代码表明连接到代理时出错,您还应该查看代理的日志。我也怀疑像@dandavisto这样的扩展:如果你重置的速度比你的生命周期快,你会建立起连接。在以下情况下发送mqtt短寿命:connecting@MaximilianGerhardt,rc=-2表示无法建立到代理的连接。