Caros Amigos,

Estou tentando iniciar um projetinho usando Ethernet Shield W5100 com Sd.

Já pesquisei bastante e não consegui encontrar ainda a solução para o meu problema!!

Segue os problemas:

1) Quando eu tento fazer o upload do programa com a Ethernet Shield conectada, eu recebo a msg abaixo:

avrdude: stk500_getsync(): not in sync: resp=0x00

2) Quando eu abro o Serial Monitor com o Ethenet Shield Conectado....não aparece nenhuma informação.

Se eu abrir o Serial Monitor sem o Ethernet Shield conectado aparece a mensagem "

server is at 0.0.0.0"

3) Parece que ao conectar a Ethernet Shield ele perde a conexão da porta COM5 a qual eu utilizo sempre e neste momento não aparece nada no Serial Monitor.

4) E ainda não consegui fazer a Ethernet Shield ser reconhecida pelo roteador.

Peço algumas dicas para tentar solucionar esse problema.

O programa utilizado é o WebServer

Desde já agradeço atenção e disponibilidade em ajudar o proximo!

Abraços!!

Bruno

/*
Web Server

A simple web server that shows the value of the analog input pins.
using an Arduino Wiznet Ethernet shield.

Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
* Analog inputs attached to pins A0 through A5 (optional)

created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe

*/

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,99);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}


// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}


void loop() {
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// add a meta refresh tag, so the browser pulls again every 5 seconds:
client.println("<meta http-equiv=\"refresh\" content=\"5\">");
// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print("analog input ");
client.print(analogChannel);
client.print(" is ");
client.print(sensorReading);
client.println("<br />");
}
client.println("</html>");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println("client disonnected");
}
}

Exibições: 12320

Responder esta

Respostas a este tópico

Oi Bruno,

Veja bem, não é para trocar o MAC para vários tipos, mas sim para aquele que vem escrito atrás de sua EthernetShield. Cada placa de rede do mundo tem um MAC diferente (nunca se repete mesmo).

Outra coisa:

Quando eu ligo um cabo ethernet direto do Windows 7 para a placa, não funciona legal. Mas se eu coloco um switch (ou hub) e conecto os dois à eeste switch aí funciona.

 

1) Quando eu tento fazer o upload do programa com a Ethernet Shield conectada, eu recebo a msg abaixo:

avrdude: stk500_getsync(): not in sync: resp=0x00

# Se houver algum cabo ou hardware conectado aos pinos  1 e 2 (tx/rx) do arduino ele nao grava. Já aconteceu comigo.

2) Quando eu abro o Serial Monitor com o Ethenet Shield Conectado....não aparece nenhuma informação.

Se eu abrir o Serial Monitor sem o Ethernet Shield conectado aparece a mensagem "

server is at 0.0.0.0"

# Primeiro seguiremos com o problema de hardware.

3) Parece que ao conectar a Ethernet Shield ele perde a conexão da porta COM5 a qual eu utilizo sempre e neste momento não aparece nada no Serial Monitor.

# faça seguinte analise: sem o Wiznet sua porta funciona corretamente (sim), e com Wiznet, vc perde conexao com ela (sim) - É bem provavel que seu Wiznet esteja com problema!

4) E ainda não consegui fazer a Ethernet Shield ser reconhecida pelo roteador.

# Primeiro verifique os itens 1 e 3 descritos por voce. Depois vamos analisar o seu codigo para verificar a conexao com a rede ethernet:

na parte do codigo:

byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };     ESTE É O MAC ADDRESS IMPRESSO ATRAS DO SEU WIZNET???? Esse endereco deve coincidir com o da etiqueta.

Vc deve ter algo tipo 90 - A2 - FF - 0D - 74 - 2B - Seu MAC vai ser { 0x90, 0xA2, 0xFF, 0x0D, 0x74, 0x2B }


IPAddress ip(192,168,0,99); ESTE IP DEVE ESTAR NO RANGE DA SUA REDE E NAO PODE ESTAR SENDO USADO POR OUTRA MAQUINA.

Primeiro resolva seu problema de HARWARE, Depois verifique seu codigo.

outras maneiras de verificar se seu Wiznet se conectou a rede é:

1. Vá em iniciar/executar/ digite "cmd" sem aspas. digite ping e o ip do seu wiznet (C:/ping 192.168.0.99)

O cmd do windows vai fazer um loop no wiznet e retornar um OK ou Failed

2. Abra o internet explorer e digite o ip do wiznet. Se imprimir alguma informacao na tela, seu wiznet esta online!

Bruno quando for usar o ethernet shield use uma versao de IDE superior a18.

