ESP - draht­lo­se Ver­bin­dung aufbauen

Lese­zeit: 5 Minu­ten


Die Pro­zes­sor­fa­mi­li­en

  • ESP32
    ESP32-Wroom
    ESP32-C6
    XIAO-ESP32-C3
    Ardui­no Nano ESP32
  • ESP8266
    NodeM­CU
    Wemos D1 Mini

Kon­fi­gu­ra­ti­on der Mikrocontroller

Netz­werk­mo­di der ESP-Mikrocontroller

Sta­ti­ons-Modus

Sta­ti­ons-Modus mit DHCP

Im Sta­ti­ons-Modus (STA) ver­wen­det der Mikro­con­trol­ler das WLAN-Netz des Rou­ters und erhält von dort eine IP-Adres­se. Die­se wird dyna­misch zuge­wie­sen, es kann jedes Mal eine ande­re sein (DHCP = Dyna­mic Host Con­fi­gu­ra­ti­on Protocol).

#ifdef ESP8266
  #include "ESP8266WiFi.h"
#else 
  #include "WiFi.h"
#endif

// Router als AP
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";

void setup() 
{
  Serial.begin(9600);
  
  // auf serielle Verbindung warten
  while (!Serial);
  delay(1000);

  WiFi.mode(WIFI_STA);
  WiFi.begin(Router, Passwort);
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(200);
    Serial.print(".");
  }
 
  // SSID des Routers anzeigen
  Serial.println();
  Serial.print("Verbunden mit ");
  Serial.println(WiFi.SSID());

  Serial.print("IP-Adresse: ");
  Serial.println(WiFi.localIP());
}

void loop()
{
  // bleibt leer, das Programm läuft nur einmal
}

Sta­ti­ons-Modus mit sta­ti­scher IP-Adresse

Die sta­ti­sche IP-Adres­se muss dem Netz­werk des Rou­ters ange­passt werden.

#ifdef ESP8266
  #include "ESP8266WiFi.h"
#else 
  #include "WiFi.h"
#endif

// Router als Accesspoint
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";

// statische IP-Adresse
IPAddress ip(192, 168, 1, 5);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);

void setup() 
{
  Serial.begin(9600);
  
   // auf serielle Verbindung warten
  while (!Serial);
  delay(1000);

  WiFi.mode(WIFI_STA);
  WiFi.config(ip, gateway, subnet);
  WiFi.begin(Router, Passwort);

  // SSID des Routers anzeigen
  Serial.println();
  Serial.print("Verbunden mit ");
  Serial.println(WiFi.SSID());

  Serial.println();
  Serial.print("IP-Adresse: ");
  Serial.println(WiFi.localIP());
}

void loop()
{
  // bleibt leer, das Programm läuft nur einmal
}

AP-Modus (Acces­s­point-Modus) der ESPs

Beim AP-Modus bau­en die ESPs ein eige­nes Netz auf, du musst ihnen neben dem Namen des Rou­ters und dem Pass­wort eini­ge Daten mitteilen:

IPAddress ip(192, 168, 4, 1);
IPAddress gateway(192, 168, 4, 1);
IPAddress subnet(255, 255, 255, 0);

Natür­lich kannst du auch ande­re Sub­net­ze verwenden:

IPAddress ip(192, 168, 5, 1);
IPAddress gateway(192, 168, 5, 1);
IPAddress subnet(255, 255, 255, 0);

Der Name des Rou­ters und das Pass­wort sind frei wähl­bar, aller­dings muss das Pass­wort min­des­tens 8 Zei­chen haben.

ip legt die sta­ti­sche IP-Adres­se fest.
gate­way ist das Gerät - in die­sem Fall der ESP selbst - das die Kom­mu­ni­ka­ti­on der ver­bun­de­nen Gerä­te (der Kli­en­ten) unter­ein­an­der regelt.
sub­net ist der Adress­be­reich der zuge­las­se­nen IP-Adres­sen. 255 bedeu­tet, dass die­ser Bereich jeweils unver­än­der­lich ist, 0 am Ende heißt, dass die IP-Adres­sen varia­bel sind. Da die ers­te und die letz­te IP-Adres­se aus orga­ni­sa­to­ri­schen Grün­den nicht ver­ge­ben wer­den darf, blei­ben 254 IP-Adres­sen (192.168.4.1 bis 192.168.4.254) übrig.
Die neue­re Schreib­wei­se ist übri­gens in die­sem Fall 192.168.4/24.

#ifdef ESP8266
  #include "ESP8266WiFi.h"
#else 
  #include "WiFi.h"
#endif

// Netzwerkname und Passwort des ESP
char Router[] = "ESPServer";
char Passwort[] = "espserver";

// Server und Klient
IPAddress ip(192, 168, 4, 1);
IPAddress gateway(192, 168, 4, 1);
IPAddress subnet(255, 255, 255, 0);

void setup() 
{
  Serial.begin(9600);
  
   // auf serielle Verbindung warten
  while (!Serial);
  delay(1000);

  // ESP als Access-Point (AP) konfigurieren
  WiFi.mode(WIFI_AP);
  WiFi.softAPConfig(ip, gateway, subnet);

  // Access-Point starten
  WiFi.softAP(Router, Passwort);
   
  // SSID des Routers anzeigen
  Serial.println();
  Serial.print("Verbunden mit ");
  Serial.println(WiFi.softAPSSID());

  Serial.print("IP-Adresse: ");
  Serial.println(WiFi.softAPIP());
}

void loop()
{
  // bleibt leer, das Programm läuft nur einmal
}

ESP als Web­ser­ver mit DHCP im Sta­ti­ons-Modus verwenden

