Update: 2023-03-17

Wichtig!
Der Admin Tab ist nicht für den Access Point geeignet.

Esp8266 Connect Mixed Mode als Arduino Tab.

Connect.ino

// ****************************************************************
// Sketch Esp8266 Connect Mixed Mode Modular(Tab)
// created: Jens Fleischer, 2020-12-29
// last mod: Jens Fleischer, 2023-03-17
// For more information visit: https://fipsok.de
// ****************************************************************
// Hardware: Esp8266
// Software: Esp8266 Arduino Core  2.7.4 - 3.1.1
// Getestet auf: Nodemcu, Wemos D1 Mini Pro, Sonoff Dual
/******************************************************************
  Copyright (c) 2020 Jens Fleischer. All rights reserved.

  This file is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.
  This file is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.
*******************************************************************/
// Diese Version von Connect Mixed Mode sollte als Tab eingebunden werden.
// #include <WebServer.h> sollte im Haupttab aufgerufen werden
// Dieser Tab kann mit dem ESP8266 Webserver betrieben werden.
// Die Funktion "connectWifi();" muss im Setup eingebunden werden.
/**************************************************************************************/

const char* STA_SSID = "Netzwerkname";             // Darf bis zu 32 Zeichen haben.
const char* STA_PASSWORD = "PasswortvomNetzwerk";  // Mindestens 8 Zeichen jedoch nicht länger als 64 Zeichen.
const char* AP_SSID = "Esp8266AP";                 // Darf bis zu 31 Zeichen haben.
const char* AP_PASSWORD = "Passphrase";            // Mindestens 8 Zeichen jedoch nicht länger als 63 Zeichen. Gegebenenfalls auch ohne PW.

//#define STA_CONFIG                               // Einkommentieren wenn der ESP im STA Modus dem Router die IP mitteilen soll.

#ifdef STA_CONFIG
IPAddress staticIP(192, 168, 178, 99);             // Statische IP des NodeMCU ESP8266
IPAddress gateway(192, 168, 178, 1);               // IP-Adresse des Router
IPAddress subnet(255, 255, 255, 0);                // Subnetzmaske des Netzwerkes
IPAddress dns(192, 168, 178, 1);                   // DNS Server
#endif

#define AP_CONFIG                                  // Auskommentieren falls die Standard Konfiguration des Esp8266 AP verwendet werden soll.

#ifdef AP_CONFIG
IPAddress apIPv4(10, 0, 0, 1);                     // Eigene IP des Esp8266 Access Point
IPAddress apsubnet(255, 0, 0, 0);                  // Subnetzmaske des Netzwerkes
#endif

void connectWifi() {                               // Funktionsaufruf "connectWifi();" muss im Setup eingebunden werden.
  WiFi.persistent(false);                          // Auskommentieren wenn Netzwerkname und Passwort in den Flash geschrieben werden sollen.
  WiFi.mode(WIFI_AP_STA);
  yield();                                         // Erforderlich, wenn die WiFi Settings" nicht aus dem Flash gelesen werden können.
  
#ifdef AP_CONFIG
  WiFi.softAPConfig(apIPv4, apIPv4, apsubnet);
#endif
  if (WiFi.softAP(AP_SSID, AP_PASSWORD)) {
    Serial.printf(PSTR("Der Esp stellt einen Access Point zur Verfügung SSID:\"%s\" PW:\"%s\"\nGib die IP %s im Browser ein.\n\n"),
                  WiFi.softAPSSID().c_str(), WiFi.softAPPSK().c_str(), WiFi.softAPIP().toString().c_str());
  } else {
    Serial.println(PSTR("Fehler beim erstellen des AP."));
  }

#ifdef STA_CONFIG
  WiFi.config(staticIP, gateway, subnet, dns);
#endif
  WiFi.begin(STA_SSID, STA_PASSWORD);
  while (WiFi.status() != WL_CONNECTED && millis() < 8000) yield();
  Serial.println(millis());
  if (WiFi.isConnected()) {
    Serial.printf(PSTR("Verbunden mit Station: %s\nEsp8266 IP: %s\n\n"), WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());
  }
  else {
    WiFi.disconnect();
  }
}