Nós já utilizamos o Ethernet Shield W5100 para monitorar o estado de sensores e enviar os dados para uma página na internet. Isso foi feito no artigo anterior: “Ethernet Shield W5100 com Arduino“.
No artigo de hoje vamos complementar a aplicação anterior com a possibilidade de enviar comandos por meio da página na internet ao Arduino, ou seja, vamos enviar comandos para que o Arduino possa acionar ou controlar uma carga externa.
O Ethernet Shield W5100 foi apresentado em artigo anterior, e nessa segunda parte vamos expandir a última aplicação. O Ethernet Shield permite disponibilizar online dados de sensores e também enviar sinais de comando de uma página na internet para controlar os I/Os e ações do Arduino.
A biblioteca Ethernet da IDE oferece todos os recursos necessários para que dados lidos com o Arduino possam ser acessados online e também para fazer o caminho inverso.
A biblioteca trabalha com a arquitetura cliente-servidor. Nessa arquitetura, que você provavelmente conhece, um servidor(ou host) fornece serviços e recursos que são compartilhados entre vários clientes. Os clientes não compartilham recursos/serviços, mas podem enviar requisições ao servidor para ter acesso aos recursos disponibilizados por ele.
O W5100 pode ser configurado como cliente ou como servidor. Em geral, você vai ver os nomes em inglês, Web Client e Web Server. Como Web Server, o Ethernet Shield geralmente é usado para armazenar algum recurso e compartilhá-lo na web, como por exemplo, uma página de internet apresentando dados de sensores em tempo real. Essa é uma aplicação típica do Shield como Web Server.
No entanto, nem sempre é interessante armazenar a página web no próprio Ethernet Shield. Pode ser que você queira enviar os dados para um outro servidor, mais robusto e com disponibilidade garantida(um serviço de hospedagem, por exemplo). Nesse caso, é necessário configurar o W5100 como Web Client e fazer a programação correta para que ele envia requisições HTTP(GET, POST, PUT, DELETE, etc).
Nesse artigo, vamos manter a configuração como Web Server do artigo anterior, ou seja, a página que usaremos para ler comandos do usuário e controlar os I/Os do arduino está armazenada no próprio Ethernet Shield. No futuro, um novo post utilizando a configuração Web Client será feito, inclusive com alguns detalhes sobre como fazer uma página web em PHP.
A montagem de Hardware com o Ethernet Shield não tem segredo. Você precisa apenas encaixar cuidadosamente o Shield no Arduino. Para exemplificar nossa aplicação, vamos ligar a saída 4 do Arduino/Shield a um módulo relé, que por sua vez aciona uma luminária LED. A ideia é enviar comandos por meio de um botão numa página na internet para acender e desligar a luminária.
Materiais necessários para o projeto Controle de Relé Via Ethernet
Se você ainda não sabe como usar os módulos relé, leia o artigo “Módulo relé para automação residencial“
O circuito como um todo é mostrado na figura abaixo:
Do ponto de vista de software, é preciso determinar o endereço IP e MAC a serem atribuídos ao seu Ethernet Shield. O W5100 não possui um endereço MAC de fábrica como acontece com seu notebook ou PC. Alguns modelos vêm com um endereço MAC indicado em um stick na parte de trás da placa. Em geral, você deve determinar um endereço para seu Ethernet Shield. Mais informações sobre essa questão podem ser encontradas aqui. No nosso projeto, usamos o endereço padrão do exemplo “WebServer” da biblioteca Ethernet.
Acesse na sua IDE: File -> Examples -> Ethernet -> WebServer. O código que você verá é o código base usado por quase todas aplicações e projetos disponíveis na internet para disponibilizar dados de sensores online.
Para determinar o endereço IP do Shield, encontre o IP de seu PC(com ipconfig /all no windows ou ifconfig -a no terminal do linux) e altere o último número. No nosso projeto, o endereço IP foi obtido com o ifconfig -a, que exibiu no terminal linux a seguinte mensagem:
O IP está listado ao lado de inet, e no caso é: 192.168.25.119. Alteramos o IP para 192.168.25.100 e setamos dessa forma no código abaixo:
#include <Ethernet.h> #include <SPI.h> // Complete com as informacoes da sua rede byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 25, 100); int saidaSensor = 4; // Inicializa o servidor Ethernet com o IP e a porta 84 EthernetServer server(84); String readString; void setup() { // Comeca a conexao com o servidor Ethernet Ethernet.begin(mac, ip); server.begin(); pinMode(saidaSensor, OUTPUT); Serial.begin(9600); delay(1000); } void loop() { // listen for incoming clients EthernetClient client = server.available(); if (client) { Serial.println("Got a client"); while (client.connected()) { if (client.available()) { char c = client.read(); //read char by char HTTP request if (readString.length() < 100) { //store characters to string readString += c; } if (c == '\n') { //Imprimne a string lida na serial. Pode comentar se quiser Serial.println("readString: "); Serial.println(readString); client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); client.println("<HTML>"); client.println("<HEAD>"); client.println("<TITLE>Acione a sua luminaria pela net</TITLE>"); client.println("</HEAD>"); client.println("<BODY>"); client.println("<H1>Acione os pinos do Arduino por essa pagina</H1>"); client.println("<H2>Exemplo com pino 4</H2>"); client.println("<FORM ACTION=\"http://192.168.25.100:84\"method=get >"); client.println("<a href=\"/?liga\">LIGA</a>"); client.println("<a href=\"/?desliga\">DESLIGA</a>"); client.println("</FORM>"); client.println("<BR>"); client.println("</BODY>"); client.println("</HTML>"); delay(1); client.stop(); if (readString.indexOf("liga") > 0) { digitalWrite(4, HIGH); Serial.println("Led On"); } if (readString.indexOf("desliga") > 0) { digitalWrite(4, LOW); Serial.println("Led Off"); } //Limpa a String readString = ""; } } } } }
Com o código acima e com o Ethernet Shield conectado ao seu roteador, ao digitar o endereço de IP atribuído ao W5100 no seu navegador, a seguinte página será apresentada:
Essa página de interface possui dois links, um com nome “liga”, e outro com nome “desliga”. Para acionar o pino 4, e consequentemente chavear o relé, basta clicar em um dos dois.
Algumas mensagens de log são enviadas para a porta serial e podem ser úteis para debugar qualquer problema caso você queira editar o código HTML.
Por falar em código HTML, o dessa página é bem simples e rústico, apenas um título, um subtítulo e as duas opções para ligar ou desligar o relé. Uma parte interessante para dar continuidade a esse trabalho é fazer uma página HTML mais elaborada. Lembrando que o host é o próprio Ethernet Shield e portanto não há os mesmos recursos disponíveis que você teria em um PC dedicado.
Nós recomendamos as seguintes referências para experimentar códigos diferentes para a página HTML no Arduino/Ethernet Shield:
Para quem quiser se aventurar mais a fundo no desenvolvimento HTML, CSS e JavaScript, todas linguagens para desenvolvimento web, recomendamos os seguintes cursos:
Caso tenha alguma dúvida ou questão, deixe um comentário que iremos responder assim que pudermos. Não deixe de conferir os demais posts do blog indicados e também o material sobre páginas HTML e desenvolvimento web. Acompanhe o blog pois no futuro próximo uma nova aplicação com W5100 será lançada, mas dessa vez configurado como Web Client e conversando com uma página armazenada num servidor externo. Até a próxima!
Conheça a Metodologia Eletrogate e ofereça aulas de robótica em sua escola!
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!