Neste tutorial, vamos ver como criar um servidor web com um arduino UNO e Ethernet Shield para controlar um LED (ou qualquer outro elemento) a partir de qualquer parte do mundo através da Internet. Como pode imaginar, para este projeto vão ser necessários alguns conhecimentos básicos sobre linguagem HTML e configuração de redes, mas não se preocupe porque vou-lhe explicar passo a passo.
Componentes necessários
Para o desenvolvimento deste tutorial, vamos precisar dos seguintes componentes:
- 1x Arduino UNO
- 1x Ethernet Shield
- 1x LED de qualquer color
- 1x Resistência de 100 Ohms ou superior
Montagem e ligações
Esta fotografia mostra como se deve juntar o Arduino UNO e o ethernet shield, como pode ver o conector USB do Arduino e o conector ethernet ficam um em cima do outro. Tem-se que encaixar os pinos suavemente sem força-los nem dobrá-los, uma vez juntos, já podemos passa a ligar o LED e a resistência.
Vamos usar o pino digital 8 como saída para alimentar o LED, ligamos a resistência e o LED deste modo:
Agora já podemos ligar o cabo USB ao Arduino para alimentá-lo e progamá-lo, e também podemos conectar um cabo ethernet entre o shield e o router.
Pesquisar uma IP livre para o servidor web
Quando tiver ligado tudo, vamos pesquisar uma IP livre para o servidor web, para isso vamos à configuração do adaptador de rede do nosso equipamento:
Em vermelho, vemos a IP que está a ocupar atualmente o nosso equipamento, em verde vê-se a máscara de subrede, e em azul a porta do link predeterminada o IP do router, estas IPs não podemos usar já que não estão livres, por isso usaremos por exemplo, 192.168.1.177, como vê, apenas alteramos o último número, podemos usar qualquer valor entre 1 e 254 sempre que esse número não esteja em uso.
Agora que já localizamos uma IP livre vamos programar o Arduino.
Sketch de ensaio
O código está comentado passo a passo para que seja fácil de entender:
#include <SPI.h> #include <Ethernet.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192,168,1,177); EthernetServer server(80); IPAddress subnet(255, 255, 255, 0); int led = 8; String estado = "OFF"; void setup() { Serial.begin(9600); Ethernet.begin(mac, ip); server.begin(); Serial.print("servidor iniciado: "); Serial.println(Ethernet.localIP()); pinMode(led,OUTPUT); digitalWrite(led,LOW); } void loop() { EthernetClient client = server.available(); if (client) { Serial.println("new client"); boolean currentLineIsBlank = true; String cadena=""; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); cadena.concat(c); int posicion=cadena.indexOf("LED="); if(cadena.substring(posicion)=="LED=ON") { digitalWrite(led,HIGH); estado="ON"; } if(cadena.substring(posicion)=="LED=OFF") { digitalWrite(led,LOW); estado="OFF"; } if (c == '\n' && currentLineIsBlank) { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println(""); client.println(""); client.println(""); client.println(""); client.println(""); client.println("ArduinoPortugal.pt | Arduino e Ethernet Shield"); client.println(""); client.println(""); client.println(""); client.println(" "); client.println("
client.println(““);
client.println(““);
client.println(“”);
client.println(“Estado do LED = “);
client.print(estado);
client.println(“
“);
client.println(“
"); client.println(""); break; } if (c == '\n') { currentLineIsBlank = true; } else if (c != '\r') { currentLineIsBlank = false; } } } delay(1); client.stop(); } }
Todos os produtos utilizados neste artigo podem ser encontrados na Loja de Eletrónica e Robótica – ElectroFun.
Gostaram deste artigo? Deixem o vosso comentário no formulário a baixo e partilhem com os vossos amigos.
Não se esqueçam de fazer like na nossa Página no Facebook.
Podem ainda colocar as vossas dúvidas no nosso Forum da Comunidade Arduino em Portugal ou no nosso Grupo no Facebook Arduino Portugal – Qual o teu projeto?