PROBLEMA ETHERNET SHIELD

Buonasera a tutti ragazzi . Sono nuovo del forum e sinceramente non so da dove iniziare per presentarmi etc . Da qui , quindi decido di esporre il mio problema . Sto realizzando una stazione meteo per gli esami di stato . Dapprima avevo puntato su un progetto utilizzando la WIFI SHIELD ma , essendomi arrivata mezza rotta e ritrovandomi a casa la ethernet shield , ho puntato sulla progettazione di essa ma con la ethernet . Il mio sketch è il seguente :

include "DHT.h"

define DHTPIN 2

define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

//includo le librerie wire e del sensore di temperatura e pressione BMP085

include "Wire.h"

include "Adafruit_BMP085.h"

Adafruit_BMP085 bmp; //scl--> A5 sda-->A4

//dichiaro in due variabili i pin del sensore ad ultrasuoni HC-SR04 per misurare... //...l'altezza della neve const int TRIG_PIN = 5; const int ECHO_PIN = 6;

//includo le librerie della ethernet shield

include

include

//variabili per collegarsi a internet byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

IPAddress ip(192,168,50,100); //indirizzo IP disponibile sulla rete

IPAddress myDns(192,168,1,1); //tuo DNS

char server[] = "www.fabbricaopensource.altervista.org"; //sito web

EthernetClient client;

unsigned long lastConnectionTime = 0; //l'ultima volta che ti sei connesso... //...al server in millisecondi boolean lastConnected = false; const unsigned long postingInterval = 60L*1000L; //la L è necessaria per... //...usare i numeri di tipo long

//dichiaro la stringa dove scrivo i dati per caricarli sul web String strURL = "";

void setup() { //inizializzo i sensori sensori dht.begin(); //inizializzo il sensore di umidità bmp.begin(); //inizializzo il sensore di pressione pinMode(TRIG_PIN, OUTPUT); //dichiaro come output il pin trig pinMode(ECHO_PIN, INPUT); //dichiaro come input il pin echo

Serial.begin(9600); //stabilisco una connessione con il pc

delay(1000); //attendo un secondo

Ethernet.begin(mac, ip, myDns);

//invio al pc il mio IP Serial.print("My IP address: "); Serial.println(Ethernet.localIP());

}

void loop() {

if (client.available()) { char c = client.read(); Serial.print(c); }

if (!client.connected() && lastConnected) { Serial.println(); Serial.println("Disconnessione..."); client.stop(); }

if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) { aggiornoDati(); //carico i dati sul server }

lastConnected = client.connected();

//calcolo il punto di rugiada double puntoDiRugiada(double temperatura, double umidita) { double a = 17.271; double b = 237.7; double temp = (a * temperatura) / (b + temperatura) + log(umidita/100); double Td = (b * temp) / (a - temp); return Td; }

void aggiornoDati() //carico i dati sul server { //leggo la luminosità dal pin analogico A0 int luminosita = map(analogRead(pinfotoresistenza), 0, 1023, 0, 100); //eseguo un... //...procedimento che riduce il range da 0-1023 a 0-100... //...per esprimere la luminosità in percentuale

//leggo l'umidità e la scrivo in una variabile float umidita = dht.readHumidity();

//leggo la pressione e la scrivo in una variabile float pressione = bmp.readPressure();

//leggo la temperatura da due sensori, faccio la media e la scrivo in una variabile float temperatura = (bmp.readTemperature() + dht.readTemperature()); temperatura = (temperatura / 2.0);

//misuro l'altezza della neve float neve, durata; //dichiaro la variabile neve e la variabile durata float cmPerMicrosecondi = 0.0331 + ( 0.000062 * temperatura); //calcolo i cm/ms... //...del suono in base alla temperatura digitalWrite(TRIG_PIN, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); //faccio un impulso di dieci microsecondi sul pin trig digitalWrite(TRIG_PIN, LOW); durata = pulseIn(ECHO_PIN,HIGH); //mi metto in ascolto sul pin eco e calcolo la... //...durata dell'impulso neve = (durata*cmPerMicrosecondi/2.0); //calcolo la distanza con la formula... //...durata*(cm/ms)/2, diviso due perchè il suo va, rimbalza contro... //...un oggetto e ritorna,... //...quindi compie due volte il tragitto float menoNeve = 200.0 - neve;

if (client.connect(server, 80)) { Serial.println("Connessione...");

//creo l'url utilizzando una stringa strURL ="GET /meteo/salva.php?temp="; //url strURL+=temperatura; strURL+="&umi="; strURL+=umidita; strURL+="&pres="; strURL+=pressione; strURL+="&lum="; strURL+=luminosita; strURL+="&neve="; strURL+=menoNeve; strURL+="&rug="; strURL+=puntoDiRugiada(temperatura, umidita); strURL+=" HTTP/1.1";

//invio la richiesta al server client.println(strURL); client.println("Host: www.fabbricaopensource.altervista.org"); //sito web client.println("User-Agent: arduino-ethernet"); client.println("Connection: close"); client.println();

lastConnectionTime = millis();

delay(1000); Serial.println(strURL); } else { Serial.println("Errore Connessione"); Serial.println("Disconnessione..."); client.stop(); } }

Lo sketch l'ho trovato su internet ma ovviamente ho modificato i parametri in base al mio server . Il mi problema sta principalmente nella ETHERNET SHIELD . Quando avvio lo sketch compare la scritta : My IP address : 192,168,50,100 , ma successivamente mi compare una scritta , sempre nel monitor seriale , " Errore connessione ..disconnettendo " e ripete queste scritte all'infinito . Non capisco da dove possa derivare il problema . AIUTOOO

Buonasera,
essendo il tuo primo post, ti chiederei cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione … possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il REGOLAMENTO

