Go Down

Topic: Ethernet shield comunicazione con pagina web (Read 7987 times) previous topic - next topic

dr4gone

no, per ora ho caricato le immagini su un dominio esterno che possiedo, ma conto con il tempo di provare a usare una micro sd, dato che ho l'ethernetshield nuova, quella che ha anche lo slot MicroSd...

Vediamo cosa uscirà fuori.
Al momento sto cercando di capire come usare il millis() al posto del delay in delle azioni concatenate che richiedono tempi di attesa lunghi.. dai 30 ai 60 secondi e anche più.

Ma per questo eventualmente apro un altro post, almeno dividiamo un po i problemi :D

pitusso

..e bravo dr4gone!
Complimenti per l'obiettivo raggiunto!


dr4gone

Grazie mille. Stasera se ho tempo apro un altro post inerente alla gestione del millis() al posto del delay.
E' uno strumento potente, ma non mi quadra tanto, vediamo se con qualche aiuto riesco a superare anche questo ostacolo  :D.

FallChallenge


Ciao-

Anche io un paio di settimane fa smanettavo con queste cose..
Il codice scritto sopra va bene...
Ma sarebbe interessante anche fare in modo di conoscere lo stato del led (acceso o spento) anche quando si è a regime..

Questo codice potrebbe essere utile.



Ho provato a usare il tuo codice... :S Sto usando Chrome come browser ma la pagina dopo che accendo o spengo il led oppure basta anche ricaricarla si sformatta in modo impressionante. Come se il ciclo non si limitasse a stampare a schermo le scritte una sola volta ma in continuazione...Ho copiato esattamente il codice presente sul tuo sito. Ho provato in seguito anche con altri script. Ma sempre sto problema... la pagina vien fuori orrenda.. ripetuta più volte nella pagina.. Solo dopo un pò ho scoperto che il problema è dato dalla microSD inserita nell'ethernet Shield... qualcuno sa perchè? :S potrebbe essere difettosa la mia microSD?

http://www.hackerstribe.com - Nuova rubrica dedicata ad Arduino, chiunque voglia inserire il suo progetto mi contatti.

dr4gone

#34
Mar 01, 2011, 07:33 pm Last Edit: Mar 01, 2011, 07:45 pm by dr4gone Reason: 1
Premetto che sono anche io alle prime armi, quindi prendi quello che ti dico con le molle.. potrebbe essere un problema di alimentazione?  Con che cosa lo alimenti? Usb del pc o alimentazione esterna? Magari se lo alimenti con il pc , quelli che esce dall' usb non è sufficiente a tenere anche la uSD.

P.s. Quello non è il mio blog, io ho semplicemente preso spunto da li per fare il mio codice, e ottenere quello che c'è nelle pagine precedenti..

Il mio codice è un po diverso da quello su ioscripto.it :D
Se guardi dietro ci sono un paio di immagini di quello che ne è uscito fuori :D

Ti posto un codice semplificato senza grafica, che avevo postato per un altro utente...


L'idea di base l'ho presa qui http://www.ioscripto.it/arduino-accendere-led-via-web/ .
Poi ho semplificato e modificato un po la cosa e ti ho scritto velocemente il codice essenziale per fare in modo di vedere lo stato del led.

P.S. Grazie a Pitusso per i suggerimenti fondamentali  ;)

Comunque essenzialmente si tratta di giocare un po con dei booleani.
associ lo stato al valore di un booleano. Se flag=true allora il led è acceso, se flag=false il led è spento.

Poi per stampare lo stato usi un client.println per stampare il codice html che vuoi...

Spero di essere stato chiaro.
Buon divertimento.

P.s. se carichi questo sketch di base su arduino, puoi vedere velocemente come  funziona
Code: [Select]

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

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Indirizzo MAC
byte ip[] = { 192, 168, 1, 2 }; // ip in lan
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
Server server(80); //porta server

String readString; //string
boolean flag1 = false; //Inizializzo lo stato del led

void setup(){
Ethernet.begin(mac, ip, subnet);
pinMode(2, OUTPUT);
Serial.begin(9600);
}

void loop(){
Client client = server.available();
if (client) {
  boolean currentLineIsBlank = true;
  while (client.connected()) {
    if (client.available()) {
      char c = client.read();
        readString.concat(c);
      if (c == '\n' && currentLineIsBlank) {
         Serial.print(readString);
         if(readString.indexOf("Led=2") > 0) {
          digitalWrite(2, HIGH); // Accendi Led
          flag1 = true;
}
          if(readString.indexOf("Led=02") > 0) {
          digitalWrite(2, LOW); // Spegni Led
          flag1 = false;
}
// INIZIO DICHIARAZIONE PAGINA HTML
        client.println("HTTP/1.1 200 OK");
        client.println("Content-Type: text/html");
        client.println();
        client.println("Led");
        client.println("<span>STATO: </span>");
if (flag1) {
              client.println("<span style='color:green'>ON</span>");
            }
            else
            {
              client.println("<span style='color:red'>OFF</span>");
          }
          //comando ON OFF
              client.println("<a href='/?Led=2'>ON</a> |<a href='/?Led=02'>OFF</a>");
client.println("</body></html>");

        //Resetto "String" per la prossima lettura
        readString="";
        //Fermo il client
        client.stop();

        }
    }
  }
}
}