Beach­te hier die Unter­schie­de beim Start von WiFi und Web­ser­ver der Pro­zes­sor­fa­mi­li­en ESP8266 und ESP32.

  • ESP32
    #include "WiFi.h"
    #include "WebServer.h"
    Web­Ser­ver Server(80);
  • ESP8266
    #include "ESP8266WebServer.h"
    ESP8266WebServer Server(80);

Das Pro­gramm

Das Pro­gramm fragt den Wert an einem ana­lo­gen Pin ab, in die­sem Fall den Pin 35 an einem ESP32-Wroom. Für ande­re Mikro­con­trol­ler musst du die Num­mer des Pins anpassen.

#ifdef ESP8266
  #include "ESP8266WebServer.h"
  ESP8266WebServer Server(80);
#else 
  #include "WiFi.h"
  #include "WebServer.h"
  WebServer Server(80);
#endif

// WiFi-Daten
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";

int AnalogerPin = 35;
void setup() 
{ 
  Serial.begin(9600);

  // auf serielle Verbindung warten
  while (!Serial);
  delay(1000);

  // Verbindung aufbauen
  WiFi.mode(WIFI_STA);
  WiFi.begin(Router, Passwort);
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(200);
    Serial.print(".");
  }
 
  // SSID des Routers anzeigen
  Serial.println();
  Serial.print("Verbunden mit ");
  Serial.println(WiFi.SSID());

  Serial.print("IP-Adresse: ");
  Serial.println(WiFi.localIP());

  // Webserver starten
  Server.begin();

  Server.on("/", SeiteBauen);

  // beim Aufruf der URL /SeiteBauen
  // Funktion SeiteBauen aufrufen
  Server.on("/SeiteBauen", SeiteBauen);
}

void loop() 
{
  // auf Anfragen warten
  Server.handleClient();
}

void SeiteBauen()
{
  // Seite "zusammenbauen"
  String Seite = "";
  Seite += "<h1>Webserver gestartet</h1>";
  Seite += "<hr>";
  Seite += "Analoger Messwert an Pin  " + String(AnalogerPin) + ": ";
  Seite += analogRead(D2);

  // Seite anzeigen
  Server.send(200, "text/html", Seite);
}

Im Seri­el­len Moni­tor wird die IP-Adres­se ange­zeigt, die­se musst du in einem Brow­ser dei­ner Wahl eingeben.

ESP als Web­ser­ver im AP-Modus verwenden

Als Kli­en­ten kön­nen alle WLAN-fähi­gen Gerä­te ver­wen­det werden. 

Manu­el­le Kon­fi­gu­ra­ti­on des Klienten

Ein Smart­phone sucht über das mobi­le Netz im Inter­net nach der IP-Adres­se des ESP­Ser­vers (192.168.4.1), das ist natür­lich nicht gewünscht. Ver­wen­de statt­des­sen http://192.168.4.1

Den Kli­en­ten wer­den kei­ne IP-Adres­sen auto­ma­tisch zuge­teilt. Daher muss die Kon­fi­gu­ra­ti­on hän­disch erle­digt wer­den.
Zunächst musst du das als "ESP­Ser­ver" ange­zeig­te WLAN aus­wäh­len und anschlie­ßend die Kon­fi­gu­ra­ti­on anpassen.

Wenn du meh­re­re Kli­en­ten ver­wen­den willst, musst du jeweils eine ande­re IP-Adres­se ver­wen­den (z. B. 192.168.4.5). Die Adres­se des Rou­ters bleibt unverändert.

iOS

Android

Win­dows 10

Das Pro­gramm

Das Pro­gramm fragt den Wert an einem ana­lo­gen Port ab, in die­sem Fall den Pin 35 an einem ESP32-Wroom. Für ande­re Mikro­con­trol­ler musst du die Num­mer des Pins anpassen.

#ifdef ESP8266
  #include "ESP8266WebServer.h"
  ESP8266WebServer Server(80);
#else 
  #include "WiFi.h"
  #include "WebServer.h"
  WebServer Server(80);
#endif

// Netzwerkname und Passwort des ESP
char Router[] = "ESPServer";
char Passwort[] = "espserver";

// Konfiguration als Server und Klient
IPAddress ip(192, 168, 4, 1);
IPAddress gateway(192, 168, 4, 1);
IPAddress subnet(255, 255, 255, 0);

void setup() 
{
  Serial.begin(9600);
  
  // auf serielle Verbindung warten
  while (!Serial);
  delay(1000);

  // ESP als Access-Point (AP) konfigurieren
  WiFi.mode(WIFI_AP);
  WiFi.softAPConfig(ip, gateway, subnet);

  // Access-Point starten
  WiFi.softAP(Router, Passwort);
   
  // SSID des Routers anzeigen
  Serial.println();
  Serial.print("Verbunden mit ");
  Serial.println(WiFi.softAPSSID());

  Serial.print("IP-Adresse: ");
  Serial.println(WiFi.softAPIP());

  // Webserver starten
  Server.begin();

  // beim Aufruf der URL /SeiteBauen
  // Funktion SeiteBauen aufrufen
  Server.on("/", SeiteBauen);
}

void loop() 
{
  // auf Anfragen warten
  Server.handleClient(); 
}


void SeiteBauen()
{
  // Seite "zusammenbauen"
  String Seite = "";
  Seite += "<h1>Webserver gestartet</h1>";
  Seite += "<hr>";
  Seite += "Analoger Messwert an Pin 35: ";
  Seite += analogRead(35);

  // Seite anzeigen
  Server.send(200, "text/html", Seite);
}

Letzte Aktualisierung: Apr. 7, 2025 @ 9:30