Como usar com Arduino – Módulo Ethernet ENC28J60 (Web server)

Como usar com Arduino – Módulo Ethernet ENC28J60 (Web server)

img00_como_usar_com_arduino_modulo_ethernet_enc28j60_uno_mega_2560_nano_internet_automacao_residencial_android_telefone_rele_web_server

– Descrição:

Módulo Ethernet ENC28J60 é utilizado para atribuir ao Arduino a conexão ethernet / internet, dessa forma torna-se possível controlar o Arduino a partir da rede interna (ethernet) ou através da rede externa (internet). Além do Arduino, este módulo pode ser utilizado também com PIC.

Muitos projetos desenvolvidos com Arduino necessitam de acesso / controle de forma remota e ao utilizar o Módulo Ethernet ENC28J60 essa necessidade é suprida de forma simples e prática, pois basta fazer as ligações entre o módulo e o Arduino, conectar o módulo ao roteador através de um cabo de rede com 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 Módulo Ethernet ENC28J60 se torna um membro importante do projeto.

– Especificações e características:

– Controlador: ENC28J60
– Tensão de operação: 3,3VDC
– Velocidade de conexão: 10 / 100Mb
– Protocolos Suportados: TCP / IP
– Conexão com o Arduino através de SPI
– Possui cristal oscilador de 25MHz

– Datasheet:

Datasheet ENC28J60

– 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 Módulo Ethernet ENC28J60 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 – Módulo Ethernet ENC28J60
01 – LED Difuso 5mm Vermelho
01 – Resistor de 150Ω
01 – Protoboard
02 – Cabos Jumper macho-macho
08 – Cabos Jumper macho-fêmea
01 – Cabo de rede RJ45

– Esquema de ligação da prática:

OBS: na tabela abaixo é mostrado as conexões que devem ser feitas entre o ENC28J60 e o Arduino Uno ou Arduino Mega 2560.

img01_como_usar_com_arduino_modulo_ethernet_enc28j60_uno_mega_2560_nano_internet_automacao_residencial_android_telefone_rele_web_server

– Tutorial de instalação e configuração do ambiente de programação do Arduino:

Arduino – Instalação e Configuração da IDE no Windows

– Biblioteca:

Download UIPEthernet-2.0.6

– Importando bibliotecas para o ambiente de programação do Arduino:

Arduino – Importando bibliotecas para a IDE

– 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. Se você não sabe como ter acesso a faixa de IP do seu roteador, 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 ENC28J60 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.

– 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:
Próxima postagem:
Postagem feita por

Formado em Engenharia da Computação, Técnico em Eletroeletrônica, Fundador e Diretor da MasterWalker Electronic Shop. Se preocupa com o aprendizado dos seus clientes e daqueles interessados em aprender sobre Arduino e plataformas embarcadas em geral.

