Com o Ethernet Shield, é possível conectar o Arduino a uma rede ethernet e montar projetos que envolvam o envio ou recebimento de informações via rede ou internet. O dispositivo, juntamente com a biblioteca de controle, permite o projeto de aplicações para rede de forma fácil. Não é necessário se preocupar com os esquemas complicados de sinalização em redes ethernet já que todo o controle e conexão são feitos por rotinas da biblioteca. Após estabelecida a conexão, basta ler ou escrever dados através dela, de forma semelhante à uma conexão serial convencional.

Segue um exemplo de um projeto para a disponibilização de uma página web que permite ligar ou desligar uma porta digital do Arduino através da rede local ou da internet. Em uma aplicação prática, o projeto poderia ser utilizado para controlar uma lâmpada, servindo como uma boa aplicação “Hello World” de automação residencial com Arduino. Aqui, a ideia é se concentrar no projeto de software necessário para tal aplicação. Por isso, vamos considerar a ligação de um led à porta do Arduino e mostrar uma das formas mais caras de acender um led que podem ser propostas.

Neste projeto, foi utilizado o Ethernet Shield baseado no chip Wiznet W5100. Esse chip provê toda a pilha TCP/IP de forma transparente, facilitando o projeto, já que não é necessário se preocupar com os esquemas de sinalização e controles do TCP/IP. Vale lembrar que existem outros shields ethernet, mais simples e mais baratos, que utilizam chips que exigem que os controles e a sinalização TCP/IP sejam implementados no sketch Arduino.

A configuração de harware para este projeto é muito simples: basta conectar o Ethernet Shield ao Arduino e ligar um led em série com um resistor de 1KOhm entre o pino 6 do Shield e o terra (GND).

A ideia é acessar o endereço IP associado ao Arduino pelo navegador e receber uma página com um link para ligar o led e outro para desligá-lo. Para isso, foi utilizado o seguinte código:

Para controlar o Ethernet Shield, é utilizada a biblioteca Ethernet. A comunicação entre o Arduino e o Shield é feita utilizando o protocolo SPI, daí a necessidade da importação da biblioteca SPI também. Vale lembrar que a comunicação via SPI se dá através dos pinos 10, 11, 12 e 13 no Arduino Uno, o que impossibilita a utilização destes pinos no projeto.

A configuração do servidor funcionando na porta 80 é feita pelas linhas

sendo o endereço MAC e o endereço IP definidos pelos vetores mac e ip criados nas linhas 4 e 5.

Após a configuração inicial, o programa espera pela conexão de um cliente e, quando detectada, lê os caracteres enviados ao servidor relativos à requisição GET feita pelo cliente através do acesso pelo navegador.

Os caracteres são recebidos um a um e são guardados em sequência na variável readString. É utilizada uma condicional para limitar o número de caracteres recebidos em 100. A cada caractere recebido, é feito um teste para verificar se trata-se de um fim de linha (\n, um “ENTER”). Nesse caso, é enviada a resposta ao cliente, que é uma resposta bem sucedida à requisição (HTTP/1.1 200 OK), contendo uma página HTML com links para ligar e desligar o led.

Os links para ligar e desligar o led utilizam as query strings ?ledon e ?ledoff para que o servidor consiga identificar o comando vindo do cliente. Após a resposta à requisição, é feito um teste para verificar se o endereço requisitado pelo cliente possui uma destas query strings, através da verificação da variável readString pela presença das sequências ?ledon ou ?ledoff. A partir dessa informação, o led é ligado ou desligado e, por fim, a variável readString é reiniciada.

Desta forma, é possível controlar o led a partir de um ponto de acesso à rede local. Também é possível controlá-lo via internet, configurando o roteador para fazer um redirecionamento da porta 80 para o IP associado ao Arduino e acessando a página utilizando o IP público, fornecido pelo provedor de internet. No entanto, vale comentar que esta configuração não leva em conta a segurança, permitindo que qualquer um que possua o IP controle o led via internet.

CompartilheShare on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

About Renato

