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
Importación de Bibliotecas Necesarias
Importación de la biblioteca
WiFiS3
para las funcionalidades Wi-Fi yarduino_secrets.h
para datos sensibles como contraseñas.#include "WiFiS3.h" #include "arduino_secrets.h"
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);
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));
Función Principal
loop()
La función
loop()
en el código Arduino realiza varias operaciones clave, específicamente:Verificar si un dispositivo se ha conectado o desconectado del punto de acceso.
Escuchar a los clientes entrantes que hacen solicitudes HTTP.
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.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"); } }
Escuchar a los Clientes Entrantes
WiFiClient client = server.available();
espera a los clientes entrantes.WiFiClient client = server.available();
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 detectaGET /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