El sketch de “Hola mundo” es la base de todos los ejemplos y responde con un contenido HTML estático al navegador cuando solicita una página web.

Crear el sketch

Abre la aplicación Arduino IDE y selecciona “Archivo” en la barra de menú y luego haz clic en "Nuevo" para crear un nuevo sketch. Se abre una nueva ventana Arduino IDE con funciones de Setup y de Loop. Puedes hacer clic en la opción “Archivo” y “Guardar como...” para establecer un nombre de sketch más descriptivo, por ejemplo, WebServer.

Observa que Arduino IDE crea una carpeta llamada “WebServer” con el archivo “WebServer.ino” dentro.


Incluir la Librería Ethernet

Primero de todo, es necesario incluir la Librería Ethernet para usar el hardware Ethernet como el puerto de comunicación. La Librería Ethernet se incluye para el hardware basado en WIZNET W5100 -la Shield Ethernet- y la Librería Ethernet2 se incluye para el hardware basado en WIZNET W5500 -la Shield Ethernet2-. También es posible utilizar otras librerías y hardware, como las Librerías WIFI y WIFI101, pero el código debe adaptarse a la librería específica.

En este caso, se usa la Librería Ethernet2.

#include <Ethernet2.h>  


Iniciar el hardware de Ethernet

Para iniciar el hardware Ethernet se llama la función Ethernet.begin() en  setup(). Requiere, al menos, la dirección MAC del dispositivo. También acepta:

  • una dirección IP,

  • la dirección del servidor DNS,

  • la máscara de red,

  • la dirección de la puerta de enlace.

Cuando no se usa la dirección IP, la librería obtiene una dirección IP usando el protocolo DHCP, pero en este caso, como el sketch implementa un servidor web, es común fijar una dirección IP estática. En este caso, la dirección IP es 192.168.1.2.

No es necesario configurar un servidor DNS debido a que el sketch no intenta conectarse a otro servidor por su nombre. No es necesario configurar la máscara de red ni la puerta de enlace, ya que se definen automáticamente desde la dirección IP.

Código

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //
byte ip[] = {192, 168, 1, 2}; Ethernet.begin(mac, ip); // 

Crear un objeto EthernetServer

El componente utilizado para escuchar las solicitudes HTTP es el objeto EthernetServer. Como el servidor es un servidor HTTP, se usa el puerto 80. Es posible usar otro puerto, pero el más común es este. Agrega la siguiente línea justo antes de setup().

EthernetServer server(80);  // port 80                 


Encender el servidor

Después de la creación del servidor y la inicialización del hardware Ethernet, es importante recordar iniciar el servidor utilizando la función server.begin() en el setup(). Prepara el servidor para escuchar las conexiones entrantes de los clientes.

server.begin();                          


Esperar las solicitudes del cliente

Una vez que todo se inicia en setup(), el servidor debería comenzar a aceptar las solicitudes HTTP entrantes y procesarlas. Para aceptar solicitudes, se usa la función server.available(). Esta función no necesita ningún argumento, pero devuelve un objeto EthernetClient. Es posible verificar la solicitud de un cliente utilizando la declaración if (client): notifica que el cliente está listo.

EthernetClient client = server.available(); 
if (client) {
 // ... 
}  


Interpretar la solicitud HTTP

Se supone que el servidor recibirá una solicitud HTTP del cliente conectado, por lo que el sketch debería contemplar esa solicitud. El mecanismo es leer los datos disponibles hasta que se encuentre una línea vacía, lo que indica que la solicitud ha finalizado.

Ejemplo de código

bool emptyLine = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (emptyLine && (c == '\n')) {
// Send response
}
// The request is finished when an empty line is received
if (c == '\n') {
emptyLine = true;
} else if (c != '\r') {
emptyLine = false;
}
}
}
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (emptyLine && (c == '\n')) {
// Send response
}
// The request is finished when an empty line is received
if (c == '\n') {
emptyLine = true;
} else if (c != '\r') {
emptyLine = false;
}
}
}


Envía una respuesta HTTP estática con contenido HTML

Cuando la solicitud finaliza, el cliente espera una respuesta, por lo que el sketch se envía mientras la conexión aún está activa. La respuesta consiste en una línea de estado de respuesta HTTP, el encabezado del tipo de contenido de respuesta y muchos otros encabezados opcionales. Después de los encabezados, y según el tipo de contenido de respuesta, se envía el contenido. En este caso, el servidor siempre responde una página HTML estática con un texto “Hola PLC!”.

Ejemplo de código

client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println( "<!doctype html>" "<html>" "<head>" "<title>Hello PLC!</title>" "</head>" "<body>" "<h1>Hello PLC!</h1>" "</body>" "</html>" );
client.flush();


Cerrar la conexión

Después de enviar la respuesta al cliente, es necesario cerrar su conexión. Una conexión contiene solo una solicitud y su respuesta, nada más.

client.stop(); 

Revisión final del código

#include <Ethernet2.h> // Server creation
EthernetServer server(80);
void setup() { // Ethernet initialization
  byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; byte ip[] = {10, 10, 10, 25};
  Ethernet.begin(mac, ip); // Server initialization
  server.begin();
}
void loop() { // Wait for clients
  EthernetClient client = server.available();
  if (client) { // Parse request
    bool emptyLine = true; while (client.connected()) {
      if (client.available()) {
        char c = client.read(); // The request is finished when an empty line is received
        if (emptyLine && (c == '\n')) { // Send the response
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println(); client.println( "<!doctype html>" "<html>" "<head>" "<title>Hello PLC!</title>" "</head>" "<body>" "<h1>Hello PLC!</h1>" "</body>" "</html>" );
          client.flush(); // Close the connection
          client.stop(); break;
        } // The request is finished when a blank line is received
        if (c == '\n') {
          emptyLine = true;
        } else if (c != '\r') {
          emptyLine = false;
        }
      }
    }
  }
}
                          

               


Vistas
248 Número de vistas
10 Vistas de miembros
238 Vistas públicas
Compartir en redes sociales
Compartir enlace
Usar enlace permanente en las redes sociales
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.