Go Down

Topic: Arduino nuova Ethernet shield connessione al server client.connect(server,80) (Read 1 time) previous topic - next topic

enri91

Ciao a tutti ho acquistato ieri due nuove shield per arduino, la nuova ethernet e quella gsm/gprs.
Ho dei problemi con la prima:
praticamente non funziona quando faccio if(client.connect(server, 80)) come se non riuscisse a comunicare con il server.
>vedi sketch sotto riportato ed allegato<

Se provo a stampare sulla seriale il risultato di questa funzione infatti mi stampa 0(false: connessione fallita) e non 1(true: connessione stabilita).
Vi allego lo sketch.

Ho usato un sensore di temperatura TMP102 per chi volesse saperlo, grazie a tutti, devo riuscire a capire come funziona la connessione ad un server.

p.s avete notato che la nuova ethernet shield se implementata su arduino uno ha gli ultimi due piedini dei pin analogici e digitali che escono?

Code: [Select]

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

EthernetClient client;

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x0B, 0xA0 };
//byte ip[] = { 192,168,1,80 };
//byte server[] = { 173,194,35,152 };

IPAddress server(173,194,35,152); // google

int tmp102Address = 0x48;

void setup(){
 
// Ethernet.begin(mac, ip);
  Serial.begin(9600);
  Serial.println("Inizializzata la seriale!");
 
  Serial.println("Inizializzo I2C:");
  Wire.begin();
 
  Serial.println("Inizializzo Ethernet:");
  if (Ethernet.begin(mac) == 0){
    delay(2000);
    Serial.println("Fallita la configurazione Ethernet usando DHCP");
  }

  Serial.print("Il mio IP e': ");
  Serial.println(Ethernet.localIP());
 
Serial.println("Inizio connessione:");
  if(client.connect(server, 80)){
    Serial.print("Connesso.");
    client.println("GET /search?q=arduino HTTP/1.0");
    client.println();
  }
  else {
    // Se non si connette al server
    Serial.println("connection failed");
  }
 
}

void loop(){

Serial.println("Inizia il loop. . .");
  delay(1000);
  if (connessione==1 && client.available()){
     Serial.println("Connessione del client. . .");
   
  float celsius = getTemperature();
  Serial.print("Temperatura: ");
  Serial.print(celsius);
  Serial.println(" C");
   
  } else
        {
          Serial.println("Connessione del client fallita!");
        }
       
  delay(2000);
}
//////// FUNZIONE TEMPERATURA TMP102
float getTemperature(){
  Wire.requestFrom(tmp102Address,2);

  byte MSB = Wire.read();
  byte LSB = Wire.read();

  //it's a 12bit int, using two's compliment for negative
  int TemperatureSum = ((MSB << 8) | LSB) >> 4;

  float celsius = TemperatureSum*0.0625;
  return celsius;
}


GRAZIE A TUTTI!  :)

brunol949


p.s avete notato che la nuova ethernet shield se implementata su arduino uno ha gli ultimi due piedini dei pin analogici e digitali che escono?

Forse non sei al corrente che esiste un Arduino UNO Rev.3
Le mie opere : Flusso correnti nell'impianto fotovoltaico http://arduino.webveneto.net/energy_control/     PING ed E.Mail http://arduino.web

PaoloP

Code: [Select]
void setup(){
 
// Ethernet.begin(mac, ip);
 Serial.begin(9600);
 Serial.println("Inizializzata la seriale!");

Io inserirei una pausa prima dell'inizializzazione della seriale. Pare che molti non riescano a riprogrammare Arduino poiché impegna la seriale all'avvio.

Code: [Select]
Serial.println("Inizializzo Ethernet:");
 if (Ethernet.begin(mac) == 0){
   delay(2000);
   Serial.println("Fallita la configurazione Ethernet usando DHCP");
 }

Non capisco il senso di mettere la pausa dentro l'if.

Code: [Select]
Serial.println("Inizio connessione:");
 if(client.connect(server, 80)){
   Serial.print("Connesso.");
   client.println("GET /search?q=arduino HTTP/1.0");
   client.println();
 }
 else {
   // Se non si connette al server
   Serial.println("connection failed");
 }

Questo codice è inutile nel setup a meno che non cerchi di effettuare la connessione all'accensione di Arduino, ma beccare l'if è questione di millisecondi. Il risultato sarà sempre "connessione fallita".
Oppure metti un while finché qualcuno non si collega.

Code: [Select]

void loop(){
Serial.println("Inizia il loop. . .");
 delay(1000);
 if (connessione==1 && client.available()){
    Serial.println("Connessione del client. . .");
}

Mi sono perso per strada la variabile connessione. Dove la inizializzi? Il compilatore dovrebbe segnarti l'errore.

enri91


Mi sono perso per strada la variabile connessione. Dove la inizializzi? Il compilatore dovrebbe segnarti l'errore.


Scusa la variabile connessione era il risultato della funzione client.connect(server, 80) se tornava 1 era connesso.
Poi l'ho tolta e mi sono dimenticato di toglierla dalla condizione dell'if.
La connessione la svolgo nel setup perché così rimane aperta finché non decido io di chiuderla.
Ad esempio devo inviare 10 dati, se dovessi scrivere la client.connect nel loop andrò a fare la richiesta di connessione ogni volta che mando un dato per un totale di 10 volte, se i dati da inviare fossero più di 10? ma 1000?
Mentre se la scrivo nel setup, apro la connessione, invio i miei N dati in loop senza però richiedere la connessione. Nel loop poi andrò a chiudere la mia connessione terminato l'invio dei dati.
Il problema però rimane invariato...Google mi permette di connettermi al suo indirizzo ip tramite una client.connect(server,80) ?
Rimane in ascolto della mia richiesta di connessione o me la rifiuta?

Go Up