Nota

Hola, ¡bienvenido a la Comunidad de Entusiastas de SunFounder para Raspberry Pi, Arduino y ESP32 en Facebook! Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 junto a otros entusiastas.

¿Por qué unirse?

  • Soporte Experto: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.

  • Aprende y Comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.

  • Avances Exclusivos: Obtén acceso anticipado a anuncios de nuevos productos y adelantos exclusivos.

  • Descuentos Especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.

  • Promociones Festivas y Sorteos: Participa en sorteos y promociones festivas.

👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy mismo.

LED Controlado por Wi-Fi (Punto de Acceso)

Este proyecto te permite controlar una luz LED a través de una interfaz web. La placa Arduino actúa como un punto de acceso Wi-Fi, creando su propia red local a la que puedes conectarte con un navegador web. Una vez conectado, puedes navegar a la dirección IP del dispositivo utilizando el navegador web, donde encontrarás opciones para encender y apagar un LED (conectado al pin 13 de la placa). El proyecto proporciona retroalimentación en tiempo real sobre el estado del LED a través del Monitor Serial, lo que facilita la depuración y comprensión del flujo de operaciones.

1. Sube el código

Abre el archivo 01-wifi_ap.ino en la ruta elite-explorer-kit-main\r4_new_feature\01-wifi_ap, o copia este código en Arduino IDE.

Nota

El soporte Wi-Fi® está habilitado mediante la biblioteca WiFiS3 incorporada que se incluye con el Arduino UNO R4 Core. Instalar el core automáticamente instala la biblioteca WiFiS3.

Todavía necesitas crear o modificar arduino_secrets.h, reemplazando SECRET_SSID y SECRET_PASS con el nombre y la contraseña de tu punto de acceso Wi-Fi. El archivo debería contener:

//arduino_secrets.h header file
#define SECRET_SSID "yournetwork"
#define SECRET_PASS "yourpassword"

2. Explicación del código

  1. Importación de Bibliotecas Necesarias

    Importación de la biblioteca WiFiS3 para las funcionalidades Wi-Fi y arduino_secrets.h para datos sensibles como contraseñas.

    #include "WiFiS3.h"
    #include "arduino_secrets.h"
    
  2. Configuración e Inicialización de Variables

    Definir SSID de Wi-Fi, contraseña e índice de clave junto con el pin del LED y el estado del Wi-Fi.

    char ssid[] = SECRET_SSID;
    char pass[] = SECRET_PASS;
    int keyIndex = 0;
    int led =  LED_BUILTIN;
    int status = WL_IDLE_STATUS;
    WiFiServer server(80);
    
  3. Función setup()

    Inicializar la comunicación serial y configurar el módulo Wi-Fi.

    void setup() {
    
      // ... código de configuración ...
      // Crear punto de acceso
      status = WiFi.beginAP(ssid, pass);
      // ... manejo de errores ...
      // iniciar el servidor web en el puerto 80
      server.begin();
    }
    

    También verificamos si la versión del firmware del uno R4 wifi está actualizada. Si no es la última versión, se mostrará un aviso de actualización. Puedes consultar Actualizar el firmware del módulo de radio en tu placa UNO R4 WiFi para la actualización del firmware.

    ...
    String fv = WiFi.firmwareVersion();
    if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
        Serial.println("Please upgrade the firmware");
    }
    ...
    

    Es posible que desees modificar el siguiente código para poder cambiar la IP predeterminada de Arduino.

    WiFi.config(IPAddress(192,48,56,2));
    
  4. Función Principal loop()

    La función loop() en el código Arduino realiza varias operaciones clave, específicamente:

    1. Verificar si un dispositivo se ha conectado o desconectado del punto de acceso.

    2. Escuchar a los clientes entrantes que hacen solicitudes HTTP.

    3. Leer los datos del cliente y ejecutar acciones basadas en esos datos, como encender o apagar un LED.

    Aquí, desglosamos la función loop() para hacer estos pasos más comprensibles.

    1. Verificación del Estado del Wi-Fi

      El código primero verifica si el estado del Wi-Fi ha cambiado. Si un dispositivo se ha conectado o desconectado, el monitor serial mostrará la información en consecuencia.

      if (status != WiFi.status()) {
        status = WiFi.status();
        if (status == WL_AP_CONNECTED) {
          Serial.println("Device connected to AP");
        } else {
          Serial.println("Device disconnected from AP");
        }
      }
      
    2. Escuchar a los Clientes Entrantes

      WiFiClient client = server.available(); espera a los clientes entrantes.

      WiFiClient client = server.available();
      
    3. Manejo de Solicitudes de Clientes

      Escuchar a los clientes entrantes y servirles la página web HTML. Cuando un usuario hace clic en los enlaces «Haz clic aquí para encender el LED» o «Haz clic aquí para apagar el LED» en la página web servida, se envía una solicitud HTTP GET al servidor Arduino. Específicamente, se accederá a las URL «http://tuDireccion/H» para encender el LED y «http://tuDireccion/L» para apagarlo.

      WiFiClient client = server.available();
      if (client) {
        // ...
        client.println("HTTP/1.1 200 OK");
        client.println("Content-type:text/html");
        client.println();
        client.print("<p style=\"font-size:7vw;\">Click <a href=\"/H\">here</a> turn the LED on<br></p>");
        client.print("<p style=\"font-size:7vw;\">Click <a href=\"/L\">here</a> turn the LED off<br></p>");
        // ...
      }
      

      El código de Arduino escucha estas solicitudes GET entrantes. Cuando detecta GET /H al final de una línea de texto entrante (cabecera HTTP), establece el LED conectado al pin 13 en HIGH, encendiéndolo. De manera similar, si detecta GET /L, establece el LED en LOW, apagándolo.

      while (client.connected()) {            // bucle mientras el cliente esté conectado
        delayMicroseconds(10);                // Esto es necesario para el Arduino Nano RP2040 Connect - de lo contrario, se ejecutará tan rápido que SPI nunca será atendido.
        if (client.available()) {             // si hay bytes para leer del cliente,
          char c = client.read();             // leer un byte, luego
          Serial.write(c);                    // imprimirlo en el monitor serial
          if (c == '\n') {                    // si el byte es un carácter de nueva línea
            ...
            }
            else {      // si obtuviste una nueva línea, entonces limpia currentLine:
              currentLine = "";
            }
          }
          else if (c != '\r') {    // si obtuviste algo que no sea un carácter de retorno de carro,
            currentLine += c;      // añádelo al final de currentLine
          }
      
          // Verificar si la solicitud del cliente fue "GET /H" o "GET /L":
          if (currentLine.endsWith("GET /H")) {
            digitalWrite(led, HIGH);               // GET /H enciende el LED
          }
          if (currentLine.endsWith("GET /L")) {
            digitalWrite(led, LOW);                // GET /L apaga el LED
          }
        }
      

Referencia