5.4.20 Proyecto 12.1 Prueba de WiFi

La forma más sencilla de acceder a Internet es usar WiFi para conectarse. La placa de control principal ESP32 viene con un módulo WiFi, lo que hace que nuestro hogar inteligente sea accesible a Internet fácilmente.

imagen58

1. Descripción

Conectamos la casa inteligente a una LAN, que es el WiFi de su hogar o el punto de acceso de su teléfono. Después de que la conexión sea exitosa, se asignará una dirección, la cual puede usarse para la comunicación. Imprimiremos la dirección asignada en el monitor serie.

2. Código de prueba

⚠️ \ ATENCIÓN:\ Después de abrir el archivo de código, necesita modificar el nombre y la contraseña del WiFi a los que la placa de desarrollo ESP32 necesita conectarse. Reemplace ChinaNet-2.4G-0DF0 y ChinaNet@233 por su propio nombre y contraseña de WiFi respectivamente. Debe hacer esto antes de subir el código; de lo contrario, la placa ESP32 no podrá conectarse a la red.

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

⚠️ NOTA: Por favor asegúrese de que el nombre y las contraseñas del WiFi en el código sean los mismos que la red a la que están conectados su ordenador, teléfono móvil/tablet, placa de desarrollo ESP32 y el router. Deben estar dentro de la misma red local (WiFi).

⚠️ NOTA: El WiFi debe estar en una frecuencia de 2.4Ghz; de lo contrario, el ESP32 no podrá conectarse al WiFi.

#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. Resultado de la prueba

⚠️ Nota: El teléfono móvil o tablet debe estar conectado a la placa de desarrollo ESP32 mediante el mismo WiFi. De lo contrario, no podrá acceder a la página de control. Además, cuando la placa de desarrollo ESP32 usa la función WiFi, consume mucha energía. Se requiere una fuente de alimentación DC externa para satisfacer su demanda de energía para el funcionamiento. Si no se satisface la demanda de energía, la placa ESP32 seguirá reiniciándose, lo que provocará que el código no se ejecute con normalidad.

Si el WiFi se conecta correctamente, el monitor serie imprimirá la dirección IP asignada.

imagen59

Abra un navegador para acceder a la dirección IP, luego leeremos el contenido del string S enviado por client.println(s); en el código.

imagen60