Chat freely about anything...

User avatar
By RayLivingston
#72116 This is really getting annoying.... I'm STILL having trouble getting 8266s to re-connect reliably. I have several 8266s operating in AP+STA mode. One 8266 (AP0) connects to my TP-Link router, two others (AP1 & AP2) connect to AP0. All 8266s ALWAYS connect immediately following a reset or power-up and work perfectly. AP0 ALWAYS connects to the TP-Link router. But, once all nodes are connected, if I reset the AP0 8266, AP1 and AP2 will NOT re-connect, unless and until I reset them! My initialization code sets both autoConnect and autoReconnect, but they WILL NOT re-connect to AP0 once AP0 is reset. But, reset AP1 and/or AP2, and they
re-connect instantly (typically under 1/2 second).

All SSIDs, Passwords, IP addresses, etc. are verified 100% correct, and EVERYTHING works perfectly unless I reset AP0 AFTER AP1 and AP2 have connected to it. WTH is going on here?? This should be simple...

Here is my init code. The only other code that even touches the 8266s is simply sending and receiving UDP packets, so the problem HAS to be here.

Code: Select allboolean TimerWiFiDeviceAPI::InitializeAP(TimerModes mode,
   char *apssid, char *appassword, IPAddress apip, IPAddress gatewayip, uint8_t apchannel,
   char *stassid, char *stapassword, IPAddress staip,
   uint16_t port)
{
#if (TARGET == TARGET_CONTROL_PANEL) || (TARGET == TARGET_TIMER_DEVICE_ONLY) || (TARGET == TARGET_TIMER_ALL_IN_ONE)
   boolean success = false;

   ConsolePort->printf("Initializing %s AP for Network %s on Channel %d...\n", DeviceName, TimerAPSSID, TimerAPChannel);

        WiFi.begin();

   while (!success)
   {
      // Set Mode
      if (!(success = WiFi.mode(WiFiMode_t::WIFI_AP_STA)))
         continue;

      // Configure STA
      if (!(success = WiFi.config(staip, gatewayip, Netmask, gatewayip)))
         continue;

      // Configure AP
      if (!(success = WiFi.softAPConfig(apip, GatewayIP, Netmask)))
         continue;

      // Start/Connect AP + STA
      if (!(success = WiFi.setAutoConnect(true)))
         continue;

      if (!(success = WiFi.begin(stassid, stapassword)))
         continue;

      if (!(success = WiFi.setAutoReconnect(true)))
         continue;

      if (!(success = WiFi.softAP(apssid, appassword, apchannel)))
         continue;
   }
#endif
}


Regards,
Ray L.
User avatar
By RayLivingston
#72141 A but more information:

If I hold AP0 in reset long enough for the other APs to see WiFi.status() == WL_DISCONNECTED, then they other APs will reconnect immediately when AP0 comes back up. But if I do a quick reset on AP0, AP1 and AP2 either never show WiFi.status() == WL_DISCONNECTED, or they change to WiFi.status() == WL_IDLE_STATUS and never re-connect once AP0 comes back online. I can end up in a situation where WiFi.status() == WL_CONNECTED, but there is NO data flow - kind of a zombie connection that doesn't really work. This seems like a bug in the bowels of the ESP8266 libraries....

Regards,
Ray L.