#define LED_BUILTIN 2 #include #include #include WiFiServer server(80); ImprovWiFi improvSerial(&Serial); char linebuf[80]; int charcount = 0; void onImprovWiFiErrorCb(ImprovTypes::Error err) { server.stop(); blink_led(2000, 3); } void onImprovWiFiConnectedCb(const char *ssid, const char *password) { // Save ssid and password here server.begin(); blink_led(100, 3); } bool connectWifi(const char *ssid, const char *password) { WiFi.begin(ssid, password); while (!improvSerial.isConnected()) { blink_led(500, 1); } return true; } void setup() { Serial.begin(115200); pinMode(LED_BUILTIN, OUTPUT); WiFi.mode(WIFI_STA); WiFi.disconnect(); improvSerial.setDeviceInfo("ImprovWiFiLib", "1.0.0", "BasicWebServer", "http://{LOCAL_IPV4}?name=Guest"); improvSerial.onImprovError(onImprovWiFiErrorCb); improvSerial.onImprovConnected(onImprovWiFiConnectedCb); improvSerial.setCustomTryConnectToWiFi(connectWifi); // Optional blink_led(100, 5); } void loop() { improvSerial.handleSerial(); if (improvSerial.isConnected()) { handleHttpRequest(); } } void handleHttpRequest() { WiFiClient client = server.available(); if (client) { blink_led(100, 1); memset(linebuf, 0, sizeof(linebuf)); charcount = 0; // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); // read char by char HTTP request linebuf[charcount] = c; if (charcount < sizeof(linebuf) - 1) charcount++; if (c == '\n' && currentLineIsBlank) { // send a standard http response header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); // the connection will be closed after completion of the response client.println(); client.println(""); client.println("

Welcome!

"); client.println("

This is a simple webpage served by your ESP32

"); client.println("

Chip Info

"); client.println("
  • Model:"); client.println(ESP.getChipModel()); client.println("
  • Cores: "); client.println(ESP.getChipCores()); client.println("
  • Revision: "); client.println(ESP.getChipRevision()); client.println("
"); client.println("

Network Info

"); client.println("
  • SSID: "); client.println(WiFi.SSID()); client.println("
  • IP Address: "); client.println(WiFi.localIP()); client.println("
  • MAC Address: "); client.println(WiFi.macAddress()); client.println("
"); client.println(""); client.println(""); break; } } } delay(1); client.stop(); } } void blink_led(int d, int times) { for (int j = 0; j < times; j++) { digitalWrite(LED_BUILTIN, HIGH); delay(d); digitalWrite(LED_BUILTIN, LOW); delay(d); } }