-
Sin categorizar
-
#0 Introducción
- Arduino official example
-
#1 Requisitos
-
#2 Hola Mundo10 xp
-
#3 Establecer y borrar una salida10 xp
- Examen
-
#4 Mostrar valor de una entrada10 xp
- Examen
-
#5 Enviar datos RS48510 xp
- Examen
-
#2 Hola Mundo
10 XPEl 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 receivedif (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 receivedif (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 creationEthernetServer server(80);void setup() { // Ethernet initializationbyte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; byte ip[] = {10, 10, 10, 25};Ethernet.begin(mac, ip); // Server initializationserver.begin();}void loop() { // Wait for clientsEthernetClient client = server.available();if (client) { // Parse requestbool emptyLine = true; while (client.connected()) {if (client.available()) {char c = client.read(); // The request is finished when an empty line is receivedif (emptyLine && (c == '\n')) { // Send the responseclient.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 connectionclient.stop(); break;} // The request is finished when a blank line is receivedif (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 por correo
Por favor iniciar sesión para compartir esto webpage por correo.