Procure isolar o problema.precisa saber se o seu shield esta realmente funcionando ou se realmente e compativel com a biblioteca padra do arduino.Teste um aplicativo que envolva apenas o seu ethernet shield e um site como o google ou twitter existem codigos para o shield se conectar com esses sites assim se vc consegue se comunicar o seu shield esta perfeito.

Depois disso se vc estatestando  uma aplicacao cliente-servidor com seu pc e o arduino deve ter certeza que o arduino e seu pc estao na mesma rede.Utilize o comando ping entre os ips da sua maquina e o arduino.Se nao consegue pingar entre os dispositos nada funcionara.

 Eu comprei um ethernet shiel e consegui postar msg no twitter e enviar comandos para o arduino, só que ou uma coisa ou outra, quando tento um programa que poste msg e leia comando no twitter não funciona, este é o codigo:

 /*
  Twitter Client

 Esse sketch conecta ao Twitter usando um Ethernet shield. Ele vasculha o XML
 retornado, e procura por <text>esse é um tweet</text>

 Circuito:
 * Ethernet shield ligado nos pinos 10, 11, 12, 13
 Esse codigo é de dominio publico.
 */
// Incliur as bibliotecas
#include <SPI.h>
#include <Ethernet.h>
#include <Twitter.h>
// Declarar as variáveis
int ArCasal = 7;
int ArLuiza = 6;
int RedeEletrica = 5;
int LuzExterna = 4;
int TemperaturaCasal = A0;
int TemperaturaLuiza = A1;
int SensorExterno = A2;
int SensorSala = A3;
int SensorQuarto = A4;
// leitura de temperaturas
int analogPin = 0; // lm35 está ligado ao a entrada analogica 0
int valAnalog ; // variavel para armazenar o valor analogico lido
float temperatura ;
int tmp;
float tempControle = 26.0; // temperatura ideial
float ttp = 0.5; // intervalo entre on off
// entre com MAC e IP para seu controlador.
// O IP vai depender da sua rede:
byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01};
IPAddress ip(192,168,2,20);
// Your Token to Tweet (get it from http://arduino-tweet.appspot.com/)
Twitter twitter("MEU_TOKEN");
// Message to post
char msg[] = "Ar Condicionado Casal DESLIGADO";
char msg1[] = "Ar Condicionado Casal LIGADO";
char msg2[] = "Ar Condicionado Luiza LIGADO";
char msg3[] = "Ar Condicionado Luiza DESLIGADO";
char msg4[] = "Energia Elétrica LIGADA";
char msg5[] = "Energia Elétrica DESLIGADA";
char msg6[] = "Iluminação Externa LIGADA";
char msg7[] = "Iluminação Externa DESLIGADA";

// inicia a biblioteca:
EthernetClient client;
const unsigned long requestInterval = 20000;  // delay entre pedidos
char serverName[] = "api.twitter.com";  // pagina do twitter URL
boolean requested;                   // se vc fez um pedido des de quando conectou
unsigned long lastAttemptTime = 0;   // ultima vez que vc estava conectado em milesegundos
String currentLine = "";            // string para guardar texto de servidor
String tweet = "";                  // string para guardar o tweet
boolean readingTweet = false;       // se vc está atualmente lendo o tweet

void setup()
{
  pinMode (ArCasal, OUTPUT);
  pinMode (RedeEletrica, OUTPUT);
  pinMode (ArLuiza, OUTPUT);
  pinMode (LuzExterna, OUTPUT);
  pinMode (TemperaturaLuiza, INPUT);
  pinMode (TemperaturaCasal, INPUT);
  pinMode (SensorSala, INPUT_PULLUP);
  pinMode (SensorExterno, INPUT_PULLUP);
  pinMode (SensorQuarto, INPUT_PULLUP);
 
  // reserva espaço para as strings:
  currentLine.reserve(256);
  tweet.reserve(150);

 // abre comunicação serial e espera a porta abrir:
  Serial.begin(9600);
  analogReference(INTERNAL); // 1,1vots
  // tenta conexão DHCP:
  Serial.println("Tentando pegar um IP usando DHCP:");
  if (!Ethernet.begin(mac))
  {
    // se o  DHCP falhar, começa tentar manualmente:
    Serial.println("não foi possivel pegar um IP usando DHCP, tentando manualmente");
    Ethernet.begin(mac, ip);
  }
  Serial.print("Meu IP:");
  Serial.println(Ethernet.localIP());
  // Conecta no Twitter:
  connectToServer();
}