130 Responses to “Acendendo um LED via Internet com Arduino e o Ethernet Shield”

  1. Vanuzivon

    Amigo como faço para habilitar mais portas ou seja colocar mas pinos para funcionar(ligar desligar) qual procedimento?

    Responder
    • Renato

      Primeiramente é necessário configurar as portas que você quer usar na função “setup()” adicionando linhas como a 14.
      Depois disso, para acionar mais portas ao mesmo tempo (juntamente com a 6), basta adicionar linhas semelhantes às linhas 52 e 57.

      Se você quiser ter um controle individual de mais portas, você tem que adicionar um suporte à mais URLS, por exemplo “/?led1on”, “/?led1off” e “/?led2on”, “/?led2off”. Para isso, você deve criar blocos semelhantes ao bloco entre as linhas 50 e 59 para cada porta que quer controlar e adicionar links na área do HTML para essas URLS, como os links criados com a linhas 41 e 42.

      Responder
      • lucas

        Ola! como faço apara monitorar um ip? por exemplo quero fazer um watchdog para quando perder comunicação com meu roteador ele reseta..como posso fazer? obrigado

        Responder
      • Edenilson

        Olá!comprei um Ethernet Sheilla recentemente fiz apenas um teste remoto acionando led, mais agora os leds de status não piscam, de vez em quando que tds acendem inclusive os leds da porta de conexão à rede, já tentei reset pra normalizar mais sem sucesso será que você pode me ajudar?

        Responder
        • Mauricio

          Olá estava tentando estabelecer uma conexão e tive o mesmo problema no fim era o IP que eu havia declarado que por fim estava sendo ocupado pelo meu notebook, tente mudar o IP declarado dentro do código e tente estabelecer um IP estático para seus dispositivos, evitando assim transtornos.

          Responder
  2. Wagner

    Boa noite,

    Prezado Renato,

    Estou iniciando no aprendizado com o Arduino, gostaria de acender uma lampada via internet, poderia enviar este projeto para estudo?

    Responder
  3. Felipe

    Boa Noite Renato.

    Parabéns pelo post e tempo dispensado para faze-lo ficou realmente muito bom.
    Estou com um projeto de controle de acesso com RFID pela internet e minha principal preocupação é exatamente o conflito que os pinos SPI vao ter, tanto do leitor MF522-AN quanto o Ethernet Shield, pois bem gostaria de saber se vc tem alguma sugestão de como resolver isso? Será que mudando o SS do Mifaire fica bom?
    Em segundo lugar vc poderia explicar melhor essa parte dos links no HTML sou bem cru nesta parte, a pagina terá uma configuração separada do arduino? Não será ele que gerará a pagina?

    Perdoe todas essas vidas, mas seu blog foi o que eu mais chegou perto da solução.

    Obrigado

    Responder
    • Renato

      Não sei o que fazer quanto ao problema com o módulo de RFID usado junto com o Ethernet Shield mas encontrei uma discussão no fórum do Arduino sobre isso: http://forum.arduino.cc/index.php/topic,231461.0.html
      Pelo que vi, uma solução possível é utilizar o pino de chip select (CS) para habilitar o Ethernet Shield ou o módulo de RFID, um de cada vez, para utilizar os pinos de SPI do Arduino.

      Quanto aos links HTML, não sei muito bem qual é a sua dúvida mas vou tentar te contar como funciona de um modo geral.

      Quando você faz um acesso a um site utilizando um navegador, é estabelecida uma conexão TCP entre o seu computador e o servidor HTTP, tipicamente na porta 80. Apesar da conexão envolver uma série de sinalizações feitas por uma grande pilha de protocolos, dá para interpretar a conexão como uma conexão serial simples, em que seu computador envia comandos para esse servidor. Ao acessar um site com o navegador, ele manda “comandos” HTTP para o servidor através dessa conexão. Ao abrir uma página, geralmente o comando enviado é o “GET /”, para que o servidor envie a página HTML referente à raiz do site.

      Dá até para ver isso na prática usando o comando telnet para fazer uma conexão. Se você usa GNU/Linux, basta abrir um terminal e fazer a conexão TCP com

      telnet www.google.com 80

      Em seguida, você pode executar o comando

      GET /

      Você vai receber um HTML de retorno (que não é exatamente o que o navegador recebe por motivos que não são importantes no momento).

      O método client.read() da linha 24 vai lendo o comando executado pelo navegador, caractere por caractere, até encontrar um enter. Ao detectar o enter, retorna a página HTML com os links para acender ou apagar o led.

      Para saber se o usuário deseja acender ou apagar o led, um outro recurso é utilizado, as query strings. Conforme descrito nesta página da Wikipédia, as query strings são uma forma de passar dados adicionais para aplicações web através da URL. Por exemplo, na URL

      http://192.168.0.199/?ledon

      a query string é o trecho ?ledon. No programa usado neste projeto, são detectadas as query strings ?ledon e ?ledoff para acender ou apagar o led. Como as query strings apenas passam dados adicionais para a aplicação web, a requisição básica não é alterada, ou seja, ao acessar a aplicação com ou sem as query strings, será retornada a página HTML do mesmo jeito. Elas apenas mudam o comportamento quanto ao acendimento ou apagamento do led.

      Espero que tenha conseguido te ajudar.

      []

      Renato.

      Responder
  4. Eduardo

    Muito bom o projeto, porém o mesmo funciona somente na rede local certo?
    como faço para que meu amigo em outro estado do brasil consiga acessar essa página?

    Responder
    • Renato

      A situação mais comum é conectar o Ethernet Shield em uma rede privada isolada por um roteador usando o serviço de NAT. Nesse caso, a página para controle do sistema ficará disponível apenas na rede local.

      Para tornar a página disponível publicamente, você precisa configurar o serviço de redirecionamento de portas (port forwarding) no seu roteador. Com esse serviço, você pode configurar o seu roteador para encaminhar todas as requisições com porta de destino 80 (http) vindas da rede pública para o endereço IP do Ethernet Shield. Dê uma olhada nesta página da Wikipédia para entender melhor do que se trata (ou na versão em inglês, bem mais completa).

      Vale notar duas coisas:
      – A maioria dos provedores bloqueia o acesso a partir da rede pública para a porta de destino 80, que é a porta padrão do serviço http. Uma possível solução é utilizar uma porta diferente, geralmente maior do que 1024. Para tanto, basta modificar o sketch do Arduino;
      – Apesar de funcionar, esse sistema não conta com nenhum recurso de segurança. Assim, qualquer um que acessar a página do Arduino através do seu endereço IP será capaz de controlar o seu sistema. Em uma aplicação prática, é essencial usar algum sistema de segurança para evitar acessos não permitidos.

      []

      Renato.

      Responder
      • Claudio

        Gostaria de entender melhor essa parte de acesso pela internet.
        Seu programa é muito bom funciona perfeitamente, mais tenho um projeto que é exatamente esse com mais lâmpadas, como viajo sempre e a casa fica sozinha gostaria de acionar lâmpadas por exemplo, durante a noite e apaga-las de manha pela internet, simulando pessoas em casa.
        Você pode me ajudar nessa parte?

        Responder
        • Renato

          Quanto às lâmpadas, para controlá-las, você você vai precisar ligar relês nas saídas do Arduino e, para isso você vai precisar de uns componentes adicionais (um diodo, ao menos), pois a ligação direta pode causar danos ao Arduino. Pretendo escrever um post com um projeto mais completo, detalhando algumas formas de fazer essa ligação mas, enquanto não sai, você pode dar uma procurada na internet que você vai encontrar várias possíveis soluções.

          O problema desse projeto é a segurança do seu sistema. Do jeito que está, se você expor a porta HTTP do Arduino à internet, qualquer um vai poder controlar as suas lâmpadas. Para usar na prática, você vai precisar de alguma camada de segurança adicional. Uma solução simples de implementar é usar um servidor (ou um roteador) com o SSH instalado e fazer a conexão ao Arduino tunelada pelo SSH. Apesar de simples de implementar, é complicada para o usuário…

          Estou trabalhando em um projeto de um alarme conectado, que controla algumas lâmpadas também mas estou usando o Raspberry Pi. Tenho algumas ideias de como implementar um esquema de segurança mínimo mas ainda estou finalizando a placa para ligação dos sensores e lâmpadas. Quando tiver terminado, vou comentar aqui sobre o projeto.

          []

          Renato.

          Responder
  5. Eduardo

    Primeiramente Parabéns pelo seu Projeto, muito bem explicado, a tempos vinha procurando tutorial do Ethernet Shield e ainda não havia encontrado um tão explicativo e funcional assim.
    O grande problema que eu enfrente é devido a conexão ‘internet’ mesmo, já mudei a porta e fiz o redirecionamento corretamente, porém sem sucesso.
    Um amigo de outro bairro estava tentando acessar pelo IP externo e mesmo assim não foi. Pode me dizer algo mais que possa estar dando errado, já testei fora da minha rede, já mudei as portas para 1024. Pode me informar algo mais pra mim tentar?
    Obrigado!

    Responder
    • Renato

      Eu testaria as partes do sistema separadamente:
      – Primeiro, de um computador na rede local, eu testaria o acesso à página do Arduino, na porta alternativa escolhida (1024, no seu caso);
      – Se o teste funcionar, significa que o problema está no redirecionamento de portas ou em algum bloqueio da porta escolhida. Para testar o redirecionamento de portas, eu colocaria algum serviço (um servidor web, por exemplo), rodando na rede local na mesma porta escolhida no projeto do Arduino e no mesmo endereço IP e tentaria o acesso externo.

      Um dos testes deve falhar e você será capaz de identificar onde está o problema. Quanto ao redirecionamento de portas, vale notar:
      – A porta 1024 ainda pode estar bloqueada pelo seu provedor. Tente usar uma porta mais alta como 8080 ou 8888, ou ainda mais alta, lembrando que o limite é 65535;
      – É possível manter o projeto do Arduino rodando na porta 80 da rede local e usar uma porta alta para acesso externo. Basta configurar o roteador para fazer o redirecionamento da forma adequada, da porta alta, escolhida, para a porta 80, no endereço IP do Arduino.

      [],

      Renato.

      Responder
  6. Victor Mendon

    Bom dia, Renato

    Muito bom o seu post e as suas respostas aos amigos acima. Aprendi muito mais em sua página que em dezenas do mesmo assunto. Só esperando meu arduino chegar para começar os testes.
    Sou técnico em eletrônica, tenho empresa de segurança eletrônica e curso Engenharia de Controle e Automação. Sou apaixonado pela área!

    Abraço!

    Responder
  7. Daniel Lopes

    Olá, Você está de parabéns pelo tutorial.
    Mas, me tire uma duvida.

    Estou usando o WAMP server. Como faço pra ele reconhecer o LocalHost?

    Responder
  8. Raimundo Cerqueira

    Boa tarde, Renato.

    Gostei muito do seu artigo. Parabéns pelo trabalho.

    Tenho uma lan-house com quatro videogames (consoles) e gostaria de utilizar um projeto Arduino (já tenho um Uno com W5100 e módulo 4 relés) para controlar quatro televisores ligados aos consoles através do programa de gerenciamento dos computadores.
    Já fiz alguns testes com sketches de controle de relés via ethernet, inclusive como o uso de um aplicativo android Touch OSC, mas não tenho ideia de como monitorar os comandos do programa que utilizo, o Nexcafé. Esse programa possui um administrador que envia comandos para as estações, com recursos de liberar (desbloquear), desligar, pausar, dentre outros.

    Obrigado pela atenção.

    Cerqueira

    Responder
    • Renato

      Também não conheço esse programa mas você poderia ligar ou desligar as TVs usando um circuito para acionamento dos relés no lugar dos leds. O controle pode ser feito da mesma forma, através de uma requisição HTTP, que pode ser feita por um navegador. Talvez seja interessante você entrar em contato com o pessoal que desenvolve o Nexcafé, para ver se é possível integrar no programa uma forma de fazer a requisição HTTP.

      [],

      Renato.

      Responder
    • Renato

      Os pinos 10, 11, 12 e 13 são utilizados para a comunicação entre o Arduino e o Ethernet Shield, que é feita utilizando o protocolo SPI, por isso você não consegue utilizá-los. Já os pinos 0 e 1 são usados para a comunicação serial (que é utilizada para a comunicação USB entre o Arduino e o computador). A princípio, acho que você pode usar os pinos 0 e 1 como saídas digitais desde que não esteja usando comunicação serial no seu programa, mas não tenho certeza disso. Mostre o seu programa: use o pastebin e poste o link nos comentários.

      [],

      Renato.

      Responder
  9. Carlos

    Caro Renato,

    Parabéns pela publicação, sinceramente foi a mais simples objetiva que encontrei para resolver um problema complicado para quem não tem ainda informação suficiente, se a informação tivesse sido paga com certeza sairia satisfeito pela aquisição da mesma, obrigado porque sei que isso significa trabalho e você esta fazendo exatamente o que o pessoal que criou o projeto Arduíno se propôs, compatilhar informação de forma livre.

    Por outro lado gostaria de deixar postado que depois de ligar meu dispositivo na rede interna sem problemas, graças a sua explicação, exemplo, e todo material que você disponibilizou, veio como é de imaginar a vontade de acessar o mesmo via web, no meu caso como Live Tim e e um modem Sagemcom, optei por uma forma que me pareceu a mais simples de imediato,aplicar no meu modem a permissão de acesso via http://pt.dyn.com/products/. Obrigado uma vez mais, grande abraço!

    Responder
  10. Cristhian

    Ola, segui seu tutorial, porém não cria nenhuma pagina web quando digito o ip.
    Gostaria de saber se pode ser se estou digitando o ip errado ou alguma outra coisa.
    eu uso como ip o ipv4 encontrado cmd >> ipconfig >> ipv4

    obrigado.

    Responder
  11. Anderson

    Parabéns pelo tutorial, um dos poucos que vi na internet que esteja bem explicado.

    Esse readString é limitado a 100 caracteres recebidos, essa variavel inclui apenas os codigos html contido no comando client.println?

    Responder
    • Renato

      Na variável readString vão sendo concatenados um a um os caracteres recebidos na requisição HTTP feita pelo navegador. É o texto dessa requisição que é limitado em 100 caracteres (depois do centésimo caractere, os novos caracteres deixam de ser concatenados na variável readString). Quando é detectado um “enter” (\n) na requisição, é enviada a resposta chamando a função client.println() para cada linha da resposta.

      Responder
  12. Alexandre

    Tenho uma duvida, criei uma aplicação em C# que dispara o HTTPpost com o ip configurado no arduino mais a palavra ON e OFF no final, com intervalos de 5 segundos para q ele acenda e apague (preciso que seja dessa forma), ele fuciona algumas vezes, mas depois ele trava o arduino e ele se mantem ligado ou apagado, saberia pq? Obrigado, ajudou muito até aqui!

    Responder
    • Renato

      Eu começaria testando duas coisas:

      1) Se as requisições do programa estão de fato sendo feitas. Para verificar isso, você pode usar uma ferramenta de captura de pacotes de rede como o TCPDump ou o Wireshark;

      2) Se não existe algum problema com o Arduino ou com o Ethernet Shield. O teste mais fácil de se fazer é trocar uma peça de cada vez e verificar o comportamento.

      Se o seu sistema voltar a funcionar após um reset do Arduino (e o led voltar a piscar com intervalo de 5 segundos), dá para garantir que o programa em C# está enviando as requisições. Assim, o problema pode estar no hardware (Arduino ou Ethernet Shield) ou pode ser algum detalhe de implementação do programa do Arduino para a sua aplicação (esse é o caso mais complicado de depurar).

      Mais uma observação: do jeito que está o programa do Arduino, ele está preparado para receber requisições do tipo GET. Precisaria pensar um pouco para entender o que aconteceria se as requisições feitas fossem do tipo POST. Como você disse que está disparando um HTTPpost, acho interessante verificar a requisição que está sendo feita de fato. Se for POST, vale alterar o programa em C# para fazer requisições GET.

      Não sei se consegui ajudar em alguma coisa. Depois conte aí os resultados desses testes.

      []

      Renato.

      Responder
  13. Marcos Antonio

    Parabéns pelo tutorial, só fiquei com uma dúvida :
    O endereço MAC desses Shields são genéricos, ou seja, igual para todos os Shields ?
    Porque teóricamente cada Shield deveria ter seu endereço MAC !

    Responder
    • Renato

      A ideia original do endereçamento MAC é realmente que cada dispositivo tenha um endereço único no universo. Só que já faz um tempo que isso não é respeitado na prática. O fato é que problemas devido a endereços MAC repetidos podem ocorrer apenas se os dispositivos estiverem na mesma rede. Se estiverem em redes distintas, separados por um roteador, não vai ocorrer problemas devido à endereços MAC repetidos.

      Os primeiros a desrespeitarem essa regra sobre a repetição de endereços MAC foram fabricantes pequenos que produziam dispositivos com o mesmo endereço, provavelmente para reduzir custos (há um bom tempo, um amigo me contou um caso sobre problemas de rede que eram causados por dois dispositivos com o mesmo endereço MAC). Só que agora isso é bem comum. Na verdade, a maioria das placas mãe tem uma interface de rede incorporada e permite a alteração do endereço MAC na configuração da BIOS. O mesmo acontece com os roteadores. Esse recurso existe pois algumas operadoras de internet vinculam o endereço MAC do dispositivo diretamente conectado à rede deles. O problema é que, devido a esse vínculo, se houver um problema nesse dispositivo que exija a troca do equipamento (roteador ou até mesmo um computador), seria necessário entrar em contato com a operadora para alterar o endereço MAC vinculado no sistema deles. Com esse recurso que permite especificar o endereço MAC, isso não é necessário. Dá para trocar o equipamento sem que a operadora perceba.

      Com o Ethernet Shield, a gente também especifica o endereço MAC pelo programa. Nesse exemplo, o endereço é especificado na variável MAC, na linha 4 do programa. Depois, a gente usa essa variável na linha 15, para “inicializar” o sistema de Ethernet.

      Não sei se essa configuração é obrigatória (talvez o Ethernet Shield tenha um endereço MAC padrão para o caso em que não se especifica um). Se você descobrir, deixe um comentário.

      []

      Renato.

      Responder
  14. Leandro

    Renato,
    Você É DEMAIS. Você explica muito bem e com muita paciência.
    Li o código e todos os comentários antes de avançar. Quis começar um pouco mais avançado e decidi adicionar mais 1 LED. Segui as instruções conforme uma resposta tua do dia 26 de Abril de 2014 e funcionou logo a primeira amigo. Sem erros ao compilar ou nas teclas de ligar e desligar os LEDs. Detalhe: sou leigo. Estou começando agora.
    Por pessoas assim que aprendemos cada vez mais rápido.

    Um forte abraço.

    Leandro

    Responder
  15. Valmir Sartori

    Primeiramente parabens pelo post ficou extremamente facil de entender, no entanto gostaria de usar via web (do jeito que postou) e tambem continuar usando o interruptor. como ficaria a sintaxe? visando que eu teria que usar uma das portas digitais como entrada né?

    Responder
  16. Ed

    Primeiramente, parabéns pelo post.
    Segundo, vc saberia me dizer se tem como fazer este mesmo proccesso utilizando 4 lampadas ligadas a um rele ?se sim, como ?
    Valeu.

    Responder
  17. Ana Paula

    Parabéns pelo código e paciência! Você desenvolve um ótimo trabalho.
    Eu segui todos os passos, mas quando tento dar um ping pra saber se o IP já está ativo, dá o erro “Host de destino inacessível”. Já troquei os cabos, o modem, a porta 80, mas nada faz funcionar. Você sabe como posso solucionar isso?

    Desde já, obrigada!

    Responder
    • Renato

      Parece que você está com algum problema relacionado à sua configuração de rede. Acho que você pode começar observando se o Ethernet Shield e o computador que você está utilizando estão na mesma rede. Como você está ligando um ao outro ? Se for diretamente com um cabo, você vai precisar configurar a interface de rede do seu computador com um endereço IP, de modo que eles fiquem na mesma rede. Se você usou a configuração do post, você pode configurar o IP do computador para 192.168.1.10, com a máscara 255.255.255.0, por exemplo. Se você estiver com o computador ligado em uma rede com DHCP (que te fornece um endereço IP automaticamente), você vai precisar alterar o IP do Ethernet Shield para que ele fique na mesma rede fornecida pelo DHCP. Se não funcionar, conte mais detalhes da sua montagem.

      []

      Renato.

      Responder
  18. Jodoe

    Excelente postagem.
    A cinco dias vinha estudando artigos e exemplos para montar um circuito desses.
    Após ler a postagem em cerca de quinze minutos estou com quatro leds na protoboard comandados por uma pagina funcionando tanto pelo note como pelo celular, com comando individual e também comando para os quatro pinos ao mesmo tempo.
    Agora é só montar a placa com reles.

    Responder
  19. Agnaldo

    Renato, muito respeito ao seu post, achei maravilhoso, implementei um led a mais denominando como bomba 1 e bomba 2 …….. apenas a bomba 1 não desliga. Passei 3 horas estudando o problema e nao consegui resolver. Terias uma luz para este pobre aprendiz aqui ? Cordiais abraços amigo.


    #include
    #include

    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    byte ip[] = { 192, 168, 0, 168 };

    EthernetServer server(80);

    String readString;
    int Pin6 = 6;
    int Pin7 = 7;

    void setup() {

    pinMode(Pin6, OUTPUT);
    pinMode(Pin7, OUTPUT);
    Ethernet.begin(mac, ip);
    server.begin();
    }

    void loop() {
    EthernetClient client = server.available();
    if (client) {
    while (client.connected()) {
    if (client.available()) {
    char c = client.read();

    if (readString.length() < 100) { readString += c; } if (c == '\n') { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); client.println(""); client.println(""); client.println("modulo rele pela web"); client.println(""); client.println(""); client.println(""); client.println(""); client.println("LIGAR - Bomba 1");
    client.println("");
    client.println("
    DESLIGAR - Bomba 1");

    client.println("");

    client.println("LIGAR - Bomba 2");
    client.println("");
    client.println("DESLIGAR - Bomba 2");

    client.println("");
    client.println("");

    delay(1);
    client.stop();

    if(readString.indexOf("?rele6on") > 0)
    {
    digitalWrite(Pin6, HIGH);
    }
    else {
    if(readString.indexOf("?rele6off") > 0)
    {
    digitalWrite(Pin6, LOW);
    }

    if(readString.indexOf("?rele7on") > 0)
    {
    digitalWrite(Pin7, HIGH);
    }
    else {
    if(readString.indexOf("?rele7off") > 0)
    {
    digitalWrite(Pin7, LOW);
    }
    }
    readString="";
    }
    }
    }
    }
    }
    }

    Responder
    • Renato

      Oi Agnaldo,

      Primeiro vai uma dica quanto à inclusão de códigos em comentários e chats: use o gist ou o pastebin em vez de colocar o código no seu comentário. Fica mais fácil de visualizar as coisas. Como você mandou o código pelo comentário, varios caracteres foram trocados pelo wordpress. Tentei dar uma arrumada e coloquei no pastebin, no link http://pastebin.com/xmZBf9w5. Acho que o problema do seu programa está nas linhas 45-47 e 51-53. Os links não tem o parâmetro href, que serve para identificar qual o relê que deve ser ligado. Além disso, acho que o bloco if da linha 71 não precisa ficar dentro do else da linha 65 (acho que isso não faria diferença, mas é mais lógico ficar fora do else).

      Dê uma olhada aí e depois comente como você resolveu.

      [],

      Renato.

      Responder
      • Agnaldo

        Renato, não tenho palavras para agradecer seu post com o código e pelo seu retorno em tentar me ajudar, ontem a noite mandei minha duvida a voce pq após 5 horas tentando achar onde estava o erro eu consegui sanar o problema, meu erro foi que quando eu copiei a sintaxe para duplicar o Liga/Desliga ao final ficou faltando um colchete } na linha 59 ( pois são dois ) …apenas um colchete e faz uma diferença enorme, pois na hora de compilar ele o fazia normal e os HREF não estavam faltando, não sei pq quando colei a pagina da publicação “comeu-os” todos, desculpe por fazer desta forma pois não sabia desta etiqueta quando se posta cods hoje pela manhã alterei a pagina html de comando e habilitei 6 reles para ligar a um quadro de energia acionando algumas contatoras, ficou PERFEITO e todas contatoras trabalham muito felizes. Veja como ficou no celular o layout http://www.solarradio.com.br/transfer/rele.png Estou acionando pela WAN pois abri uma porta bem alta para acessar de fora. Lhe devo um almoço, um jantar, a sobremesa e o café amigo. Obrigado mesmo. Tenho um cliente meu precisando de um contador de peças que mostre o resultado na WEB tambem, caso tenha interesse neste projeto divido-o com voce ok, neste caso não seria favor e sim uma parceria ok, pois estou buscando alguem para gerar o codigo para mim. entre em contato gui2001@uol.com.br. Cordiais abraços e sucesso sempre a voce. Ps.: comecei a mexer com o arduino faz 2 dias, sou totalmente cru no assunto. 🙂

        Responder
  20. Rodolfo

    Segui exatamente seu sketch e deu tudo certo ( tive que trocar o arduino de usb
    para outro com microusb (ou mini) mas…maravilha.
    Tenho roteador WRN240i e pendurado nele 2 PCs e um DVR Intelbras além de
    um repetidor (sem fio) todos funcionando perfeitamente.
    Usei a última conexão para ligar o ethernet shield que funcionou
    perfeitamente no PC e no celular (wi-fi) . Mas pela internet não consigo acessar o arduino.
    A porta do roteador é 8080 que não precisa ser digitada para acessá-lo.
    A porta (original) do arduino era 80 que não precisava ser digitada, mas mudei para 81 pela fama da 80 (complicada) e deu tudo certo porém precisa ser digitada. Tudo maravilha.
    Mas pela internet não consigo.
    Na configuração do roteador não alterei o DDNS por estar correto para o dvr.
    Considerando 81 como porta interna (arduino) na configuração do roteador tentei
    como porta externa 81, 1024, 2000, 8010 (não poderia dar certo por ser do dvr) e 8080 e nenhuma deu certo.
    Você pode me socorrer? ou me indicar literatura? Não entendo de portas.
    Obrigado
    Rodolfo

    Responder
    • Renato

      Não sei se você já fez mas você precisa configurar um redirecionamento de portas no seu roteador. Procure por “port forwarding” ou “NAT” nas configurações do roteador.

      O que acontece é que seu roteador recebe apenas um IP público de seu provedor, na porta WAN e sua rede interna usa uma rede privada, com uma faixa de endereços IP que é usada em várias outras redes privadas. Para você se conectar ao seu Arduino via internet, você vai precisar usar esse endereço IP público (ou um DDNS, que é traduzido para esse IP público). Para que o roteador saiba o que fazer com a sua requisição, você precisa configurar ele para fazer o redirecionamento. Você pode, por exemplo, configurar o roteador para encaminhar todos os pacotes com porta de destino 8888 para o endereço IP do Arduino (da sua rede interna, privada), na porta 81. Se você tem um DVR acessível via internet, deve haver uma regra de redirecionamento de portas para ele em seu roteador.

      Assim, de um outro local na internet, você poderia acessar seu Arduino pelo endereço do seu DDNS, na porta 8888. Procure configurar a porta exposta à internet de modo que seja maior que 1024. Muitos provedores bloqueiam portas baixas, menores que 1024. Vale lembrar que essa configuração não implementa nenhum tipo de segurança de modo que qualquer um na internet poderia acessar seu Ethernet Shield. Em uma aplicação prática, é necessário incluir algum esquema para restringir o acesso.

      [],

      Renato.

      Responder
      • Márcio

        Parabéns, Renato pelo post!
        Simples e funcional, além de muito bem explicado!
        Ao amigo Agnaldo, que postou resposta dia 11 de junho, será que poderia incluir o código final aqui, da maneira que o Renato falou? Estou precisando acionar 4 relés através da web e o seu projeto me servirá bem.

        Renato, uma pergunta:
        Eu vou usar um arduino Mega com o Shield W5100 e o módulo relé de 4 saídas.
        Vou precisar alterar alguma coisa no código pelo fato de ser Mega e não Uno?
        Meu kit ainda não chegou, mas já estou vasculhando na net o código que vai me atender.
        Não tenho em mãos os dispositivos ainda e não tenho como testar seu código. Tenho uma dúvida: A página html gerada mostra um botão para ligar e desligar o led?
        Vi que o amigo Agnaldo postou uma foto do projeto dele que tem botões, mas não consigo enxergar onde esses botões foram inseridos no código.

        Vou tirar essas dúvidas prévias com vocês e aguardarei a chegada do meu kit pra poder conversar já com o projeto em andamento.

        Obrigado!

        Responder
        • Renato

          Os links para ligar e desligar os leds são escritos pelas linhas


          client.println("Ligar o led");
          client.println("Desligar o led
          ");

          Em vez de usar links comuns, você pode usar imagens ou um layout no estilo de botões, mas a ideia é a mesma, mudando apenas o design.

          Quanto ao Arduino Mega, acho que você não vai ter problemas. O único detalhe é que o Ethernet Shield usa os pinos 10, 11, 12 e 13 para a comunicação com o Arduino via SPI. Por isso, você não vai conseguir usar essas saídas para acionar os relês. É necessário ver quais pinos o seu módulo de relês usa.

          [],

          Renato.

          Responder
  21. Fernando

    Olá Renato,
    Parabéns mesmo, este post abriu minha mente eheheh.
    Mas, estou com uma dúvida. Como ficariam estes links (“/?ledon\”) se eu quisesse criar uma nova página, qualquer linguagem que fosse (PHP, Java, etc.)?
    Porque a minha idéia é controlar as portas do Arduino por outras páginas que não o ip do próprio Arduino, tudo isso para poder deixá-las com o visual melhor.
    Agradeço desde já.
    Abraço.

    Responder
    • Renato

      Acho que a melhor solução nesse caso seria criar uma espécia de API no Arduino, para acender os leds. Há algum tempo, fiz um projeto com Arduino e Ethernet Shield criando uma API REST para o controle das portas. Pretendo escrever um post sobre esse projeto em breve.

      Entretanto, usando esse código simples mostrado acima, acho que não mudaria muita coisa no Arduino. O que você precisaria fazer é incluir links (ou botões) que permitam que sua página externa faça requisições HTTP ao Arduino, incluindo as query strings (/?ledon). É interessante que sua aplicação faça as requisições mas não exiba as respostas, mantendo o usuário na mesma página.

      []

      Renato

      Responder
  22. Michell de Oiveira

    Bom dia!!
    Estou fazendo um projeto e gostaria de saber se poderia usar arduino uno com uma shield ethernet um leitor rfid para captura de nomes para agregar em um banco de dados e mostrar em uma pagina feita em java web?

    Responder
    • Renato

      Claro que pode! Basta conectar o leitor RFID às portas do Arduino (como o MFRC522, usando a biblioteca https://github.com/miguelbalboa/rfid), ler o cartão, compor os dados a serem enviados via ethernet e enviá-los ao seu servidor usando, por exemplo, uma API REST. É um projeto bem mais complicado que o do exemplo mostrado na postagem mas com certeza pode ser realizado. Recomendo que comece resolvendo os problemas de forma isolada (leitura RFID e transmissão de informação para o servidor REST) e depois integre a solução. Depois conte nos comentários sobre os resultados do seu projeto.

      []

      Renato.

      Responder
  23. Elvis

    Renato tudo bom, eu não consigo dar ping no endereço ip que eu coloco, esse o mesmo da faixa do meu roteador ex: 192.168.5.235 diz que o anfitrião de destino está inacessível . poderia me ajudar ?

    Responder
    • Renato

      O problema pode ter várias causas diferentes. Para tentar identificar é necessário saber como está a sua rede. Você tem um roteador com um computador e o Ethernet Shield ligados nele? Quais os endereços IP e máscaras do computador, roteador e do Ethernet Shield? Do computador você consegue dar ping no roteador?

      [],

      Renato.

      Responder
  24. Igor

    Primeiramente parabéns pelo post ficou bem compreensível sua linha de raciocínio. Gostaria de saber se por acaso você teve o seguinte problema.
    Tenho uma automação residencial funcionando pela rede perfeitamente pela rede interna, PORÉM apos um tempo, caso eu pare de fazer os testes (uns 10 minutos) o” sistema” “trava” e não funciona mais o servidor web, alias não sei se “não funcionar” seria o correto, ele responde ao PING mas as funcionalidades de ligar e desligar, por exemplo, “travam” tipo não muda mais pra ON / OFF, somente caso eu reiniciar o Arduíno…ai funciona direitinho. Alguma dica ou conhecimento sobre que possa me ajudar ?

    Att Igor

    Responder
    • Renato

      Não cheguei a testar esse exemplo por longos períodos de tempo. No entanto, dentro de 10 a 30 minutos não percebi nenhum tipo de travamento.

      Se o seu sistema ainda está respondendo ao ping, ele não está completamente travado. Talvez seu código tenha algum detalhe que esteja levando a esse comportamento mas eu também não descartaria a possibilidade de um defeito de hardware. Já testou o seu software com outro hardware ? Já testou o seu hardware com outro software ?

      Mande seu código nos comentários para que seja possível ter uma ideia melhor do que está acontecendo.

      [],

      Renato.

      Responder
  25. Charlison Souza

    Parabéns, Renato pelo post!
    Estou usando um arduino Mega com o Shield W5100 porém quando carrego o código ele me gera a seguinte mensagem:
    avrdude: stk500v2_ReceiveMessage(): timeout (seis vezes)
    avrdude: stk500v2_getsync(): timeout communicating with programmer (uma vez)
    Quando trabalho somente com o mega, funciona normalmente.
    O que acha que pode esta ocorrendo?

    Responder
  26. Danielle Cristinne

    Renato, fiz o teste de ping no roteador, funcionou
    também com o Arduino MEGA ADK e o Ethernet Shield WZ5100 ligado ao computador, funcionou também, mas se conecto o Arduino juntamente com o Internet Shield no roteador e executo o ping, a mensagem é: “Host de destino inacessível”.

    IP: 192.168.25.200 // ip atribuido ao Arduino
    Gateway:192.168.25.1 (router)
    Máscara de rede: 255.255.255.0

    Não sei mais o que fazer, os cabos estão ok, tudo funcionando, somente não consigo fazer o teste dentro da rede, aguardo uma ajuda.
    Grata

    Responder
    • Renato

      Se o ping funciona quando você liga diretamente o Arduino no computador, o problema está na sua rede. Você está ligando o Arduino e o computador nas interfaces LAN do roteador? Qual é o IP que você está usando no computador?

      [],

      Renato.

      Responder
  27. Ramon Soares

    Olá Renato, td bem? Cara parabéns pelo post pois ajuda muita gente que está engatinhando a realizar procedimentos bastante interessantes e viáveis. Renato, me tire uma dúvida: neste seu programa de acionar led via internet, tem como trocar o link que aparece na interface por um botão na própria interface sem a ajuda de outro aplicativo? Tipo, já andei pesquisando a respeito e só encontro a solução se usar por exemplo o TouchOSC, mas tem outro caminho para aparecer um simples botão na interface? Tem alguma Tag que possa ser usada no html para esse fim? Abraço.

    Responder
    • Renato

      Você pode usar um estilo diferente para seus links usando CSS, fazendo com que pareçam botões. Um exemplo desses estilos são os botões usados pelo Twitter Bootstrap (http://getbootstrap.com/css/#buttons). No entanto, acho que não vai ser possível usá-lo diretamente, porque deve ser muito grande para a memória do Arduino. Você pode escrever um CSS mínimo com base no Bootstrap só para mostrar os links como botões.

      [],

      Renato.

      Responder
  28. marcus vinicius

    BOA NOITE RENATO..VOCE TERIA UM EXEMPLO DE CODIGO INCLUINDO DDNS FICTICIO PARA ACESSO PELA REDE EXTERNA.TENHO DDNS PROPRIO DE DVR.COMO COLOCAR ESSE ENDEREÇO NO CODIGO? SUBSTITUO O ENDEREÇO DE IP PELO DDNS,É ISSO?..O ACESSO LOCAL ESTA OPERANTE SEM PROBLEMA.DESDE JA MUITO OBRIGADO

    Responder
    • Renato

      Oi Marcus,

      Para acessar a partir de uma rede externa, você não precisa modificar o código no Arduino. Se você já tem um endereço de DDNS com seu IP público atualizado, basta configurar seu gateway (geralmente é o seu roteador, fornecido pelo provedor) para fazer um encaminhamento de portas. No caso mais geral, você deve encaminhar a porta 80 (http) para o endereço IP interno do seu Ethernet Shield, na porta 80 (supondo que você está usando a porta 80 no Ethernet Shield).

      Entretanto existem 2 problemas em relação a esse sistema:

      1) Muitos provedores não permitem acesso através da porta 80 (em geral proibem acesso usando portas baixas, menores que 1024). Se for o seu caso, você pode contornar essa limitação usando outra porta, por exemplo, 8080 e encaminhado-a para a porta 80 do seu Ethernet Shield. Assim, você poderia acessar o seu sistema através endereço-ddns:8080;

      2) O maior problema é em relação à segurança. A partir do momento que você faz o encaminhamento de portas para o Arduino, qualquer um pode acessar o seu sistema. Além disso, é fácil para um cliente desconhecido fazer uma varredura e perceber que você tem uma porta http aberta. Na prática, você deve pensar em uma forma de autenticação segura para usar o seu sistema mas isso está um pouco além do que eu queria mostrar com esse post.

      [],

      Renato.

      Responder
  29. jamis

    boa noite amigo, sou iniciante com Arduino mas ja aprendi muito com vc, dês já lhe agradeço pela disposição em ajudar dividindo seu conhecimentos com todos nos.
    modifiquei seu código para minha precisão só que esta faltando um detalhe
    gostaria de ler entradas analógica e visualizar na pagina html que vc criou, como fosso isso
    esse e sketch modificado para o acionamento de tampadas

    Responder
      • Cláudio Jr

        Boa tarde! É um projeto de automação de uma torre de internet, onde se um Acess Point parasse de transmitir sinal, o Arduino perceberá através de test de icmp,o qual o arduino irá desligar e religar os equipamentos da torre através de um relé e ainda o administrador da rede receberia uma msn do problema e pederia acessar via web o arduino e ver a tensão e a temperatura.
        Entao gostaria de unir alguns código para fazer essas funcionalidade e ainda fazer o código de mandar SMS funcionar (não consigo mandar sms), que segue no poster abaixo:
        http://pastebin.com/5RUs06RX

        Responder
        • Pablo Xavier

          Cara tem alguns rotiadores e tb antenas com essa função Watch Dog eu uso um rotiado que tem quando ele para de transmitir ele reniscia pra mim está funcionando !

          Responder
  30. Diniz

    Olá Renato, uso o arduino com DRAGINO Yun shield , consigo acessar todos os relay via comando web browser do tipo http://192.168.0.107/arduino/digital/13/0 ou 1, porem gostaria de ter um html que possua botões para apagar ou acender, no shield ethernet consigo bom resultado, mas quando passa para o wifi, somente aparece o menu do dragino.quando digito o ip, agradeço se puder dar uma força ou quem puder me ajudar.

    Responder
  31. fabio soares

    Oi Renato, meu nome é Fábio, em relação a esse comentário que vc fez:” configurando o roteador para fazer um redirecionamento da porta 80 para o IP associado ao Arduino “, vc teria algum tutorial para me indicar? estou com uma automação em mente para meu tcc, e precisando de ajuda.

    Responder
  32. LUIZ CYPRIANO

    BOA TARDE SERIA POSSÍVEL EXPLICAR O QUE DEVE ALTERAR NO ROTEADOR PARA TER ACESSO A REDE EXTERNA – DESDE JÁ OBRIGADO – LUIZ

    Responder
  33. Vinicius

    Renato. Através desse exemplo eu consigo me comunicar com o arduino pelo meu site que está na internet? Pois preciso, por exemplo, acender um led de qualquer lugar, apenas entrando no meu site e apertando um botão. Isso é possivel?

    Desde ja grato.

    Responder
  34. LUIZ

    BOA NOITE DE NOVO ESTOU TENTANDO ABRIR UMA PORTA PARA ACESSO ESTERNO MAS NÃO ESTOU CONSEGUINDO SEGUNDO INFORMAÇÕES LIDA NA INTERNET É QUE OS PROVEDORES (VIVO) OU (NET) NÃO ESTÃO DEIXANDO ABRIR NENHUMA PORTA SE PUDER DAR UMA AJUDA EU AGRADECERIA AS PROGRAMAÇÃO NO MEU ROTEADOR JÁ REALIZEI SÓ QUE NÃO ABRE A PORTA DESEJADA QUE ESTOU PROGRAMANDO. DESDE JÁ AGRADEÇO.

    Responder
    • Renato

      Eu já vi casos em que os provedores bloqueiam as portas baixas (1-1024). Tente redirecionar uma porta mais alta.

      No entanto, como já disse antes, esse redirecionamento vai te trazer problemas de segurança na sua rede. Para usar um sistema desse tipo na prática, é necessário usar uma solução mais segura (criptografia, vpn, etc).

      [],

      Renato.

      Responder
      • LUIZ CYPRIANO

        TAMBÉM NÃO FUNCIONOU TENTEI PORTAS 8000 7000 ETC ETC QUANTO A SEGURAÇÃO TUDO BEM É SÓ UM TESTE PARA OBSERVAR O FUNCIONAMENTO NÃO É NADA PROFISSIONAL QUE VAI FICAR ATIVADA POR MUITO TEMPO

        Responder
  35. PAULO FERNANDO CARVALHO SANTNAA

    Prezado Renato, parabéns pelo post, bastante explicativo. Porém tenho uma dúvida sobre a utilização de dois Ethernet Shields se comunicando entre si. Tenho um arduino que recebe uma mensagem via RF433 Mhz e preciso capturar essa mensagem e enviar via rede para outro arduino conectados na mesma rede.
    Voçe poderia me dar alguma dica de como enviar um comando de um arduino para outro via ethernet shield? Ou algum material que trate disso. Novamente parabéns pelas informações! Abraços!

    Responder
    • Renato

      Oi Paulo,

      Em relação à recepção do dado, você deve usar o EthernetServer e o código do post pode servir de exemplo para você. Nesse caso, quando o servidor recebe uma requisição, analisa o comando recebido e acende ou apaga o led.

      Para enviar um dado usando o Ethernet Shield, você pode usar o EthernetClient (https://www.arduino.cc/en/Reference/EthernetClient). Você pode enviar a requisição ao EthernetServer usando o EthernetClient. Dê uma olhada no exemplo da página de documentação. Pretendo escrever um exemplo de uma aplicação como essa.

      [],

      Renato.

      Responder
  36. ewerton

    Renato,

    Funcionou , porém só consigo acender e apagar o led enquanto o cabo usb do arduino está conectado. Quando tiro o cabo, não consigo acender mais. É o arduino Uno com uma placa ethernet acoplada em cima. Está alimentado por fonte externa 12v, 500ma. O que pode ser?

    Responder
  37. Lucas

    Boa Noite, estou procurando mas não encontro nenhum tutorial de como controlar o arduino remotamente via android. Já consegui programar para controlar o arduino com app android via wifi. Estou usando o Arduino Uno + Modulo ESP8266-01. Você saberia dizer como posso controlar remotamente?

    Responder
  38. Paulo

    Boa noite. Estou com uma duvida, quando ligo o cabo de rede no arduino e no notebook o led ja acende mas quando chamo o programa pelo navegador funciona normal. Quando ligo o arduino no roteador o led acende de depois de alguns segundo o led começa a piscar e mesmo usando o dyndns nao consigo acessar o arduino, saberia me dizer porque o led começa a piscar e não consigo acessar pelo roteador?

    Responder
  39. FredPortela

    Renato, Li o artigo e alguns comentários interessantes. Gostaria de saber como vejo o “estado” de um led ou saide digital ou qualquer outra coisa no sentido On e Off antes de definitivamente mandar ligar ou desligar.

    Responder
    • Renato

      Se você quiser ler o estado dos pinos via requisição HTTP, você vai ter que implementar algum esquema de resposta do Ethernet Shield para retornar o valor, por exemplo, via JSON.

      Há um tempo atrás, fiz um projeto (que na verdade foi a compilação de dois projetos já existentes) para possiblitar a leitura e a modificação do estado de pinos do Arduino usando requisições REST. Para a leitura, o Arduino responde com um JSON, contendo o valor dos pinos digitais ou analógicos. O código é bem mais complicado do que esse do post mas acho que vale a pena você dar uma olhada. Está disponível em https://github.com/renatocan/arduino_rest

      [],

      Renato.

      Responder
  40. Rene Aviles

    Bom dia Renato,
    Tenho o Arduino Uno e comprei recentemente o Shield Ethernet W5100, e o módulo de relés com 4 .
    Bem, meu projeto é controlar um microondas via android, sendo que o relé 1 vai acionar o número 1 do microondas, o relé 2 vai acionar o 3, o relé 3 vai acionar o zero e o quarto relé vai acionar o liga do microondas.
    Preciso de umas dicas para colocar meu projeto em funcionamento, já tirei a membrana do microondas e tenho os contatos 1,3,0 e liga.
    Aguardo contato, Rene.

    Responder
    • Renato

      Oi Rene,

      Acho que há duas coisas principais que você vai ter que resolver:

      – Se você quer controlar o projeto via Android, você vai precisar escolher uma forma de comunicação entre o app Android e o Arduino. Uma ideia é fazer algo muito simples, como apresentado neste post, usando query-strings para identificar os comandos enviados pelo Android e, a partir disso, acionar os relés conforme você deseja (imagino que, com esse shield de relés, o acinonamento dos relés possa ser feito de forma idêntica ao acionamento dos leds neste exemplo);

      – Você tem que dar um jeito de ligar os relés no painel do microondas (não sei se você já resolveu isso). Essa é a parte mais complicada e vai depender do seu talento com hacking 🙂

      Você já definiu como vai fazer essas coisas?

      []’s

      Renato.

      Responder
  41. marcosluz

    ola gostaria de ligar um modulo rele de 8 canais e um modulo ponte H para controlar motor de passo via internet. Estou começando em arduino nao tenho muito conhecimento, vc poderia me ajudar

    Responder
  42. Avelar

    Bom dia Renato, Desenvolvi uma programação para comandar vários dispositivos em minha casa enviando o comando ao Arduino via app OSC. A minha dificuldade é que os comandos enviados para os dispositivos ligados ao pinos 10 a 13 não foram aceitos, somente deu certo para os dispositivos ligados aos pinos 0 a 9, existe alguma diferença entre os pinos 0 a 9 e 10 a 13?

    Responder
  43. wesley

    Estou com um problema com o meu shield W5100.

    Estou usando com o arduino uno, O problema é que ao conectar o shield no roteador, nada acontece apenas a luz de energia fica ligada pois já está plugado ao arduino que esta sendo energizado pelo USB do meu pc.

    Testei o conectando ao meu notebook que esta utilizando a rede wifi e compartilhei com o w5100, e funcionou corretamente, mais quando conecto ao roteador nada acontece.

    Testei com um roteador Gothan gwr-100 e com um TP-LINK TL-WR747N. nenhum funciona!

    Oque pode ser?

    Responder
    • Renato

      É difícil de identificar o problema sem olhar mais de perto 🙂

      Você está conectando na LAN do roteador? Que cabo você está usando, direto ou crossover?

      [],

      Renato.

      Responder
  44. Alan lemos

    Olá Renato, primeiramente queria agradecer o Post que esclareceu muitas duvidas, porém restou uma, fiz uma automacao residencial com o Arduino uno e utilizei praticamente todas as portas digitais exceto as portas(10,11,12 e13) , tive até que utilizar um módulo i2c para o lcd com intuito de economizar portas digitais. Porém faltou acender apenas um LED e tento ligar ele na porta 8 a única restante,porem ela não funciona. Medi com multímetro e ela nao altera o estado ,a tensão fica sempre em 0,689 ao dar o comando. Sabe o pq isso pode estar acontecendo?
    Obrigado pela ajuda

    Responder
  45. marcelo

    É possível controlar o Arduíno a partir de uma outra rede tendo acesso a todos os dados?
    P.E. ligar e desligar as luzes de um local não estando conectado na mesma rede que o arduino?

    Responder
    • Renato

      Oi Pablo,

      Acho que seu código tem uns problemas em relação aos blocos dos ifs (as partes que começam com { e terminam com }). Dei uma olhada rápida e me parece que if(readString.indexOf("?ledon1") > 0) acabou ficando dentro do if(readString.indexOf("?ledoff") > 0).

      Outra coisa que pode dar problema são os nomes identificadores que você está usando. O indexOf está verificando se existe a substring usada para identificar o led dentro da string de requisição (readString). Usar “ledon” e “ledon1” não é uma boa ideia pois um contém o outro e isso vai acabar dando problema na lógica de identificação dos leds. Procure usar nomes que não contenham os outros, como led1on e led2on, por exemplo.

      [],

      Renato.

      Responder
  46. Pablo Xavier

    Obrigado pelas dicas, mas ainda não consegui os dois botoes acende e apaga o mesmo led !
    poderia visualizar o post e comentar uma solição para a separação dos acionamentos dos leds separadamente ???

    segue meu script abaixo postado no pastbin

    http://pastebin.com/bUxnH42H

    OBS. Sou leigo na parte de Programação !

    Por isso estou apanhando com erros simples mas caso consiga desvendar o misterio de inserir mais um botão o restante é só seguir o a logica dos outros criados !

    Responder
  47. Ana

    Oi,
    eu fiz tudo que está no post e quando tento acessar o endereço, ele acusa que a página não pode ser exibida.
    Tanto quanto eu conecto o ethernet no roteador, quanto no notebook
    Você tem ideia do que posso fazer?

    Responder
    • Renato

      O problema pode ter várias causas diferentes. Para tentar identificar é necessário saber como está a sua rede. Quais os endereços IP e máscaras do computador, roteador e do Ethernet Shield? Do computador você consegue dar ping no roteador?

      [],

      Renato.

      Responder
    • Renato

      Sim, é possível. A diferença é que o módulo W5100 tem toda a pilha TCP implementada em hardware enquanto que, com o módulo ENC28J60, você vai precisar implementar grande parte da pilha TCP via software. Eu nunca usei o ENC28J60 mas vi que existe uma biblioteca que implementa a parte de controles TCP e permite usar o módulo praticamente da mesma forma que fizemos com a biblioteca nativa do Ethernet Shield. Ela está disponível em https://github.com/ntruchsess/arduino_uip. Dê uma pesquisada e você deve encontrar exemplos de implementação de aplicações desse tipo com essa biblioteca.

      [],

      Renato.

      Responder

Deixar uma Resposta

  • (will not be published)