O Ethernet Shield W5100 possibilita conectar um microcontrolador à Internet. A base da criação de objetos conectados é fazê-los comunicar com o seu entorno através de redes como a rede Wifi.
A comunicação via Ethernet é muito prática quando se deseja conectar um dispositivo ao WiFi utilizando um cabo.
Para uma conexão Wifi sem cabo, opte por um Shield WiFi ou outro tipo de placa.
Material
- Computador
- Arduino UNO
- Cabo USB A Macho/B Macho
- Cabo Ethernet RJ45
- Ethernet Shield W5100
Como funciona o Ethernet Shield W5100
A comunicação utiliza a rede Ethernet que pode se ligar à rede WiFi. Para acessar a placa Arduino sem precisar ligá-la ao roteador da Internet, é preciso criar uma ponte entre as conexões WiFi e Ethernet no computador. Para isso, é necessário:
- Ir para a “Central de Redes e Compartilhamento”
- Ir para “Alterar configurações da placa”.
- Selecionar Ethernet e Wifi /(Internet source) e clicar com o botão direito do mouse.
- Clicar em “Criar ponte”.
No Windows, no terminal de comando, digite “arp -a” para ver os endereços IP utilizados na rede.
O Ethernet Shield W5100 utiliza o Microchip W5100 como controlador Ethernet.
Esquema
O Ethernet Shield W5100 é compatível com os microcontroladores Arduino UNO e Mega. O chip W5100 e o cartão SD utilizam o barramento SPI para comunicar com a placa Arduino. O pino 10 é utilizado para selecionar o controlador Ethernet W5100; o pino 9, como RESET para o W5100; e o pino 4, para selecionar o módulo de cartão SD.
Em resumo, os pinos utilizados são:
- 4 para seleção do cartão SD (SD_CS)
- 9 para dar reset no microchip W5100 (W5100_RST)
- 10 para selecionar o microchip W5100 (W5100_CS)
- Barramento SPI: pinos 11, 12 e 13 numa placa Arduino UNO/Duelmilanove. Pinos 50, 51 e 52 no Arduino Mega.
Código para gestão do Ethernet Shield W5100
Para comunicar na rede, precisamos de um protocolo específico. Este protocolo está integrado em todas as bibliotecas relacionadas com a comunicação WiFi. É preciso:
- conectar o módulo WiFi ou Ethernet à rede;
- definir um servidor server;
- definir um cliente client.
//Libraries #include <Ethernet.h>//https://github.com/CisecoPlc/Arduino-W5100-W5200/tree/master/Ethernet //Parameters String request ; unsigned long refreshCounter = 0; IPAddress ip(192, 168, 1, 179) ; byte mac [6] = {0x54, 0x34, 0x41, 0x30, 0x30, 0x31}; //Objects EthernetServer server(80); 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 1 seconds.")); delay(1000); 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("/dig2on") > 0) { digitalWrite(2, HIGH); } if (request.indexOf("/dig2off") > 0) { digitalWrite(2, LOW); } if (request.indexOf("GET") >= 0) { webpage(client); client.stop(); } } 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.println("<center><p style='color:white;'>"); client.print(F("Page refresh number: ")); client.print(refreshCounter); //current refresh count client.println("</p></center><br>"); client.print(F("<h2 style='color:green;'>Arduino Inputs</h2>")); client.println("<p style='color:white;'>"); client.print(F("<br><br>")); 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>")); client.print(F("<h2 style='color:green;'>Arduino Outputs</h2>")); client.print(F("<p style='color:white;'>")); //digital output 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; delay(1); }
Resultado
Verificamos que o Ethernet Shield W5100 é inicializado corretamente. Ao introduzirmos o endereço IP na barra de endereço do navegador, a página web descrita na função webpage é exibida. Uma vez carregada a página, os valores das entradas analógicas mudam a cada atualização e o estado do pino 2 pode ser modificado por meio dos botões correspondentes.
Aplicações
- Controlar o Arduino com uma interface web
Fontes
- https://www.w3schools.com/html/html_editors.asp
- Tutoriais HTML Mozilla
- https://github.com/CisecoPlc/Arduino-W5100-W5200/tree/master/Ethernet
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie