Bom dia pessoal.

Meu nome é Renato e sou novo no site. Enfim..

Ontem comprei um Shield de Ethernet baseado no Enc28j60 e estou tentando ligar ele no meu Arduino Mega (2560), usando o exemplo Hello World (com esta biblioteca: link), porém ele funciona somente na primeira requisição (estou usando ip fixo) e nas outras ele para de responder (isto é visível também pelo ping, ou seja, quando ligo o arduino ele pinga normal até a primeira requisição, depois para de pingar).

Para entender melhor, o que acontece é o seguinte: 

- Enviei o exemplo para o Arduino, fiz as ligações conforme a imagem: 

- Pinguei o ip que setei estático e ele respondeu.

- Acessei o ip via browser e ele me retornou a pagina que está como resposta (apenas um Hello World).

- Quando tento acessar novamente ele para de responder (inclusive para de pingar também).

Ou seja, só funciona quando eu envio a primeira requisição ao ip, depois ele para de responder..

Segue o código do exemplo do hello world da biblioteca acima (que estou usando):

// A simple web server that always just says "Hello World"

#include "etherShield.h"
#include "ETHER_28J60.h"

static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // this just needs to be unique for your network,
// so unless you have more than one of these boards
// connected, you should be fine with this value.

static uint8_t ip[4] = {192, 168, 100, 50}; // the IP address for your board. Check your home hub
// to find an IP address not in use and pick that
// this or 10.0.0.15 are likely formats for an address
// that will work.

static uint16_t port = 80; // Use port 80 - the standard for HTTP

ETHER_28J60 ethernet;

void setup()
{
ethernet.setup(mac, ip, port);
}

void loop()
{
if (ethernet.serviceRequest())
{
ethernet.print("<H1>Hello World</H1>");
ethernet.respond();
}
delay(100);
}

Desculpem, não achei a tag de códigos..

Alguém pode me ajudar?

Agradeço desde já.

Exibições: 2272

Responder esta

Respostas a este tópico

sim sim, apesar que quando eu uso o enc em 3v ele contuma travar, ja em 5 não :S

essa parte da url, eu ja tenho pronta

ip/?P=01

por algum motivo a forma q eu consigo recuperar traz P=01 e não so o 1, mais isso é o de menos kkkk, isso vai ficar por bvaixo do capo... vou testar aqui, qualquer coisa volto para trocar mais algumas ideias haha

Obrigado

Eita, estranho... Vou olhar o datasheet depois para ver a voltagem correta.. Pelos sites que vi eram 3.3 mesmo...

Com relação ao atributo passado na URL, deve ser o tratamento que esta fazendo a ela..

Cara se você puder dar uma ajuda ai.

Eu tenho a seguinte função

void conexaowifi(){

// criando conexão com o cliente

if (ethernet.serviceRequest())
{
char* param;
if(param = ethernet.serviceRequest()){
//output chars to serial port
Serial.print(param);
//if HTTP request has ended
if (1)
{

ethernet.print("<h2>Controle mobile!</h2>");
ethernet.print("Ruido no ambiente: ");
ethernet.print(analogRead(sensorPin));
ethernet.print("<p>");

//if(auxReadString.indexOf("P=01")>=0)
if(testeEnc == 1){
if (a==0){
ethernet.print("<a href='?L=01'><button style='border: 2px solid #990000;' type='button'><b>Lampada de teto</b></button></a><p>");
}else{
ethernet.print("<a href='?L=01'><button style='border: 2px solid #00CD00;' type='button'><b>Lampada de teto</b></button></a><p>");
}
//fim de uma linha

if (b==0){
ethernet.print("<a href='?L=02'><button style='border: 2px solid #990000;' type='button'><b>Ventilador</b></button></a><p>");
}else{
ethernet.print("<a href='?L=02'><button style='border: 2px solid #00CD00;' type='button'><b>Ventilador</b></button></a><p>");
}

if (c==0){
ethernet.print("<a href='?L=03'><button style='border: 2px solid #990000;' type='button'><b>Tomada</b></button></a><p>");
}else{
ethernet.print("<a href='?L=03'><button style='border: 2px solid #00CD00;' type='button'><b>Tomada</b></button></a><p>");
}
ethernet.print("Proxima Pagina");
}


if (d==0){
ethernet.print("<a href='?L=04'><button style='border: 2px solid #990000;' type='button'><b>Jardim</b></button></a><p>");
}else{
ethernet.print("<a href='?L=04'><button style='border: 2px solid #00CD00;' type='button'><b>Jardim</b></button></a><p>");
}


if (e==0){
ethernet.print("<a href='?L=05'><button style='border: 2px solid #990000;' type='button'><b>Luz banheiro</b></button></a><p>");
}else{
ethernet.print("<a href='?L=05'><button style='border: 2px solid #00CD00;' type='button'><b>Luz banheiro</b></button></a><p>");
}

if (f==0){
ethernet.print("<a href='?L=06'><button style='border: 2px solid #990000;' type='button'><b>Garagem</b></button></a><p>");
}else{
ethernet.print("<a href='?L=06'><button style='border: 2px solid #00CD00;' type='button'><b>Garagem</b></button></a><p>");
}

if (g==0){
ethernet.print("<a href='?L=07'><button style='border: 2px solid #990000;' type='button'><b>Ar condicionado</b></button></a><p>");
ethernet.print("<a href='?L=AC'><button style='border: 2px solid #990000;' type='button'><b>Subir temperatura</b></button></a><p>");
ethernet.print("<a href='?L=BC'><button style='border: 2px solid #990000;' type='button'><b>Abaixar temperatura</b></button></a><p>");
}else{
ethernet.print("<a href='?L=07'><button style='border: 2px solid #00CD00;' type='button'><b>Ar condicionado</b></button></a><p>");
}

//clearing string for next read
reles(param);
ethernet.respond();

}
}
}
}

