5.4.20 Projekt 12.1 WiFi-Test

Der einfachste Weg, auf das Internet zuzugreifen, ist die Verbindung über WiFi. Das ESP32 Entwicklungsboard ist mit einem WiFi-Modul ausgestattet, wodurch unser Smart Home einfach für das Internet zugänglich wird.

Bild58

1. Beschreibung

Wir verbinden das Smart Home mit einem LAN, also dem WiFi in Ihrem Zuhause oder dem Hotspot Ihres Telefons. Nach erfolgreicher Verbindung wird eine Adresse zugewiesen, die für die Kommunikation verwendet werden kann. Wir werden die zugewiesene Adresse im seriellen Monitor ausgeben.

2. Testcode

⚠️ ACHTUNG: Nach dem Öffnen der Code-Datei müssen Sie den WiFi-Namen und das Passwort ändern, mit denen das ESP32 Entwicklungsboard eine Verbindung herstellen soll. Ersetzen Sie ChinaNet-2.4G-0DF0 und ChinaNet@233 jeweils durch Ihren eigenen WiFi-Namen und Ihr eigenes Passwort. Sie müssen dies tun, bevor Sie den Code hochladen; andernfalls kann das ESP32-Board keine Verbindung zum Netzwerk herstellen.

const char* ssid = "ChinaNet-2.4G-0DF0";  // Enter your own WiFi name
const char* password = "ChinaNet@233"; // Enter your own WiFi passwords

⚠️ HINWEIS: Bitte stellen Sie sicher, dass der WiFi-Name und das Passwort im Code mit dem Netzwerk übereinstimmen, mit dem Ihr Computer, Mobiltelefon/Tablet, das ESP32 Entwicklungsboard und der Router verbunden sind. Sie müssen sich im selben lokalen Netzwerk (WiFi) befinden.

⚠️ HINWEIS: Das WiFi muss auf einer 2.4Ghz-Frequenz betrieben werden; andernfalls kann sich das ESP32 nicht mit dem WiFi verbinden.

#include <Arduino.h>
#include <WiFi.h>
#include <ESPmDNS.h>
#include <WiFiClient.h>

// Network Configuration
const char* ssid = "ChinaNet-2.4G-0DF0";
const char* password = "ChinaNet@233";
WiFiServer server(80);

// Global Variables
String requestPath = "/";  // Stores the HTTP request path

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

  // Connect to WiFi
  Serial.println("\nConnecting to WiFi...");
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  // Network information
  Serial.println("\nWiFi connected");
  printNetworkInfo();

  // Start server and mDNS
  server.begin();
  if (!MDNS.begin("esp32")) {
    Serial.println("Error setting up MDNS responder!");
  }
  MDNS.addService("http", "tcp", 80);
  Serial.println("HTTP server started");
}

void loop() {
  WiFiClient client = server.available();

  if (!client) {
    return;
  }

  // Wait for client data
  while (client.connected() && !client.available()) {
    delay(1);
  }

  // Read HTTP request
  String request = client.readStringUntil('\r');
  parseHttpRequest(request);

  // Handle request
  String response;
  if (requestPath == "/") {
    response = buildHomepageResponse();
    Serial.println("Serving homepage");
  } else {
    response = buildNotFoundResponse();
    Serial.println("Unknown request: " + requestPath);
  }

  // Send HTTP response
  client.println(response);
  client.stop();

  // Small delay between requests
  delay(100);
}

// Helper Functions
void printNetworkInfo() {
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());
  Serial.print("IP Address: ");
  Serial.println(WiFi.localIP());
}

void parseHttpRequest(String req) {
  int addr_start = req.indexOf(' ');
  int addr_end = req.indexOf(' ', addr_start + 1);

  if (addr_start == -1 || addr_end == -1) {
    Serial.print("Invalid request: ");
    Serial.println(req);
    requestPath = "/404";
    return;
  }

  requestPath = req.substring(addr_start + 1, addr_end);
  Serial.println("Requested path: " + requestPath);
}

String buildHomepageResponse() {
  IPAddress ip = WiFi.localIP();
  String ipStr = String(ip[0]) + '.' + ip[1] + '.' + ip[2] + '.' + ip[3];

  String html = "HTTP/1.1 200 OK\r\n";
  html += "Content-Type: text/html\r\n";
  html += "Connection: close\r\n";
  html += "\r\n";
  html += "<!DOCTYPE HTML>\n";
  html += "<html><head><title>ESP32 Web Server</title></head>\n";
  html += "<body><h1>Hello from ESP32</h1>\n";
  html += "<p>IP Address: " + ipStr + "</p>\n";
  html += "</body></html>\n";

  return html;
}

String buildNotFoundResponse() {
  String html = "HTTP/1.1 404 Not Found\r\n";
  html += "Content-Type: text/html\r\n";
  html += "Connection: close\r\n";
  html += "\r\n";
  html += "<!DOCTYPE HTML>\n";
  html += "<html><head><title>404 Not Found</title></head>\n";
  html += "<body><h1>404</h1><p>Page not found</p></body></html>\n";

  return html;
}

3. Testergebnis

⚠️ Hinweis: Das Mobiltelefon oder Tablet muss mit demselben WiFi verbunden sein wie das ESP32 Entwicklungsboard. Andernfalls kann nicht auf die Steuerungsseite zugegriffen werden. Außerdem verbraucht das ESP32 Entwicklungsboard bei Nutzung der WiFi-Funktion viel Strom. Eine externe DC-Stromversorgung ist erforderlich, um den Betriebsstrombedarf zu decken. Wenn der Strombedarf nicht gedeckt ist, wird das ESP32-Board ständig neu gestartet, wodurch der Code nicht normal ausgeführt werden kann.

Wenn das WiFi erfolgreich verbunden ist, wird im seriellen Monitor die zugewiesene IP-Adresse ausgegeben.

Bild59

Öffnen Sie einen Browser und rufen Sie die IP-Adresse auf; anschließend lesen wir den Inhalt des Strings S, der im Code mit client.println(s); gesendet wird.

Bild60