- Descrição: O LDR (Light Dependent Resistor ou Resistor Dependente de…
Como usar com Arduino – Ethernet Shield W5100 (Web server)
– Descrição:
O Ethernet Shield W5100 é uma placa que permite ao Arduino se conectar a uma rede local ou a internet. O mesmo possui o chip Wiznet W5100 e suporta até quatro conexões de socket simultaneamente. O shield possui um slot para cartão de memória (micro SD), onde é possível armazenar arquivos que podem ser enviados pela rede local / internet, e possui também bibliotecas para serem utilizadas pelo Arduino.
Devido à necessidade de ligar o Arduino a rede mundial de computadores (internet), o Ethernet Shield W5100 foi desenvolvido. Muitos projetos desenvolvidos com Arduino necessitam de acesso / controle de forma remota e ao utilizar o Ethernet Shield W5100 essa necessidade é suprida de forma simples e prática, pois basta acoplar o shield em cima do Arduino, conectar o shield ao roteador / modem através de um cabo de rede RJ45, inserir o código fonte correto no Arduino e usufruir dos benefícios.
Ao inserir o Arduino na internet, você pode acessá-lo de qualquer local do mundo, seja com um computador, smartphone ou tablet e obter informações ou solicitar que ações sejam executadas. Para projetos que envolvam integração entre Arduino e aplicações Android ou iOS, o Ethernet Shield W5100 se torna um membro importante do projeto. Por ser um shield, mesmo acoplado na parte de cima do Arduino, você ainda poderá utilizar a maior parte das portas digitais e analógicas da placa.
– Especificações e características:
– Controlador: W5100
– Tensão de operação: 3,3V – 5VDC
– Velocidade de conexão: 10 / 100Mb
– Protocolos Suportados: TCP / IP, UDP, ICMP, ARP IPv4, IGMP, PPPoE, Ethernet
– Suporte (Full-duplex e half-duplex)
– Suporte a conexão ADSL (PPPoE com PAP / CHAP no modo de autenticação)
– Suporte a 4 conexões independentes simultaneamente
– Memória Interna: 16Kb para buffers de Tx / Rx
– Conexão com o Arduino através de SPI
– Datasheet:
– Aplicações:
Projetos com Arduino em que seja necessário conectar a placa a internet para desenvolvimento de projetos que necessitam controlar algo remotamente ou obter informações de outros dispositivos para exibir em tempo real ou armazenar em uma base de dados.
– Proposta da prática:
Utilizar o Ethernet Shield W5100 em conjunto com o Arduino para fazer uma conexão a um webserver e acessar uma página web que possui um botão para ligar / desligar um LED. O estado atual deste LED também será exibido na página.
– Lista dos itens necessários:
01 – Arduino com Cabo USB
01 – Ethernet Shield W5100
01 – LED Difuso 5mm Vermelho
01 – Resistor de 150Ω
01 – Protoboard
02 – Cabos Jumper macho-macho
01 – Cabo de rede RJ45
– Esquema de ligação da prática:
– Tutorial de instalação e configuração do ambiente de programação do Arduino:
Arduino – Instalação e Configuração da IDE no Windows
– Código:
1) O código está configurado para utilizar IP estático, portanto, você terá que alterar algumas informações.
2) No “byte ip[]”, coloque um endereço de IP livre na sua rede, no “byte gateway[]”, coloque o endereço de gateway na sua rede e no “byte subnet[]”, coloque as informações de máscara de sub-rede na sua rede. Se você não sabe como ter acesso a essas informações no Windows, sugiro que leia a postagem Descobrindo a faixa de IP do seu roteador e em seguida retorne para continuar.
3) Conecte o Arduino ao computador, conecte uma ponta do cabo de rede RJ45 ao Ethernet Shield e a outra ponta conecte ao roteador.
4) Após o arquivo ser carregado no Arduino, abra o navegador no seu computador, smartphone ou tablet, digite o endereço de IP (byte ip[]) que você inseriu no código e a página web será aberta.
5) Alterne entre os comandos para acender e apagar o LED.
6) Alguns pinos do Arduino serão de uso exclusivo do Ethernet Shield W5100. No caso do Arduino Uno, os pinos digitais utilizados pelo shield são 10, 11, 12 e 13, e no Arduino Mega os pinos 50, 51, 52 e 53. Além disso, em ambas as placas o pino digital 4 também é utilizado para selecionar o uso do micro cartão de memória. Portanto, estes pinos não devem ser utilizados como entrada ou saída no seu projeto enquanto estiver usando o W5100.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
#include <SPI.h> //INCLUSÃO DE BIBLIOTECA #include <Ethernet.h> //INCLUSÃO DE BIBLIOTECA byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //ATRIBUIÇÃO DE ENDEREÇO MAC AO ETHERNET SHIELD W5100 byte ip[] = { 192, 168, 0, 175 }; //COLOQUE UMA FAIXA DE IP DISPONÍVEL DO SEU ROTEADOR. EX: 192.168.1.110 **** ISSO VARIA, NO MEU CASO É: 192.168.0.175 byte gateway[] = {192, 168, 0, 1}; //GATEWAY DE CONEXÃO (ALTERE PARA O GATEWAY DO SEU ROTEADOR) byte subnet[] = {255, 255, 255, 0}; //MASCARA DE REDE (ALTERE PARA A SUA MÁSCARA DE REDE) EthernetServer server(80); //PORTA EM QUE A CONEXÃO SERÁ FEITA const int ledPin = 9; //PINO DIGITAL UTILIZADO PELO LED String readString = String(30); //VARIÁVEL PARA BUSCAR DADOS NO ENDEREÇO (URL) int status = 0; //DECLARAÇÃO DE VARIÁVEL DO TIPO INTEIRA(SERÁ RESPONSÁVEL POR VERIFICAR O STATUS ATUAL DO LED) void setup(){ Ethernet.begin(mac, ip, gateway, subnet); //PASSA OS PARÂMETROS PARA A FUNÇÃO QUE VAI FAZER A CONEXÃO COM A REDE server.begin(); //INICIA O SERVIDOR PARA RECEBER DADOS NA PORTA 80 pinMode(ledPin, OUTPUT); //DEFINE O PINO COMO SAÍDA digitalWrite(ledPin, LOW); //LED INICIA DESLIGADO } void loop(){ EthernetClient client = server.available(); //CRIA UMA CONEXÃO COM O CLIENTE if (client) { // SE EXISTE CLIENTE, FAZ while (client.connected()) {//ENQUANTO EXISTIR CLIENTE CONECTADO, FAZ if (client.available()) { //SE O CLIENTE ESTÁ HABILITADO, FAZ char c = client.read(); //LÊ CARACTERE A CARACTERE DA REQUISIÇÃO HTTP if (readString.length() < 100) //SE O ARRAY FOR MENOR QUE 100, FAZ { readString += c; // "readstring" VAI RECEBER OS CARACTERES LIDO } if (c == '\n') { //SE ENCONTRAR "\n" É O FINAL DO CABEÇALHO DA REQUISIÇÃO HTTP if (readString.indexOf("?") <0){ //SE ENCONTRAR O CARACTER "?", FAZ } else //SENÃO,FAZ if(readString.indexOf("ledParam=1") >0) //SE ENCONTRAR O PARÂMETRO "ledParam=1", FAZ { digitalWrite(ledPin, HIGH); //LIGA O LED status = 1; //VARIÁVEL RECEBE VALOR 1(SIGNIFICA QUE O LED ESTÁ LIGADO) }else{ //SENÃO, FAZ digitalWrite(ledPin, LOW); //DESLIGA O LED status = 0; //VARIÁVEL RECEBE VALOR 0(SIGNIFICA QUE O LED ESTÁ DESLIGADO) } client.println("HTTP/1.1 200 OK"); //ESCREVE PARA O CLIENTE A VERSÃO DO HTTP client.println("Content-Type: text/html"); //ESCREVE PARA O CLIENTE O TIPO DE CONTEÚDO(texto/html) client.println(""); client.println("<!DOCTYPE HTML>"); //INFORMA AO NAVEGADOR A ESPECIFICAÇÃO DO HTML client.println("<html>"); //ABRE A TAG "html" client.println("<head>"); //ABRE A TAG "head" client.println("<link rel='icon' type='image/png' href='https://blogmasterwalkershop.com.br/arquivos/artigos/sub_wifi/logo_mws.png'/>"); //DEFINIÇÃO DO ICONE DA PÁGINA client.println("<title>MasterWalker Shop - Controle de Led via Web server</title>"); //ESCREVE O TEXTO NA PÁGINA client.println("</head>"); //FECHA A TAG "head" client.println("<body style=background-color:#ADD8E6>"); //DEFINE A COR DE FUNDO DA PÁGINA client.println("<center><font color='blue'><h1>MASTERWALKER SHOP</font></center></h1>"); //ESCREVE "MASTERWALKER SHOP" EM COR AZUL NA PÁGINA client.println("<h1><center>CONTROLE DE LED</center></h1>"); //ESCREVE "CONTROLE DE LED" NA PÁGINA if (status == 1){ //SE VARIÁVEL FOR IGUAL A 1, FAZ //A LINHA ABAIXO CRIA UM FORMULÁRIO CONTENDO UMA ENTRADA INVISÍVEL(hidden) COM O PARÂMETRO DA URL E CRIA UM BOTÃO APAGAR (CASO O LED ESTEJA LIGADO) client.println("<center><form method=get name=LED><input type=hidden name=ledParam value=0 /><input type=submit value=APAGAR></form></center>"); }else{ //SENÃO, FAZ //A LINHA ABAIXO CRIA UM FORMULÁRIO CONTENDO UMA ENTRADA INVISÍVEL(hidden) COM O PARÂMETRO DA URL E CRIA UM BOTÃO ACENDER (CASO O LED ESTEJA DESLIGADO) client.println("<center><form method=get name=LED><input type=hidden name=ledParam value=1 /><input type=submit value=ACENDER></form></center>"); } client.println("<center><font size='5'>Status atual do LED: </center>"); //ESCREVE "Status atual do LED:" NA PÁGINA if (status == 1){ //SE VARIÁVEL FOR IGUAL A 1, FAZ client.println("<center><font color='green' size='5'>LIGADO</center>"); //ESCREVE "LIGADO" EM COR VERDE NA PÁGINA }else{ //SENÃO, FAZ client.println("<center><font color='red' size='5'>DESLIGADO</center>"); //ESCREVE "DESLIGADO" EM COR VERMELHA NA PÁGINA } client.println("<hr/>"); //TAG HTML QUE CRIA UMA LINHA HORIZONTAL NA PÁGINA client.println("<hr/>"); //TAG HTML QUE CRIA UMA LINHA HORIZONTAL NA PÁGINA client.println("</body>"); //FECHA A TAG "body" client.println("</html>"); //FECHA A TAG "html" readString=""; //A VARIÁVEL É REINICIALIZADA client.stop(); //FINALIZA A REQUISIÇÃO HTTP E DESCONECTA O CLIENTE } } } } } |
– Resultado final:
Gostou desta prática? Então deixa seu comentário, dúvida ou sugestão aí embaixo!
Loja online: https://www.masterwalkershop.com.br
Fan page no Facebook: https://www.facebook.com/masterwalkershop
Nos ajude a espalhar conhecimento clicando no botão de compartilhar (f Like) que está mais abaixo.
Obrigado e até a próxima!
Seu feedback é muito importante! Que tal dar uma nota para esta postagem?! Faça sua avaliação aqui embaixo.
Postagem anterior: Como usar com Arduino – Sensor Hall Detector de Campo Magnético U18 US1881
Próxima postagem: O que é Node-RED? Conhecendo e instalando
Boa noite, uma duvida eu conseguiria usar um módulo gsm pra acessar a internet e um modulo ethernet pra distribuir essa mesma internet?
Obrigado Euler, pelo program. Muito bom. Aproveitando, gostaria de tirar uma dúvida. Estou utilizando o shield ethernet e gostaria de criar um gráfico na tela e também ver os valores de sensores mudando constantemente sem ter que ficar pressionando o botão de atualizar. É possível ver isso? Você teria alguma dica de aonde posso consultar esse material?
Mais uma vez obrigado
Ola Euler, gostaria de inciar informações de sensores para o html. Como eu poderia incluir neste código?
Bom dia, Euler, ótimo blog este seu, de fato muito informativo.
Tenho uma dúvida, sei que é possível usar este shield ethernet para que o arduino acesse um banco de dados e preencha-o com dados coletados por algum sensor conectado ao mesmo, a minha dúvida é: seria possível fazer a mesma coisa usando um shield wifi, por exemplo? E ainda nesse exemplo do banco de dados, seria possível simultaneamente guardar as informações coletadas pelo sensor num cartão sd inserido no shield? Para ter os dados como backup e para que caso aconteça da conexão cair os dados continuem sendo salvos no cartão?
Obrigado pela atenção.
Olá Matheus.
Agradeço pelo comentário e reconhecimento!
Sim, é possível implementar conforme você explicou.
Obrigado pela atenção, Euler, solucionou completamente a dúvida. Estou tendo que fazer uns projetos de automação de captura de dados e seu blog tem sido bastante elucidativo.
Bom dia.
Neste modulo com W5100 consigo adicionar na rotina interna via plataforma do Arduino uma subrotina de ping (com entradas de IP,Gateway e Mascara) sem precisar utilizar um ESP32 ou ESP8266 ?? Obrigado por responder
Olá Olgorofi.
Agradeço pelo comentário!
Não temos nenhuma postagem neste sentido, mas certamente é possível.
Boa tarde Euler, Parabéns pelo excelente trabalho !
Vc tem algum tutorial de comunicação entre 2 arduinos via tcp/ip, no qual um sera somente as entradas, enviando string texto , e o outro recebendo.
Obrigado
Olá Fabio.
Agradeço pelo comentário!
Infelizmente não produzi nada semelhante.
Show, funcionou correto.
Tentei modificar para aumentar a quantidade de LEDs mas estou cometendo algum erro pode me ajudar na correção, aqui está o código: https://pastebin.com/XJArywmR
Olá Nilton.
Agradeço pelo comentário!
Basicamente o que você precisa fazer é utilizar outros valores para o ledParam referente a este novo LED que adicionou. Para o LED que já estava no código é utilizado os valores de 1 e 0 para o ledParam, contudo, para o novo LED você deve usar, por exemplo, os valores 2 e 3, sendo um para sinalizar LED ligado e outro para sinalizar LED desligado.
Dentro do laço if else você deverá fazer a tratativa no else com um novo if, pois você está trabalhando com 4 valores para o ledParam e não dois. Na hora de passar o parâmetro via URL, você deverá digitar os respectivos valores,
Euler, muito agradecido pela ajuda, valeu.
Está funcionando, mas ao carregar o código, a lâmpada fica ligada enquanto que na página a informação está ao contrário.
Ao clicar no botão [ACENDER] – apaga a lâmpada;
http://192.168.1.148/?ledParam=1
Ao clicar no botão [APAGAR] – acende a lâmpada;
http://192.168.1.148/?ledParam=0
O processamento da lâmpada está ok, mas ficou o contrário do módulo de relé.
Uso o Módulo Relé 16 Canais 12v Com Optoacoplador Para Arduíno
Mantenha o mesmo esquema de ligação que está usando com o módulo relé, mas no código onde for HIGH mude para LOW e onde for LOW mude para HIGH.
Em seguida carregue o código no Arduino e veja se resolve.
Bom dia Euler,
Testando seu código, não passa desta linha abaixo ao clicar verificar:
#include
E mostra o erro:
stray ‘\357’ in program
No final da compilação, está informando:
Foram encontradas múltiplas bibliotecas para “SPI.h”
Usado: C:\Program
Foram encontradas múltiplas bibliotecas para “Ethernet.h”
Usado: C:\Program
exit status 1
stray ‘\357’ in program
Qual a solução ???
Olá Nilton.
Agradeço pelo comentário!
A solução é você excluir as outras bibliotecas SPI e Ethernet que estiverem a mais nas pastas de instalação de bibliotecas do IDE do Arduino.
Hola buen dia funciono al principio pero después de hacer cambios al color de pagina apague el led y encendi y se desconecto, crei que era error de mi codigo pero volvi a cargar el original con los cambios de IP y nada ya no se conecta.
Hola Christian
Gracias por el comentario!
Verifique que el Ethernet Shield W5100 esté asentado correctamente en el Arduino y que los contactos (soldaduras) del conector RJ45 no estén en el conector USB de la tarjeta Arduino. También verifique que el cable RJ45 no esté dañado o mal asentado.
Euler Oliveria, obrigado por compartilhar seu conhecimento conosco.
Eu consegui fazer algumas alterações no código para funcionar do jeito que eu precisava, mas estou com uma duvida: Toda vez que a placa é desconectada da fonte e re-ligada o pino 9 manda o comando para acionar o relé, e preciso apertar o RESET na Ethernet Shield para ela reconectar na rede. (Estou utilizando o Mega 2560 e um modulo rele 16ch 5v).
Olá Renan.
Agradeço pelo comentário!
Provavelmente você deve estar utilizando o contato normalmente aberto do módulo relé e está enviando LOW assim que o código começa a ser executado, desta forma, o módulo irá ligar, pois este contato é acionado com sinal baixo (LOW). Tente alterar para assim que o sistema iniciar, o código enviar HIGH, desta forma o módulo irá iniciar desligado.
oi amigo pode me ajudar na conexao como arduino mega 2560?
Boa noite Euler!
É possível ter um sistema arduino com um botão para acionar outro arduino com uma sirene ou luz ! Sendo essa comunicação entre eles feita por rádios wireless a um distância de 1000 metros ?
Olá Marcelo.
Sim, é possível.
Dê uma olhada nesta publicação:
https://blogmasterwalkershop.com.br/arduino/como-usar-com-arduino-modulo-transceptor-wireless-nrf24l01-2-4ghz-com-antena/
Boa tarde amigo,
Gostaria de saber como acessar o web server de uma rede externa! Conectado na mesma rede que o Arduino não tive problemas, mas gostaria de atuar externamente a essa rede. Tem como?
Olá Raphael.
Pesquise sobre NAT, pois é ele que vai permitir acessar seu W5100 através da rede externa.
olá boa noite como faço para conectar com internet mundial no caso estou desenvolvendo meu projeto para formação de analise e desenvolvimento,
o exemplo seria um app de estacionamento, como faço pra deixa ele online ter login para cada usuário peço por gentileza que me ajuda?
Olá Jefferson.
Recomendo que leia sobre NAT (Network address translation), pois ele vai possibilitar implementar o acesso externo ao seu Arduino.
Para construção da página WEB, recomendo que estude HTML, CSS, JavaScript, PHP e Banco de Dados SQL.
Olá Euler, estou fazer um Projeto utilizando o Ethernet Shield e preciso de um botão para fazer uma sequencia de movimentos no meu braço robótico, mas estou encontrando bastante dificuldade. Você já fez a conexão, para controlar servo motores?
Olá Tainara.
Para controle de servo motor não cheguei a fazer nenhum projeto.
Recomendo que estude um pouco sobre HTML, CSS e Ajax para que possa implementar na página as funcionalidades que precisa.
como coloco mais botoes na mesma pagina?
Olá Junior.
Recomendo que leia os comentários em cada linha do código disponibilizado para esta prática. Além disso, recomendo também que estude um pouco sobre HTML e CSS para que possa implementar novos botões e funcionalidades na página.
Olá,
Você saberia informar como fazer para “ao clicar num botão, além do efeito deste botão ser realizado, um outro botão é tbm (automaticamente) acionado”? (desejavelmente, melhor ainda seria se houvesse uma temporização, ou seja, o outro botão só ser acionado após uns 3s, por exemplo).
Olá Wagner.
Você fala um outro botão na mesma página?
Amigo , parabéns. Como faço para acionar mais portas?