-->
Page 1 of 2

WiFi Web Server can only connect to it via AP

PostPosted: Tue Sep 13, 2016 2:37 am
by Larsen
Hi,

I have been playing with the code for a WiFi Web Server ( http://www.arduinesp.com/wifiwebserver ). The ESP8266 connects perfect to my router, and gets an IP address from it, but when I try to connect to it via my web browser, it just times out.

If I setup the ESP8266 to run in AP mode, and connects to that AP from my computer, I can access the ESP8266 Web Server via my web browser and it works as it should.

Why can I not connect to the ESP8266 Web Server when connected directly to my router, but need to switch to the AP to make it work? The IP address I use to access the ESP8266 Web Server when it is in AP mode, is the IP address my router has given to the ESP8266.

I am using the Arduino board manager version 2.3.0, and Arduino IDE version 1.6.11


The code for the web server is here (taken from http://www.arduinesp.com/wifiwebserver):
Code: Select all#include <ESP8266WiFi.h>

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

int ledPin = 2; // GPIO2

WiFiServer server(80);

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

  WiFi.mode(WIFI_STA);          // WiFi.mode(WIFI_AP);

  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);

// 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.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
}

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 request = client.readStringUntil(‘\r’);
  Serial.println(request);
  client.flush();

  // Match the request
  int value = LOW;
  if (request.indexOf("/LED=ON") != -1) {
    digitalWrite(ledPin, HIGH);
    value = HIGH;
  }
  if (request.indexOf("/LED=OFF") != -1) {
    digitalWrite(ledPin, LOW);
    value = LOW;
  }

  // Return the response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); // do not forget this one
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");

  client.print("Led pin is now: ");

  if(value == HIGH) {
    client.print("On");
  } else {
    client.print("Off");
  }
  client.println("<br><br>");
  client.println("Click <a href=\"/LED=ON\">here</a> turn the LED on pin 2 ON<br>");
  client.println("Click <a href=\"/LED=OFF\">here</a> turn the LED on pin 2 OFF<br>");
  client.println("</html>");

  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
}


Regards
Larsen

Re: WiFi Web Server can only connect to it via AP

PostPosted: Wed Sep 14, 2016 7:20 am
by eduperez
Perhaps your router is configured to isolate wireless clients?

Re: WiFi Web Server can only connect to it via AP

PostPosted: Thu Sep 15, 2016 12:50 am
by Larsen
My router is a Linksys WRP400. I have been through the setup and I cannot find any specific setting about wireless clients or servers. Anyway, I will try to find another router to test it on, and I will get back with news about that.

Re: WiFi Web Server can only connect to it via AP

PostPosted: Thu Sep 22, 2016 10:31 am
by mrburnette
Larsen wrote:Hi,
<...>The IP address I use to access the ESP8266 Web Server when it is in AP mode, is the IP address my router has given to the ESP8266.



Just for grins, can you ping the ESP8266 at the DHCP address?
When the ESP8266 client connects to the home AP, the DHCP should be in the router's scope of assignment.
Your ESP8266 softAP should not be active.
Your ESP8266 webserver is going to need to be set to a subnet address within the home AP subnet scope but not one that will be used by DHCP... in other words, you are going to have to limit the DHCP assignment scope to allow for a band of static assigned addresses ... then assign your webserver to one of those manual assignable addresses.
Disclaimer ... I actually have not tried this scenario here, but I can see how it would be useful. Of course, your browser must use the static webserver IP address in the URL for attachment unless you plan on implementing some DNS resolution scheme.

Ray