La conexión de un microcontrolador a internet es posible gracias al uso de un W5100 Ethernet Shield. La base de la creación de objetos conectados es hacer que se comuniquen con su entorno a través de una red como la red WiFi. La comunicación a través de la red Ethernet es muy práctica cuando desea conectar un dispositivo a la red Wifi por cable.
Para una conexión inalámbrica, debes usar un escudo Wifi u otra placa con un chip Wifi incorporado.
Hardware
- Computadora
- ArduinoUNO
- Cable USB A macho / B macho
- Ethernet cable RJ45
- Ethernet Shield W5100
Principio de funcionamiento de un Shield Ethernet W5100
La comunicación utiliza la red ethernet que se puede conectar a la red Wifi. Para poder acceder a la placa Arduino sin tener que conectarla al enrutador de Internet, es necesario crear un puente entre la conexión wifi y la conexión Ethernet en su computadora. Para hacer esto, debes:
- Vaya al Centro de redes y recursos compartidos
- Vaya a «Cambiar la configuración de la tarjeta»
- Seleccione Ethernet y Wifi / (fuente de internet) y haga clic derecho
- Haga clic en «Crear puente»
En Windows, en la terminal de comandos, escriba «arp -a» para ver las direcciones IP utilizadas en la red.
El W5100 Ethernet Shield usa el Microchip W5100 como un controlador Ethernet.
Diagrama
El W5100 Ethernet Shield es compatible con los microcontroladores Arduino UNO y Mega. El chip W5100 y la tarjeta SD usan el bus SPI para comunicarse con la tarjeta Arduino. El pin 10 se usa para seleccionar el controlador de ethernet W5100, el pin 9 como RESET para el W5100 y el pin 4 para seleccionar el módulo de la tarjeta SD.
En resumen, los pines utilizados son:
- 4 para selección de tarjeta SD (SD_CS)
- 9 para restablecer el microchip W5100 (W5100_RST)
- 10 para la selección de microchips W5100 (W5100_CS)
- el bus SPI: pines 11,12,13 en una placa Arduino UNO / Duelmilanove. Pines 50, 51 y 52 para el Mega.
Código para usar un Shield Ethernet W5100
Para comunicarnos en la red, necesitamos usar un protocolo especial. Este protocolo está integrado en todas las bibliotecas relacionadas con la comunicación WiFi:
- El módulo WiFi o Ethernet debe estar conectado a la red
- definir un servidor server
- definir un cliente client
//Libraries #include <Ethernet.h>//https://github.com/CisecoPlc/Arduino-W5100-W5200/tree/master/Ethernet //Parameters String request ; unsigned long refreshCounter = 0; byte mac [6] = {0x54, 0x34, 0x41, 0x30, 0x30, 0x31}; //Objects EthernetServer server(80); IPAddress ip(192, 168, 1, 179); EthernetClient client; void setup() { //Init Serial USB Serial.begin(9600); Serial.println(F("Initialize System")); //Init W5100 Ethernet.begin(mac, ip); while (!Ethernet.begin(mac)) { Serial.println(F("failed. Retrying in 5 seconds.")); delay(5000); Serial.print(F("Starting W5100...")); } pinMode(2, OUTPUT); server.begin(); Serial.println(F("W5100 initialized")); Serial.print(F("IP Address: ")); Serial.println(Ethernet.localIP()); } void loop() { client = server.available(); clientRequest(); handleRequest(); } void clientRequest( ) { /* function clientRequest */ ////Get client request if (!client) { return; } // Wait until the client sends some data while (!client.available()) { delay(1); } request = client.readStringUntil('\r'); // Read the first line of the request Serial.println(request); client.flush(); } void handleRequest( ) { /* function handleRequest */ ////Handle web client request if (request.indexOf('GET') >= 0) { { webpage(client); client.stop(); } } if (request.indexOf("/dig2on") > 0) { { digitalWrite(2, HIGH); } } if (request.indexOf("/dig2off") > 0) { { digitalWrite(2, LOW); } } } void webpage(EthernetClient client) { /* function webpage */ ////Send webpage to client //output HTML data header client.println(F("HTTP/1.1 200 OK")); client.println(F("Content-Type: text/html")); client.println(); //header client.print(F("<!DOCTYPE HTML><html><head><title>AranaCorp</title>")); client.print(F("<meta http-equiv='content-type' content='text/html; charset=UTF-8'>")); //meta-refresh page every x seconds client.print(F("<meta http-equiv='refresh' content='2'>")); client.print(F("</head><body bgcolor='black'><br>")); client.print(F("<hr/><hr>")); client.print(F("<h1 style='color : #3AAA35;'><center> AranaCorp - Arduino Web Controller </center></h1>")); client.print(F("<hr/><hr>")); client.print("<center><p style='color:white;'>"); client.print(F("Page refresh number : ")); client.print(refreshCounter); //current refresh count client.print("</p></center><br>"); client.print(F("<h2 style='color:green;'>Arduino Inputs</h2>")); client.print("<p style='color:white;'>"); client.print("<br><br>"); //output analog input pin for (int i = 0; i < 6; i++) { client.print("<b>Input A"); client.print(i); client.print(" : </b>"); client.print(analogRead(14 + i)); //A0=14, A1=15 ,etc. client.print(F("<br>")); } client.print(F("</p><br>")); //digital output client.print(F("<h2 style='color:green;'>Arduino Outputs</h2>")); client.print(F("<p style='color:white;'>")); client.print(F("<br><br>")); client.print(F("<b>Digital output Pin 2 : </b>")); client.print("<input value=" + String(digitalRead(2)) + " readonly></input>"); client.print(F("<a href='/dig2on'><button>Turn On </button></a>")); client.print(F("<a href='/dig2off'><button>Turn Off </button></a><br />")); client.print(F("</p><br>")); //file end client.print(F("<br></body></html>")); refreshCounter += 1; }
Resultado
Podemos ver que el W5100 Ethernet Shield se inicializa correctamente. Cuando ingresa la dirección IP en la barra de direcciones de su navegador, se muestra la página web descrita en la función de página web.
Una vez que se carga la página, los valores de las entradas analógicas varían con cada actualización y el estado del pin 2 se puede cambiar presionando los botones correspondientes.
Aplicaciones
- Use una interfaz web para controlar su Arduino
Hola , una pregunta conocéis alguna otra shield que no tenga el w5100, que soporte https y ipv6 ???
gracias !!!!
No conozco ningún shield de este tipo. Tal vez los shield Wi-Fi, Arduino Yun o Raspberry Pi.