Campamento de Programación - Parte 11: Controlar el LED desde tu Smartphone a través del WiFi

Este artículo te mostrará cómo montar un servidor web a modo de punto de acceso WiFi, el cual te permitirá controlar un LED desde tu navegador web de forma remota.

Figura 1 - Ejemplo de LED controlado por wifi

Antes de empezar, hay dos cosas importantes que deberías leer primero:

  • Consulta los documentos oficiales de Arduino. Estos incluyen las funciones más comunes con excelentes instrucciones, disponibles en: https://www.arduino.cc/reference/en/
  • Consulta la guía de programación oficial ESP32. La mayoría de las funciones específicas de ESP32 están presentes en: https://esp-idf.readthedocs.io/en/v3.0/

WiFi en modo AP

ESP32, que es usado en ODROID-GO, es compatible con WiFi 802.11b/g/n, de modo que podemos programar servicios WiFi con prácticas librerías en Arduino. En esta guía, vamos a utilizar la librería wifi.h:

#include

const char *apSsid = "ODROID_GO_AP";
const char *apPasswd = "12345678";

WiFiServer server(80);

void setup() {
IPAddress gateway(192, 168, 4, 1);
IPAddress subnet(255, 255, 255, 0);

if (WiFi.softAP(apSsid, apPasswd)) {
server.begin();
}
}

void loop() {

}
Este es el código básico para el WiFi en modo AP. Como ya sabes lo que supone el modo AP, este código hace que ODROID-GO genere una señal WiFi y tú puedas acceder a este AP a través de tu dispositivo con conexión WiFi. Para hacerlo, hemos definido la información AP del SSID y la contraseña, incluida la dirección IP de la puerta de enlace y la máscara de subred. Estas direcciones IP deben crearse como una instancia de la clase IPAddress. De esta forma, con este código, nos encontraremos en el rango de direcciones IP 192.168.4.x, y puedes conectarse al AP accediendo a 192.168.4.1. Este AP se activa con la función WiFi.softAP().

Para ofrecer una página web, define una instancia de WiFiServer como una variable global. Esto empieza cuando el WiFi se activa con éxito en el modo AP. A continuación, añade el código para configurar el LED en estado azul y aparecerán algunos mensajes de depuración que se muestran en el monitor. Esto nos resultará muy útil para ver cómo fluye el código.

#include

#define PIN_STATUS_LED 2

const char *apSsid = "ODROID_GO_AP";
const char *apPasswd = "12345678";

WiFiServer server(80);

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

pinMode(PIN_STATUS_LED, OUTPUT);
digitalWrite(PIN_STATUS_LED, LOW);

IPAddress gateway(192, 168, 4, 1);
IPAddress subnet(255, 255, 255, 0);

if (WiFi.softAP(apSsid, apPasswd)) {
Serial.println("WiFi AP established.");
Serial.print("WiFi AP IP: ");
Serial.println(WiFi.softAPIP());
Serial.print("AP SSID: ");
Serial.println(apSsid);
Serial.print("AP Password: ");
Serial.println(apPasswd);

server.begin();
} else {
Serial.println("WiFi AP establishing failed.");
}
}

void loop() {

}
Finalmente, crea un “cliente escuchador” en la función loop(). Este código de escucha se reproduce en bucle y sólo responderá cuando accede el cliente. No hemos facilitado una descripción de este código web, porque lo importante es que tú puedas responder como un paquete de datos que contenga el contenido deseado:
#include

#define PIN_STATUS_LED 2

const char *apSsid = "ODROID_GO_AP";
const char *apPasswd = "12345678";

WiFiServer server(80);

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

pinMode(PIN_STATUS_LED, OUTPUT);
digitalWrite(PIN_STATUS_LED, LOW);

IPAddress gateway(192, 168, 4, 1);
IPAddress subnet(255, 255, 255, 0);

if (WiFi.softAP(apSsid, apPasswd)) {
Serial.println("WiFi AP established.");
Serial.print("WiFi AP IP: ");
Serial.println(WiFi.softAPIP());
Serial.print("AP SSID: ");
Serial.println(apSsid);
Serial.print("AP Password: ");
Serial.println(apPasswd);

server.begin();
} else {
Serial.println("WiFi AP establishing failed.");
}
}

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

if (client) {
Serial.println("New Client.");
String currentLine = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n') {
if (currentLine.length() == 0) {
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println();

client.print("Click <a href="\">here</a> to turn the blue status LED on.
");
client.print("Click <a href="\">here</a> to turn the blue status LED off.
");

client.println();
break;
} else {
currentLine = "";
}
} else if (c != '\r') {
currentLine += c;
}

if (currentLine.endsWith("GET /H")) {
digitalWrite(PIN_STATUS_LED, HIGH);
}
if (currentLine.endsWith("GET /L")) {
digitalWrite(PIN_STATUS_LED, LOW);
}
}
}
client.stop();
}
}
Compila y carga en tu ODROID-GO y podrás ver el código de depuración en el monitor Serie.

Figura 2 - Información de depuración del AP

Conectarse al ODROID-GO y encender el LED

Puedes conectarte al ODROID-GO con tu dispositivo con conexión WiFi.

Figure 3 - Our ORDOID-GO Access Point
Figura 3 - Nuestro punto de acceso ORDOID-GO

Accede a ODROID_GO_AP con la contraseña 12345678, luego introduce 192.168.4.1 en tu navegador web.

Figure 4 - The demo LED webpage
Figura 4 - La página web demo del LED

Si haces clic en el texto, puede ver que el LED se enciende o se apaga. El funcionamiento puede ser monitorizado en el monitor Serie.

Figure 5 - Webpage Debug Information Show on Serial
Figura 5 - Presentación de la información de depuración de la página web

El ejemplo completo está disponible para importarlo haciendo clic en Files → Examples → ODROID-GO → WiFi_AP, luego presiona CTRL-U para compilar/cargar. Esta guía ha sido cogida de la wiki de ODROID que está disponible en https://wiki.odroid.com/odroid_go/arduino/08_wifi_ap.

Be the first to comment

Leave a Reply