No post anterior nós mostramos a configuração básica do Arduino Ethernet Shield W5100 com a IDE Arduino, habilitando a placa e fornecendo um endereço IP para acesso através da rede.
Neste post, vamos mostrar como enviar dados do Arduino para um browser utilizando esse shield, montando um circuito composto por 2 botões e 2 leds, mais a placa ethernet.
Preparação do ethernet shield com Arduino
Para executar os testes você vai precisar do seguinte material:
- Leds (sugestão: 1 led vermelho e 1 verde)
- Push button (2 unidades)
- 2 resistores de 330 ohms
- jumpers para conexão
Encaixa o ethernet shield no Arduino e monte o circuito abaixo, observando a polaridade dos leds. Os botões estão conectados nas portas digitais 6 e 7, e os leds nas portas 8 e 9:
Agora carregue o seguinte programa no Arduino, que tem como base o programa de exemplo do Webserver que acompanha a IDE do Arduino.
Nas linhas 14, 15 e 16 coloque as configurações de endereço IP de acordo com a sua rede, ok? Esses valores podem variar, então na dúvida verifique a faixa de ip da sua rede local.
// Programa: Webserver com aviso de acionamento de botoes // Autor: Arduino e Cia // Baseado no programa exemplo Webserver, de David Mellis e Tom Igoe #include <SPI.h> #include <Ethernet.h> // A linha abaixo permite que voce defina o endereço fisico (MAC ADDRESS) // do ethernet shield byte mac[] = { 0xAB, 0xCD, 0x12, 0x34, 0xFF, 0xCA }; // Os valores abaixo definem o endereço IP, gateway e máscara. // Configure de acordo com a sua rede. IPAddress ip(192,168,0,100); //Define o endereço IP IPAddress gateway(192,168,0,1); //Define o gateway IPAddress subnet(255, 255, 255, 0); //Define a máscara de rede // Inicializa a biblioteca da placa ethernet com as // configurações de IP fornecidas EthernetServer server(80); int botao1 = 6; //Botao que aciona o led vermelho int botao2 = 7; //Botao que aciona o led verde int pinoled=8; //Pino ligado ao led vermelho int pinoled2=9; //Pino ligado ao led verde int leitura = 0; //Armazena o valor de leitura do botao1 int leitura2 = 0; //Armazena o valor de leitura do botao2 char mensagem[20]; //Mensagem a ser apresentada para o botao1 char mensagem2[20]; //Mensagem a ser apresentada para o botao2 void setup() { pinMode(pinoled, OUTPUT); //Led pinMode(pinoled2, OUTPUT); //Led pinMode(botao1, INPUT); digitalWrite(botao1, HIGH); pinMode(botao2, INPUT); digitalWrite(botao2, HIGH); //Inicializa a conexao ethernet e o servidor web na porta 80 Ethernet.begin(mac, ip, gateway, subnet); server.begin(); Serial.print("server is at "); Serial.println(Ethernet.localIP()); } void loop() { //Verifica o status do Botao1 e imprime mensagem no browser leitura=digitalRead(botao1); if (leitura == 0) { digitalWrite(pinoled,1); char mensagem[] = "Botao 1 acionado !!!"; char mensagem2[] = "Aguardando..."; apresentadados(mensagem,mensagem2); delay(5000); //Mantem o led aceso por 5 segundos //Imprime mensagem padrao, aguardando novo acionamento apresentadados("Aguardando...", "Aguardando..."); digitalWrite(pinoled,0); } //Verifica o status do Botao2 e imprime mensagem no browser leitura2=digitalRead(botao2); if (leitura2 == 0) { digitalWrite(pinoled2,1); char mensagem[] = "Aguardando..."; char mensagem2[] = "Botao 2 acionado !!!"; apresentadados(mensagem,mensagem2); delay(5000); //Mantem o led aceso por 5 segundos //Imprime mensagem padrao, aguardando novo acionamento apresentadados("Aguardando...", "Aguardando..."); digitalWrite(pinoled2,0); } } // Rotina que recebe os valores de Mensagem e Mensagem2, // imprimindo o resultado no browser void apresentadados(char msg[], char msg2[]) { // listen for incoming clients EthernetClient client = server.available(); if (client) { Serial.println("new client"); // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); // if you've gotten to the end of the line (received a newline // character) and the line is blank, the http request has ended, // so you can send a reply if (c == '\n' && currentLineIsBlank) { // send a standard http response header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); // the connection will be closed after completion of // the response client.println("Connection: close"); // refresh the page automatically every 5 sec client.println("Refresh: 0"); client.println(); client.println("<!DOCTYPE HTML>"); client.println("<html>"); // output the value of each analog input pin client.print("Estado Botao 1 : "); client.print(msg); client.println("<br />"); client.print("Estado Botao 2 : "); client.print(msg2); client.println("<br />"); client.println("</html>"); break; } if (c == '\n') { // you're starting a new line currentLineIsBlank = true; } else if (c != '\r') { // you've gotten a character on the current line currentLineIsBlank = false; } } } // give the web browser time to receive the data delay(1); // close the connection: client.stop(); Serial.println("client disconnected"); } }
Acessando o Arduino pelo browser
Para testar o programa, entre no browser (testei com o Firefox), e digite o endereço da placa de rede que você configurou no programa, e pressione ENTER.
Nesse momento o browser irá acessar o servidor Web interno da placa, e aguardará o pressionamento de um dos botões:
Pressione um dos botões do circuito e o led correspondente será aceso, indicando que o botão foi acionado. Ao mesmo tempo, será exibida na tela a mensagem abaixo, de acordo com o botão pressionado:
O led permanecerá aceso por 5 segundos, e depois disso o browser exibirá a mensagem de “Aguardando…” para os 2 botões, sinalizando a espera de um novo sinal:
Gostou deste post do Arduino com ethernet shield W5100? Confira outros posts de IoT aqui mesmo no Arduino e Cia!