… poi, in conformità al suddetto regolamento, punto 7, devi editare (in basso a destra del post, bottone More → Modify) il tuo post e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra). Grazie,

Guglielmo

P.S.: E già che devi editare il post, correggi il titolo e togli tutto quel maiuscolo che sui forum equivale ad “URLARE” e … non è molto ben visto :wink:

Oltre le cose di Guglielmo… di solito a trovare un codice e copiarlo senza capirlo bene, equivale a ritrovarsi con problemi, a meno che non sia uno sketch d’esempio. Poi dovresti assegnare all’ethernet shield un ip statico che è meglio, se no ogni volta non trova la scheda e ci vuole un po’ per assegnargli l’indirizzo. Poi cos’è quel sito messo nel client.print? Un tuo sito? Io ho fatto una stazione meteo completa, ho utilizzato i codici html con i client.print per fare il sito, che per fare una cosa semplice vanno già bene :wink:
Ciao!

La pagina del server "www.fabbricaopensource.altervista.org" richiede una login (Username e Password).

Mentre lo Username "arduino-ethernet" è stato inserito nel programma, della Password non c'è traccia.

Gli conviene usare qualche codice html e client.print :wink:

Comunque di quello sketch se ne e' parlato anche qui

https://forum.arduino.cc/index.php?topic=370137.msg2553971#msg2553971

Brunello: Comunque di quello sketch se ne e' parlato anche qui

https://forum.arduino.cc/index.php?topic=370137.msg2553971#msg2553971

Ecco perché è sempre bene capire quello che si copia... Si riesce a fare un lavoro più pulito e funzionale alle proprie esigenze. Ciao!

Immaginavo infatti che tali progetti già fatti sono pieni di errori però , volendo fare un buon progetto di esame , volevo fare una stazione meteo ma essendo poco esperto di Arduino ( purtroppo ) ho voluto prendere un progetto già fatto . Comunque vedendo il sito linkato da Brunello , ho visto che ci sono errori di sintassi nello sketch ( mancano parentesi e altro ) . As_Needed io avevo assegnato un ip statico ( ipv4 ) . Ho seguito delle " GUIDE " su internet ma sempre stesso errore . Tu come hai fatto la tua stazione meteo ? Saluti

@Salvo1997: te l’ho già detto una volta … in conformità al regolamento, punto 7, devi editare (in basso a destra del post, bottone More → Modify) il tuo post e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra).

Quindi edita il tuo post precedente, Grazie.

Guglielmo

Edita il codice come dice Guglielmo per favore, è molto semplice!!
Comunque per la mia stazione meteo, è una stazione meteo completa, ma proprio completa di tutto: pioggia, vento, pressione, temperatura, umidità, vari indici, ad esempio l’indice di calore e tutti gli estremi giornalieri, mensili e annui. Ti metto in allegato lo schema elettrico, se vuoi più informazioni, per ora le trovi QUI, per lo sketch ovviamente il mio funziona per bene… però non posso passartelo di punto in bianco, è preferibile che studi una soluzione, così il progetto è più personale, almeno per quello che vuoi fare! :wink:
Nello schema trovi tutti i collegamenti, compresi quelli del display e dei sensori e c’è scritto pure come si chiamano. Il display è questo
Il mio sito è questo per ora, così almeno vedi tutti i valori che ci sono. (sto lavorando a una nuova soluzione :slight_smile: )
stazione meteo

Per l’ethernet shield se assegni l’ip statico poi nel codice devi mettere quello… di solito è tipo 192.168.1.x
x è un numero che decidi tu e che ovviamente non deve essere usato da un altro dispositivo…
Ciao!

As_Needed: Edita il codice come dice Guglielmo per favore, è molto semplice!!

Beh ... se non lo fa al prossimo post mi vedo costretto a chiudere il thread e poi a cancellarlo ... ... vediamo se così la gente poi capisce e rispetta il regolamento ... ::) Guglielmo

Bisogna anche capire quali sono gli IP della rete. A me pare che questi indirizzi nello sketch presentato al primo post sono assurdi:

IPAddress ip(192,168,50,100); //indirizzo IP disponibile sulla rete
IPAddress myDns(192,168,1,1); //tuo DNS

Se il router (gateway) è x.x.1.1 mi pare improbabile che il singolo PC/Arduino possa avere un ip x.x.50.100 !!

gpb01: Beh ... se non lo fa al prossimo post mi vedo costretto a chiudere il thread e poi a cancellarlo ... ... vediamo se così la gente poi capisce e rispetta il regolamento ... ::) Guglielmo

Purtroppo sì... non capisco cosa ci sia di così difficile a rispettare un regolamento... è semplicemente una cosa civica.

@Nid Infatti è quello che penso anche io, per questo gli dicevo che lui ha messo sullo sketch un indirizzo che di sicuro non centra niente con quello che IPOTETICAMENTE gli ha dato fisso. Ciao!

nid69ita: Bisogna anche capire quali sono gli IP della rete. A me pare che questi indirizzi nello sketch presentato al primo post sono assurdi:

IPAddress ip(192,168,50,100); //indirizzo IP disponibile sulla rete
IPAddress myDns(192,168,1,1); //tuo DNS

Se il router (gateway) è x.x.1.1 mi pare improbabile che il singolo PC/Arduino possa avere un ip x.x.50.100 !!

gia hai ragione..dovrebbe essere 192.168.1.100 se non sbaglio... Danix!

//includo le librerie della ethernet shield

include

include

??

EDITA IL CODICE NEL TUO PRIMO POST :slight_smile:
É semplice farlo con i tasti <>

As_Needed:
EDITA IL CODICE NEL TUO PRIMO POST :slight_smile:
É semplice farlo con i tasti <>

… è sparito … ::slight_smile:

Guglielmo