ESP8266 WiFi Not Connecting to Internet Without Static IP I am seeing some very strange behavior with my ESP8266. When I connect it to the WiFi for the first couple of times I am not seeing any issues and the ESP8266 connects just fine.
But after an arbitrary amount of times (like when I restart the unit) it tries to connect for AGES (like multiple minutes). Eventually it says &quot;Connected&quot; but the IP is completely wrong and it is not connected to the internet (GET request fails).
Here are the odd things:

If I assign a static IP then it ALWAYS works and connects within seconds
If I factory reset my router then it works again for a few times
I have not seen this with any other device (like laptops or cellphones)

It is almost as if the DHCP is failing to assign an IP and then returns some random default.
#include &lt;ESP8266WiFi.h&gt;
#include &lt;ESP8266HTTPClient.h&gt;
#include &lt;WiFiClient.h&gt;

// Replace these with your WiFi network settings
const char* ssid = &quot;MYSSID&quot;; //replace this with your WiFi network name
const char* password = &quot;MYPASSWORD&quot;; //replace this with your WiFi network password

void setup() {
  Serial.begin(115200);
  delay(1000);
  
  IPAddress ip(192,168,1,77);
  IPAddress gateway(192,168,1,1);
  IPAddress subnet(255,255,255,0);
  
// If I uncomment this line then it works fine
//  WiFi.config(ip, gateway, subnet);

  WiFi.begin(ssid, password);

  Serial.println();
  Serial.print(&quot;Connecting&quot;);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(&quot;.&quot;);
  }

  Serial.println(&quot;success!&quot;);
  Serial.print(&quot;IP Address is: &quot;);
  Serial.println(WiFi.localIP());
}

void loop() {
  HTTPClient http;

  String serverPath = &quot;http://www.google.com&quot;;
  http.begin(serverPath.c_str());
  
  // Send HTTP GET request
  int httpResponseCode = http.GET();
  Serial.print(&quot;HTTP Response code: &quot;);
  Serial.println(httpResponseCode);
  String payload = http.getString();
  Serial.println(payload);
  // Free resources
  http.end();

  delay(1000);
}

When DHCP magically works it assigns: 192.168.1.159
When DHCP does not work I get: 169.254.104.241
When I use a static IP then the static IP is assigned.
So the question is: Has anyone seen this behavior and maybe give some hints about how I can get the internet connection to be consistent without needing a static IP?
Update:
If I run a ping to 169.254.104.241 I get a reply. But if I try to get anything from the internet I get HTTP Response Code = -1.
This is normal behavior. well not really, that address is called a apipa address.
It's normal behavior for alot of O.S's to give itself an address in the 169.254.x.x range when they fail to get DHCP responses.
My guess is your library is doing this for you.
It's kind of like the ad-hoc of addressing, if all devices fail to get a dhcp response they will all be assigned to the same subnet, and can communicate with those apipa addresses.
My suspicion is that it may be your router.
You can verify this by downloading a free DHCP server application for your OS. Plug in via Ethernet for the PC that's running the DHCP App, Turn off DHCP in the router. If it stops happening you know it's the router.
Edit: Also, this may be a firmware caveat in the router. Check the router manufacturers website and see if any firmware updates are available. if it hangs with DHCP, most likely every customer with that firmware revision has had this problem. This sort of thing usually gets patched very quickly.