FallChallenge

Guarda ho provato prima con l'USB e mi dava sto problema. Ma anche con l'alimentatore 7,5 V e 1A mi da questo problema.

Ho risolto appunto rimuovendo la microSD.
boh.. forse hai ragione è un problema di alimentazione, ma per averne conferma dovrei fare altre prove.
http://www.hackerstribe.com - Nuova rubrica dedicata ad Arduino, chiunque voglia inserire il suo progetto mi contatti.

dr4gone

prova!!  :smiley-mr-green:
Altrimenti aspettiamo che qualcuno più esperto o con gli stessi problemi si faccia avanti..
Io ancora non mi sono cimentato con l'uso della microSD perchè sono preso da altri progettini con moduli RF e simili :D, ma prima o poi ci dovrò tornare... quindi se trovi la soluzione e poi la condividi non sarebbe male :D

dr4gone



Ho provato a usare il tuo codice... :S Sto usando Chrome come browser ma la pagina dopo che accendo o spengo il led oppure basta anche ricaricarla si sformatta in modo impressionante. Come se il ciclo non si limitasse a stampare a schermo le scritte una sola volta ma in continuazione...Ho copiato esattamente il codice presente sul tuo sito. Ho provato in seguito anche con altri script. Ma sempre sto problema... la pagina vien fuori orrenda.. ripetuta più volte nella pagina.. Solo dopo un pò ho scoperto che il problema è dato dalla microSD inserita nell'ethernet Shield... qualcuno sa perchè? :S potrebbe essere difettosa la mia microSD?


Hai risolto poi?
Or ora, ho messo una microsd anche io, ed ho lo stesso problema.

dr4gone

Ciao riprendo questo post..

Ho notato che ultimamente grazie alla libreria modificata da Gianni C, si può facilmente giocare con la micro sd, quindi stamattina ho deciso di cimentarmi velocemente anche io, cercando di passare questo su micro sd

Tralasciando la grafica che devo ancora sistemare, ho un problema che non mi spiego.
Ogni volta che mando su un uscita digitale un livello logico alto, il sensore di temperatura aumenta di 2 °C la temperatura...

Per vedere e provare cosa intendo cliccate qui

Il secondo problema è che non riesco  a fare una semplice funzione spegni tutto...
Io avevo pensato di fare un marker @E e dedicarlo a questa funzione, ma non riesco proprio a farlo andare. Suggerimenti?

allego lo sketch provvisorio

kattivik76

Ciao,

io vado a leggere le temperature del mio progetto una volta ogni 60sec, allego parte dello sketch...

Code: [Select]

void loop()
{
  set_replacements_array();
  // process incoming connections one at a time forever
  if (has_filesystem) {
     webserver.processConnection();
  }
 
  unsigned long currentMillis = millis();
 
   if(currentMillis - previousMillis > interval) {
     loop_temp();
     Serial.println(floatToString(str_AN1, Temp_inH2O, 2, 6));
     Serial.println(floatToString(str_AN2, Temp_outH2O, 2, 6));
     Serial.println(floatToString(str_AN3, Temp_esterna, 2, 6));
     Serial.println(floatToString(str_AN4, Temp_ambiente, 2, 6));
     
     Serial.println(floatToString(str_AO1, Set_start[0], 2, 6));
     Serial.println(floatToString(str_AO2, Set_stop[0], 2, 6));
     Serial.println(floatToString(str_AO3, Set_start[1], 2, 6));
     Serial.println(floatToString(str_AO4, Set_stop[1], 2, 6));
     Serial.println(floatToString(str_AO5, Set_start[2], 2, 6));
     Serial.println(floatToString(str_AO6, Set_stop[2], 2, 6));     
     
     previousMillis = currentMillis;   
  }
}


e non ho mai avuto problemi nelle letture della AI dovute ad attivazione dei DO, l'unica cosa che mi viene in mente, metti un +5v in Aref...
kattivik76
Sviluppo e realizzazione  Progetti Arduino
Teamspeack -> Arduino.cc -> 79.38.142.178:9987

dr4gone

Non mi serve aggiornare ogni 60 secondi,, ma una cosa semplice... Ogni volta che si richiede la pagina si rileva la temperatura...

Cmq ho provato ad alimentare l'arduino con un alimentatore esterno e non tramite l'usb dal pc.. ora la differenza di temperatura è di 1 Grado ogni volta che aziono un pin digitale.

Bho non me lo spiego..
Non credo che sia problema di codice.. ma di tensione e shield..
Che ne dite?

lesto

si, direi che quando accendi illed provochi un calo di tensione che sbarella un pò tutto... cos'hai attaccato all'arduino? che board stai usando? da quello che ho capito usi anche la microSD che magari ciuccia un pò (non so)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

dr4gone

arduino UNO, 3 led, un sensore di temp lm35  una ethernet shield e la microsd sull'eth shield. Sto alimentando tutto con un akimentatore 7.5V 1 Ampere

lesto

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

dr4gone

:smiley-roll-blue: :smiley-roll-blue: :smiley-roll-sweat: :smiley-roll-sweat:

effettivamente me la sono dimenticata  :smiley-sweat: :smiley-sweat:

Sono un fesso.. poi metto quelle da 220 ohm e vediamo  ]:D

Go Up