Existem 12 comentários para esta postagem
  1. nathan às 11:03

    bom dia preciso de uma ajuda, to usando esse código pra fazer meu tcc e ele ta dando erro e eu não encontro o porque, ta dando dois erros:
    warning: #warning “Endianness configured automaticaly.”

    UIPEthernet/utility/logging.h:24:2: warning: #warning “You can configure LogObject and ACTLOGLEVEL in ‘utility/logging.h’. More verbosity more memory usage.” [-Wcpp]
    #warning “You can configure LogObject and ACTLOGLEVEL in ‘utility/logging.h’. More verbosity more memory usage.”

    o código pega as informações de umidade e temperatura do sensor dht11 e passa para um site
    o código esta assim
    #include
    #include
    #include
    #include

    #define DHTPIN A0
    #define DHTTYPE DHT11
    DHT dht(DHTPIN, DHTTYPE);

    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //ATRIBUIÇÃO DE ENDEREÇO MAC AO ENC28J60
    byte ip[] = {192, 168, 0, 110};; //COLOQUE UMA FAIXA DE IP DISPONÍVEL DO SEU ROTEADOR. EX: 192.168.1.110 **** ISSO VARIA, NO MEU CASO É: 192.168.0.175
    EthernetServer server(80); //PORTA EM QUE A CONEXÃO SERÁ FEITA

    String readString = String(30); //VARIÁVEL PARA BUSCAR DADOS NO ENDEREÇO (URL)

    void setup(){
    Serial.begin(9600);
    Serial.println(“DHTxx test!”);
    Ethernet.begin(mac, ip); //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
    dht.begin(); //inicializa o sensor DHT11
    }
    void loop(){
    delay(2000);
    Serial.println(“void loop “);
    Serial.println(“lendo os valores”);
    float h = dht.readHumidity();
    // Lê a umidade
    float t = dht.readTemperature();
    // Lê a temperatura em Celsius
    if (isnan(t) || isnan(h))
    {
    Serial.println(“Failed to read from DHT”);
    }
    else
    {
    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Ê CARACTER A CARACTER 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, FAZ
    if (readString.indexOf("?") <0){ //SE ENCONTRAR O CARACTER "?", FAZ
    }
    else //SENÃO, FAZ
    {
    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();
    //AS LINHAS ABAIXO CRIAM A PÁGINA HTML
    client.println("&nbsp&nbsp”);
    client.println(“ EDUARDUINO&nbsp”); //DEFINE A COR DE FUNDO DA PÁGINA
    client.println(“”); //ESCREVE “MASTERWALKER SHOP” NA PÁGINA
    client.println(“

    "); //ESCREVE "CONTROLE DE LED" NA PÁGINA
              client.println(" SENSOR DHT22");
              client.println("
    ");
              client.println("  Temperatura: ");
              client.println(t);
    
              client.println("  Humidade: ");
              client.println(h);
              client.println("%");   
                  Serial.println(" teste humidade");
             Serial.println(h);  
              client.println(""); //TAG HTML QUE CRIA UMA LINHA HORIZONTAL NA PÁGINA
              client.println(""); //TAG HTML QUE CRIA UMA LINHA HORIZONTAL NA PÁGINA
              client.println(""); //FINALIZA A TAG "body" E "html"
              client.stop(); //FINALIZA A REQUISIÇÃO HTTP E DESCONECTA O CLIENTE
                }
               }
              }
            }
          }
     }
  2. vitor às 18:36

    boa tarde tudo bem meu nome e Vitor.
    No esquema de ligação desse circuito tem um Q3 do ENC28J60 QUE NÃO ACHO
    teria outra nomenclatura ? Obrigado

  3. Leonardo Lima às 08:33

    estou tendo problemas pois quando testo o código na IDE do arduino acusa memória insuficiente:

    Arduino: 1.8.13 (Windows Store 1.8.42.0) (Windows 10), Placa:”Arduino Uno”

    In file included from C:\Users\leo_j\OneDrive\Documentos\Arduino\libraries\UIPEthernet/utility/mempool_conf.h:5:0,

    from C:\Users\leo_j\OneDrive\Documentos\Arduino\libraries\UIPEthernet/utility/mempool.h:28,

    from C:\Users\leo_j\OneDrive\Documentos\Arduino\libraries\UIPEthernet/utility/Enc28J60Network.h:28,

    from C:\Users\leo_j\OneDrive\Documentos\Arduino\libraries\UIPEthernet/UIPEthernet.h:35,

    from C:\Users\leo_j\OneDrive\Documentos\Arduino\ligando_lampada_pela_internet\ligando_lampada_pela_internet.ino:1:

    C:\Users\leo_j\OneDrive\Documentos\Arduino\libraries\UIPEthernet/utility/uipopt.h:97:4: warning: #warning “Endianness configured automaticaly.” [-Wcpp]

    #warning “Endianness configured automaticaly.”

    ^~~~~~~

    In file included from C:\Users\leo_j\OneDrive\Documentos\Arduino\libraries\UIPEthernet/UIPClient.h:37:0,

    from C:\Users\leo_j\OneDrive\Documentos\Arduino\libraries\UIPEthernet/UIPEthernet.h:41,

    from C:\Users\leo_j\OneDrive\Documentos\Arduino\ligando_lampada_pela_internet\ligando_lampada_pela_internet.ino:1:

    C:\Users\leo_j\OneDrive\Documentos\Arduino\libraries\UIPEthernet/utility/logging.h:24:2: warning: #warning “You can configure LogObject and ACTLOGLEVEL in ‘utility/logging.h’. More verbosity more memory usage.” [-Wcpp]

    #warning “You can configure LogObject and ACTLOGLEVEL in ‘utility/logging.h’. More verbosity more memory usage.”

    ^~~~~~~

    O sketch usa 19254 bytes (59%) de espaço de armazenamento para programas. O máximo são 32256 bytes.

    Variáveis globais usam 1692 bytes (82%) de memória dinâmica, deixando 356 bytes para variáveis locais. O máximo são 2048 bytes.

    Pouca memória disponível, problemas de estabilidade podem ocorrer.

    avrdude: ser_open(): can’t open device “\\.\COM3”: O sistema n�o pode encontrar o arquivo especificado.

    Problema ao carregar para a placa. Veja http://www.arduino.cc/en/Guide/Troubleshooting#upload para sugestões.

    • Samuel Farias às 23:57

      O seu problema não é memória e sim alguma problema na portam com.

  4. Tiago às 14:26

    Olá, fiz o teste e na rede local funciona 100% acontece que quando faço um direcionamento de porta no roteador para realizar um acesso externo não funciona, porém se fizer esse mesmo esquema com o shield 5100 funciona certo com o acesso externo. Saberia me dizer se tem alguma limitação ou alguma configuração para esse tipo de uso. Estou utilizando o MEGA2560. Desde já agradeço a atenção

    • Grégory Ebertz às 02:39

      Só colocar gateway, sem gateway não cria rota e não aceita o direcionamento…

  5. NALBER LEITE às 22:36

    Valeu Euler! Depois de muito procurar um sketch para rodar no Arduino Mega – encontrei vários, mas não mostrava a página na internet – finalmente encontrei esse que funcionou na primeira tentativa. Obrigado mesmo. Gostaria de saber como alterar o sketch para ler um sensor analógico (temperatura, pressão, intensidade luminosa, etc) sem entrar no mérito do cálculo específico para leitura de cada sensor, mas do código que é comum para leitura de qualquer sensor analógico e se é possível transmitir esses dados para um supervisório tipo SCADA. Desde já agradeço.

    • NALBER LEITE às 10:36

      Explicando melhor: Gostaria de saber como alterar o sketch para ler um sensor analógico (temperatura, pressão, intensidade luminosa, etc) no Arduino cujo sinal é transmitido via rede ethernet (RJ45) de um Módulo de Aquisição de Dados. Sem entrar no mérito do cálculo específico para leitura de cada sensor, mas saber o código que é comum para leitura de qualquer sensor analógico via rede ethernet. Se isso for possível pretendo transmitir esses dados para um supervisório tipo SCADA. O motivo disso é porque não consigo comunicação direta entre esse Módulo de Aquisição e o SCADA (no caso estou utilizando o Elipse E3). Desde já agradeço.

    • bernardo às 13:42

      vc configurou no mega ou no uno: no mega vc ligou cs no pino 53 ou 10

  6. WAGNER LUIZ GOMES PEREIRA às 23:31

    Muito bom …………
    Meus parabéns.
    Aprendi muito……..

    • Euler Oliveira Autor às 08:24

      Olá Wagner.

      Agradeço pelo comentário!

      Vlw!!!