Boa Tarde!

 

Sou Deficiente Físico cadeirante e comprei um kit há algum tempo com um Arduino UNO com Ethernet Shield para poder acender as lâmpadas da casa pelo computador e celular, ele já está instalado e funcionando, mas estou tendo um pequeno probleminha na conexão dele com o roteador.

O Arduino e o Roteador estão ligados na energia por um filtro de linha que é desligado toda noite, mas quando é ligado novamente no dia seguinte, o Arduino não consegue realizar automaticamente a conexão com o Roteador e com isso tenho que apertar o botão Reset do Arduino para refazer a conexão. Se o filtro de linha é desligado e ligado novamente após 30 minutos ou 1 hora, esse problema não acontece.

Já tentei várias alternativas para corrigir esse problema, mas até agora nenhuma funcionou, e estou colocando abaixo o que já tentei fazer:

 

- Defini um IP Fixo para o Arduino nas Configurações DHCP do Roteador;

- Coloquei no Loop uma verificação da conexão pra tentar reconectar se necessário, mas além de não funcionar, aparecia um endereço MAC diferente do programado no Arduino nas informações da Rede Local:

long previousMillis = 0;
long interval = 300000;

void loop()
{
// aqui fica o código que deve estar rodando todo o tempo.
unsigned long currentMillis = millis();

if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;

if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
}
}
}

 

- Coloquei um Delay de 10 segundos no início do Setup do código do Arduino para dar tempo de o Roteador iniciar completamente.

Exibições: 3622

Responder esta

Respostas a este tópico

cara n sei se entendi direito, mas vc precisa fazer um reset pelo codigo seria isso? se for da uma procurada sobre watchdog

Não é bem isso, o Arduino e o Roteador estão ligados na energia por um filtro de linha que é desligado toda noite, mas quando é ligado novamente no dia seguinte, o Arduino não consegue realizar automaticamente a conexão com o Roteador, com isso eu tenho que apertar sempre um botãozinho que faz o Arduino reiniciar, pois só assim a conexão é feita corretamente, mas aí eu queria saber o que posso fazer para a conexão ser feita normalmente após o Arduino e o Roteador serem ligados.

cara teoricamente o lance é que o arduino tenta fazer a conexão com o router, mas ele no caso leva mais tempo pra ligar do que o arduino, então ele n ta achando o danado, DEVE ser isso o lance, da um delay no arduino antes dele iniciar a conexão com o router, calcula mais ou menos o tempo que ele leva pra ligar, sei la, é so uma tentativa... depois fala ae o que aconteceu...

Eu já tentei fazer assim:

// ************** Configurações da comunicação pelo Ethernet Shield *******************

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x00 };
const byte ip[] = { 192,168,1,200 }; // ip que o arduino assumirá
const byte gateway[] = { 192,168,1, 2 }; // ip do roteador
const byte subnet[] = { 255, 255, 0, 0 }; // mascara de rede

EthernetServer server(8081); // Cria o servidor na porta 8081

void setup() {


delay(10000); // espera 10 segundos.

Serial.begin(9600);
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();

 

}

Mas assim que o código foi enviado para o Arduino, deu pra perceber que a conexão foi feita antes dos 10 segundos.

tenta aumenta o tempo do delay......coloca 1 minuto e testa

O problema que estou tendo é o mesmo dos 2 tópicos abaixo, mas eu não tenho muito conhecimento pra mexer na placa e aí queria saber se tem algo que possa ser feito por código.

Power-on reset and ethernet shield?

No TCP/IP link,without pressing the reset button

Eh, não conhecia o problema, mas parece sério.

No final dos posts fala do lançamento de uma nova versão da placa que vai ter um integrado pra controlar o reset:

http://blog.arduino.cc/2010/08/09/updated-ethernet-shield-micro-sd-...

Temo que não tenha muito jeito...

Por outro lado o consumo de um roteador e de um arduino é muito pequeno, será que não era mais fácil deixar ligado ? Ou mesmo criar um circuito que seria parecido com o watchdog, mas ativado pela falta de rede. Algo como vc setar (ou resetar) um pino se houver falha na rede por mais de 10s e esse pino fecharia um transistor pra dar o reset físico.

Ou mesmo colocar um capacitor bem maior no reset, por ex 10uF.

Então, eu não posso deixar o filtro de linha sempre ligado pois além do Arduino e do Roteador, tem o Modem, o aparelho da TV a Cabo e uma Smart TV.

Eu não tenho muito conhecimento pra mexer na placa e aí queria ver algo que possa fazer pelo código.

Eu pensei em uma ideia, mas preciso saber se é possível chamar o Reset pelo código e se tem como salvar um registro que não é perdido ao resetar o Arduino.

A ideia seria fazer +/- a seguinte programação:

boolean registroReset;

if (registroReset == false)
{
registroReset = true;
* Chama Reset
}
else
{
registroReset = false;
}

* Continua a execução

Nao sei se resetar assim resolve:

http://labdegaragem.com/forum/topics/reset-interno-arduino

A questão é que seria um reset do processador e nao do shield, mas vale tentar.

Diria que pra ficar 10 vc poderia incluir na inicializaçao um loop testando se conectou. Caso nao conecte depois de n segundos vc dá um reset.

Utilizando o método abaixo:

void software_Reset()
{
asm volatile (" jmp 0");
}

Irá resetar também o Ethernet Shield ou só o Arduino?

E como posso fazer pra verificar a conexão? Tentei assim, mas não funcionou:

long previousMillis = 0;
long interval = 300000;

void loop()
{
// aqui fica o código que deve estar rodando todo o tempo.
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
}
}
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço