BLUF: I'm reasonably confident that this is a ASUS ZenWifi AX firmware problem. I'm just hoping someone has found a better solution than running an old version of the firmware.
DETAILS: I'm using a esp8266 to feed data to MQTT. My network routers are two ASUS ZenWiFI AX using AI mesh with a wireless backhaul. The esp8266s worked fine (very solid) until I upgraded the firmware to 3.0.0.4.388_24609-gca2277b (AKA: 388). The connection was solid under the previous firmware (386). Now, the device just returns a network status of 7 (which I believe is
WL_DISCONNECTED. The network only connects once in a very great while (sometimes hours or even a day) but it does occasionally connect. Unplugging the device doesn't seem to help either. I've read in one post that downgrading to an earlier firmware fixes the problem which I believe since everything worked before I upgraded. Also, letting the connection attempt run for ever doesn't help. Just lots of 7s.
Any suggestions? Maybe some extra debug code that would be helpful?
program output:
09:21:19.354 -> ets Jan 8 2013,rst cause:2, boot mode:(3,6)
09:21:19.354 ->
09:21:19.354 -> load 0x4010f000, len 3424, room 16
09:21:19.354 -> tail 0
09:21:19.400 -> chksum 0x2e
09:21:19.400 -> load 0x3fff20b8, len 40, room 8
09:21:19.400 -> tail 0
09:21:19.400 -> chksum 0x2b
09:21:19.400 -> csum 0x2b
09:21:19.400 -> v00044a60
09:21:19.400 -> ~ld
09:21:19.432 -> ���o�r��N|�l�d`b��|r�$�o��o�$`��r�l�l��
09:21:19.432 -> ESP8266_NODEMCU_ESP12E
09:21:19.432 -> Connecting to ******
09:21:24.533 -> WiFi Status:7
09:21:29.574 -> WiFi Status:7
09:21:34.576 -> WiFi Status:7
Very simplified code:
#include "DHTesp.h" // Click here to get the library: http://librarymanager/All#DHTesp
#include "LibPrintf.h" // https://github.com/embeddedartistry/arduino-printf
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include <ArduinoJson.h>
#include <math.h>
const String SENSOR_LOCATION="BonusRoom";
const String SENSOR_NUMBER="01";
WiFiClient wifiClient;
const char* ssid = "*****";
const char* password = "*****";
const char* mqtt_server = "********";
void setup_wifi() {
Serial.print("Connecting to ");
Serial.println(ssid);
int wifiWaitCount = 0;
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(5000);
Serial.print("WiFi Status:");
Serial.println(WiFi.status());
if (++wifiWaitCount > 12) {
ESP.restart();
}
}
IPAddress ip=WiFi.localIP();
String ipString=ip.toString();
Serial.print("localIP=");
Serial.println(ipString);
Serial.println("");
Serial.print("WiFi connected-----");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void setup()
{
Serial.begin(115200);
Serial.println();
String thisBoard=ARDUINO_BOARD;
Serial.println(thisBoard);
setup_wifi();
Serial.println("Waiting.");
delay(15000);
Serial.println("restarting.");
ESP.restart();
}
void loop()
{}