// apRemote.ino - ESP8266 / NodeMCU as its own access point.
#include <ESP8266WiFi.h>
const char* apSsid = "EmbedClub-Node";
const char* apPassword = "changeThis123";
// GPIO2 is the D4 label, and it is the on-board LED - which is wired to 3.3V,
// so LOW turns it ON. The writes below look inverted because they are.
const int LED_PIN = 2;
WiFiServer server(80);
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH); // HIGH = off on this board
WiFi.softAP(apSsid, apPassword);
Serial.print("AP up, connect to it and open http://");
Serial.println(WiFi.softAPIP()); // 192.168.4.1 by default
server.begin();
}
void loop() {
WiFiClient client = server.available();
if (!client) return;
String request = client.readStringUntil('\r');
client.readStringUntil('\n');
if (request.indexOf("/LEDON") != -1) digitalWrite(LED_PIN, LOW); // on
if (request.indexOf("/LEDOFF") != -1) digitalWrite(LED_PIN, HIGH); // off
bool on = digitalRead(LED_PIN) == LOW;
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE html><html><head>");
client.println("<meta name='viewport' content='width=device-width,initial-scale=1'>");
client.println("<title>Node</title></head><body style='font-family:sans-serif;text-align:center;padding-top:3rem'>");
client.print("<h1>LED is ");
client.print(on ? "ON" : "OFF");
client.println("</h1>");
client.println("<p><a href='/LEDON'>Turn on</a> <a href='/LEDOFF'>Turn off</a></p>");
client.println("</body></html>");
client.stop();
}