Can't get my Wemos D1 Mini to connect to Wifi

Ok, I'm really confused here.

I have tried a D1 Mini and a NodeMCU and can't get either of them to connect to my Wifi.
The D1 was part of another (working) project and i grabbed it for this thinking i was doing something wrong with the Node.

No matter what I do, I can't seem to get them connecting to my Wifi.

I'm using the built in examples from the ESP8266 board library and they just sit on connecting.

This is an example

/*
 *  This sketch demonstrates how to set up a simple HTTP-like server.
 *  The server will set a GPIO pin depending on the request
 *    http://server_ip/gpio/0 will set the GPIO2 low,
 *    http://server_ip/gpio/1 will set the GPIO2 high
 *  server_ip is the IP address of the ESP8266 module, will be 
 *  printed to Serial when the module is connected.
 */

#include <ESP8266WiFi.h>

const char* ssid = "-------";
const char* password = "------";

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(10);

  // prepare GPIO2
  pinMode(2, OUTPUT);
  digitalWrite(2, 0);
  
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  
  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());
}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
  
  // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();
  
  // Match the request
  int val;
  if (req.indexOf("/gpio/0") != -1)
    val = 0;
  else if (req.indexOf("/gpio/1") != -1)
    val = 1;
  else {
    Serial.println("invalid request");
    client.stop();
    return;
  }

  // Set GPIO2 according to the request
  digitalWrite(2, val);
  
  client.flush();

  // Prepare the response
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now ";
  s += (val)?"high":"low";
  s += "</html>\n";

  // Send the response to the client
  client.print(s);
  delay(1);
  Serial.println("Client disonnected");

  // The client will actually be disconnected 
  // when the function returns and 'client' object is detroyed
}

I do not alter it at all, just input my SSID and Password.

I have also tried hot-spotting my phone, and that doesn't work either.

However, I am able to set the D1 up as an AP and connect to it using my phone, so at-least I know the hardware looks ok.

I was on version 2.4.0 of the 8266 Library. I upgraded to 2.4.2 when I had issues. I have now downgraded to 2.3.0 in the off chance it changed something.

I have even set up a separate SSID that is 2.4Ghz only and that hasn't helped.

Everything else it connecting to my wifi fine, so i don't think it's that. (2 phones, N-Switch, notebook computer, Echo, etc)

I'm within 3m of the AP (It's a Meraki AP mounted on the ceiling) and have LOS to it (not that it should matter).

Any ideas?

the different version of Adrduino esp8266 use different versions of Espressif SDK. And the different versions of SDK are somehow not compatible in parameters remembered on the flash. The solution is to clear the flash with esptool after changing from AT firmware or different versions of Arduino core. And then upload the sketch.

Thanks for the reply.

About midnight last night I had an idea, which turned out to be correct.

Something had been filling my DHCP Server on my network with broken leases, so my DHCP server wasn't handing out new IPs until the old ones expired.

Just so happened that all of my "stuff" had current leases so I didn't see the problem elsewhere.