So que não estou conseguindo fazer funcionar no enc. Alguma ajuda?

Obrigado.

Como assim não consegue funcionar no enc? Qual erro da?

Na biblioteca que disponibilizem para download tem uns exemplos bem simples.

Mudei a diretriz do projeto kkk, eu usava html no arduino, mudei, decidir criar uma pagina separada para o pc e para o android que envia o seguinte 

http://XXX.XXX.1.15/?L=01 por exemplo.

E o arduino so trata.

O unico problema que estou tendo agora é o problema que ele so funciona com 5v, com 3 não. 

Vc tem alguma sugestão pra liga-lo e não queima-lo? kkkk

Muito obrigado.

Não sei o porque está funcionando apenas com 5v... No datasheet diz que funciona com 3.3V...

Já conseguiu resolver o problema?

Era um erro muito tosco meu. Eu ligava no 3v, mais usava o graund compartilhado com 5v.foi só usar um gnd que estava neutro q funcionou hahaha

heiuehiuehiuehue

Vivendo e aprendendo.. xD

Olá,

Desculpe perguntar, mas eu tenho esta mesma placa ENC28J60 e um Garagino alimentados por 3.3v e um módulo relé que é alimentado por 5v. Se eu não compartilhar o ground da alimentação 3.3v com o da 5v o conjunto todo não funciona. 

Você poderia explicar melhor sobre este ground neutro? Talvez eu esteja fazendo alguma ligação incorreta no meu circuito.

Obrigado.

Não conheço o garagino, então vou te explicar em um contexto geral, pelo que aprendi na faculdade.

Digamos que vc alimente uma protoboard somente com uma fonte externa, daquelas que tem um vcc 5v e um gnv, ai agora vamos colocar um rele nessa protoboard, vc ligou o polo positivo do rele na trilha positiva da protoboard que esta alimentada pela fonte externa, e faz o mesmo com o negativo. Agora você passa somente o fio de sinal para o arduino! Você vai reparar que não vai funcionar, agora se vc ligar um fio da trilha negativa no gnd do arduino vai.

Isso acontece por que o gnd funciona com uma base pro arduino saber em qual "frequência" o rele esta trabalhando, quando você ligou a trila negativa da protoboard no arduino você esta falando pro arduino você esta trabalhando com 5 v, e que se ele receber 2v na porta é considerado nível logico baixo, e se receber 3 já é nível logico alto. Agora o problema, se você liga um componente de 3v do outro lado da protoboar, que esta sendo alimentada por uma outra fonte externa de 3v com o seu próprio gnd, se você ligar o gnd na mesma trila de gnd que esta o rele(5v) não vai queimar o componente, mais o fio de sinal não vai saber a "frequência", por que o componente vai mandar 2v, que para ele é nível logico alto, mais como a base de comparação é 5v, o arduino via intender que é nível logico baixo, por isso precisa de um gnd próprio.

 

Ficou meio extensa e explicação, mais foi seguindo este raciocínio que consegui fazer o meu enc funcionar com o meu arduino.

 

Qualquer duvida pergunte.

Obrigado pela resposta.

Acho que entendi.

Na verdade, todos os elementos do meu circuito (ENC28J60, Garagino e sinal de controle do relé) estão trabalhando com tensão de nível lógico de 3.3V, portanto todos devem ter o mesmo ground de referência como você bem explicou acima. É que confundi a tensão para alimentação da bobina do relé, que é de 5V com a tensão de nível lógico que é de 3.3V. A tensão de acionamento da bobina do relé não tem nada haver com a tensão de nível lógico.

Caso tenha alguma problema, manda uma foto do seu circuito que conferimos hehe

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço