Nesta prática você vai aprender a utilizar o Módulo Expansor…

Como usar com Arduino – Módulo Ethernet ENC28J60 (Web server)
– Descrição:
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:
– 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.
– 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:
– 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.
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 |
#include <SPI.h> //INCLUSÃO DE BIBLIOTECA #include <UIPEthernet.h> //INCLUSÃO DE BIBLIOTECA byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //ATRIBUIÇÃO DE ENDEREÇO MAC AO ENC28J60 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 EthernetServer server(80); //PORTA EM QUE A CONEXÃO SERÁ FEITA int ledPin = 8; //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); //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Ê 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 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(); //AS LINHAS ABAIXO CRIAM A PÁGINA HTML 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" 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></html>"); //FINALIZA A TAG "body" E "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: Node-RED : Ferramentas e suas funcionalidades
Próxima postagem: Como usar com Arduino – Sensor de Pressão e Temperatura BMP280
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("  ”);
client.println(“ EDUARDUINO ”); //DEFINE A COR DE FUNDO DA PÁGINA
client.println(“”); //ESCREVE “MASTERWALKER SHOP” NA PÁGINA
client.println(“
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
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.
O seu problema não é memória e sim alguma problema na portam com.
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
Só colocar gateway, sem gateway não cria rota e não aceita o direcionamento…
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.
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.
ola nalber conseguiu resolver?
vc configurou no mega ou no uno: no mega vc ligou cs no pino 53 ou 10
Muito bom …………
Meus parabéns.
Aprendi muito……..
Olá Wagner.
Agradeço pelo comentário!
Vlw!!!