5.4.20 Project 12.1 WiFi-test
De eenvoudigste manier om toegang te krijgen tot het internet is door verbinding te maken via WiFi. De ESP32 main control board is uitgerust met een WiFi-module, waardoor ons smart home eenvoudig toegankelijk wordt voor het internet.

1. Beschrijving
We verbinden het smart home met een LAN, dat de WiFi in je huis of de hotspot van je telefoon kan zijn. Nadat de verbinding is geslaagd, krijgt het bord een adres toegewezen dat kan worden gebruikt voor communicatie. We zullen het toegewezen adres in de seriële monitor afdrukken.
2. Testcode
⚠️ \ AANDACHT:\ Na het openen van het codebestand moet je de WiFi-naam en wachtwoorden aanpassen waar de ESP32 development board mee moet verbinden. Vervang ChinaNet-2.4G-0DF0 en ChinaNet@233 respectievelijk door je eigen WiFi-naam en wachtwoord. Je moet dit doen voordat je de code uploadt; anders kan de ESP32 niet met het netwerk verbinden.
const char* ssid = "ChinaNet-2.4G-0DF0"; // Enter your own WiFi name
const char* password = "ChinaNet@233"; // Enter your own WiFi passwords
⚠️ OPMERKING: Zorg ervoor dat de WiFi-naam en wachtwoorden in de code hetzelfde zijn als het netwerk verbonden met je computer, mobiele telefoon/tablet, ESP32 development board en router. Ze moeten zich in hetzelfde lokale netwerk (WiFi) bevinden.
⚠️ OPMERKING: De WiFi moet op een 2.4Ghz-frequentie werken; anders kan de ESP32 geen verbinding met WiFi maken.
#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. Testresultaat
⚠️ Opmerking: De mobiele telefoon of tablet moet verbonden zijn met de ESP32 development board via hetzelfde WiFi. Anders kan deze de bedieningspagina niet bereiken. Bovendien verbruikt het ESP32 development board veel stroom wanneer het de WiFi-functie gebruikt. Een externe DC-voeding is vereist om aan de stroombehoefte te voldoen voor de werking. Als aan de stroombehoefte niet wordt voldaan, blijft de ESP32 in een resetlus, waardoor de code niet normaal draait.
Als de WiFi succesvol is verbonden, zal de seriële monitor het toegewezen IP-adres afdrukken.

Open een browser om het IP-adres te benaderen; dan lezen we de inhoud van de string S die door client.println(s); in de code wordt verzonden.