void loop()
{
  // Leitura de temperatura
  tmp = 0;
for(int x = 0; x <100; x++){ // o loop faz 100 leituras para diminuir os erros
valAnalog = analogRead(analogPin); // Le o pino de entrada analogica 5

tmp = tmp + valAnalog;
}

temperatura= (( 1.1 * tmp * 100.00) / 1024.00) / 100 ; // calcula a temperatura

Serial.println(temperatura,1); // Envia os dados pela porta serial
  // Converter int para char
  int graus = digitalRead(A0);
  String temperatura = "Temperatura quarto: "; temperatura += graus;
  char temperaturaquarto[50]; temperatura.toCharArray(temperaturaquarto, 50);
    
  //Escrever post
  Serial.println("connecting ...");
 
 int sensorsala = digitalRead(SensorSala);
 if (sensorsala == HIGH){
  if (twitter.post(temperaturaquarto)) {
    // Specify &Serial to output received response to Serial.
    // If no output is required, you can just omit the argument, e.g.
    // int status = twitter.wait();
    int status = twitter.wait(&Serial);
    if (status == 200) {
      Serial.println("OK.");
    } else {
      Serial.print("failed : code ");
      Serial.println(status);
    }
  } else {
    Serial.println("connection failed.");
}}
 
  //Leitor de post
  if (client.connected())
  {
    if (client.available())
    {
      // ler os bytes de entrada:
      char inChar = client.read();

      // adiciona os bytes de entrada ao final da linha:
      currentLine += inChar;

      // se vc receber "newline" nova linha, limpa a linha:
      if (inChar == '\n')
      {
        currentLine = "";
      }
      // se a linha atual terminar com <text>, vai ser seguida do tweet:
      if ( currentLine.endsWith("<text>"))
      {
        // o tweet esta começando. Limpa a string tweet:
        readingTweet = true;
        tweet = "";
      }
      // se vc esta atualmente lendo os bytes do tweet, adicona eles a String do tweet,
      if (readingTweet)
      {
        if (inChar != '<')
        {
          tweet += inChar;
        }
        else
          {
          // se vc receber um caracter "<", chegou ao final do tweet:
          readingTweet = false;
          Serial.println(tweet);
            if(tweet==">liga")
             {
              digitalWrite(ArCasal, HIGH);
              Serial.println("Computador .215 LIGADO");
             }   
            if(tweet==">desliga")
             {
              digitalWrite(ArCasal, LOW);
              Serial.println("Computador .215 DESLIGADO");
             }   
            if(tweet==">status")
             {
              Serial.print("Ar Condicionado está  ");
              int estado = digitalRead(ArCasal);
              if (estado==1)
                {
                 Serial.print("Ligado ");
                }
              if (estado==0)
                {
                 Serial.print("Desligado ");
                }
              Serial.println(estado);
           if (twitter.post(msg)) {
    // Specify &Serial to output received response to Serial.
    // If no output is required, you can just omit the argument, e.g.
    // int status = twitter.wait();
    int status = twitter.wait(&Serial);
    if (status == 200) {
      Serial.println("OK.");
    }  
           }
          // fecha conexão com servidor:
          client.stop();
        }}}}
  else if (millis() - lastAttemptTime > requestInterval)
  {
    // se vc não esta conectado, e passou 2 minutos des da sua ultima conexão
    // então tenta reconectar:
    connectToServer();
  }}}
void connectToServer()
{
  // tenta conectar e espera em milesegundos:
  Serial.println("conectando no servidor...");
  if (client.connect(serverName, 80))
  {
    Serial.println("fazendo pedido de HTTP...");
    // faz pedido HTTP GET para o twitter:
    client.println("GET /1/statuses/user_timeline.xml?screen_name=MEU_TWITTER&count=1 HTTP/1.1");
    client.println("HOST: api.twitter.com");
    client.println();
  }
  // observa o tempo dessa tentativa de conexão:
  lastAttemptTime = millis();
}

Bom dia, tive problema parecido com a minha W5100 tinha uma q funcionava 100% até o momento em q ela encaixou bem no slot e fechou curto com o Conector USB e pifou, ai comprei outro, porem tinha problema com conexão tbm e descobri q era alimentação, no meu pc o Shield nao funfa so o arduino (Mega), No Not ambos funcionam, pra mim poder usar no pc preciso conectar a fonte externa ai funciona 100%.

Faz um teste ai.

E ai blz Bruno..

Pode ser que seu Ethernet Shield esteja com algum problema nos pinos.. aqui já achei um problema assim..

Iniciei a serial e segurei os pinos e fui resetando. No meu caso descobri que os pinos de trás "ICSP" do Shield estavam com problemas na solda.

msm na placa nova.. 

Estou tendo o mesmo problema meu Ethernet Shield funcionava perfeitamente, fui fazer uma ligação com um Monster Shield e do nada parou de funcionar tanto o Arduino Mega 2560 que só me retorna timeout quando tento fazer upload de qualquer codigo fonte, coloquei o UNO que tenho aqui em casa e subiu normalmente mas tambem parou de funcionar o Ethernet sempre me retornando 0.0.0.0, terei de comprar outra pelo visto.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço