Go Down

Topic: Ethernet sheld client e server (Read 854 times) previous topic - next topic

albyy911

come da topic è possibile utilizzare l' ethernet sheld sia come client che come server??

Marbi

mi viene da chiederti: "In che senso?"
un server potrebbe eseguire gli stessi comandi di un client.
Marbi

albyy911

nel senso dovrei scrivere il valori di un sensore nel browser, e nello stesso tempo inviare comandi all'arduino.
Come fare??

ho trovato questo sketch in internet:

Code: [Select]

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

/* ***
controllare un attuatore via web
con sensori di temperatura e luce
ARDUINO UNO
ETHERNET SHIELD
by GianniFavilli.it - www.giannifavilli.it
*** */

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // mac address
byte ip[] = { 192, 168, ***, *** }; // ip arduino internet in
byte gateway[] = { 192, 168, ***, *** }; // internet access via router
byte subnet[] = { 255, 255, ***, *** }; //subnet mask
Server server(80); //server port

int outPin = 9; // pin attuatore
//char link[]="http://www.giannifavilli.it"; //link
String readString; //string
boolean LEDON = false; // flag status attuatore

/*termistore*/
float temp; // variabile da calcolare
float volt; // variabile da calcolare sul sensore di temperatura
float tempPin = 1;   // pin analogico IN temperature sensor
int ledPintemp = 13; // pin led termistore
float tempreg = 25.0; // temperatura di controllo in celsius
/*end termistore*/

/*fotoresistore*/
int light; // variabile da calcolare
int ledPinlux = 12; // pin led fotoresistenza
int photoresistor = 0; // pin analogico IN fotoresistore
/*end fotoresistore*/

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

void loop(){

  /*inizio calcolo temperatura*/
  Temp = ((5 * analogRead(inTemp) * 100.0 ) / 1024) - 50; // Codice ottimizzato

  /*
  (grazie giulio400 e jumpjack)
  volt = ( analogRead(tempPin) * 5) / 1024; // calcolo il valore letto e lo trasformo in valore di tensione
  temp = (volt - 0.5) * 100; // conversione MCP9700A
  */
  /*fine calcolo temperatura*/

  /*inizio luce*/
  light = analogRead(photoresistor);
  light = constrain(light, 0, 1023); // limiti dei valori tra 0 e 100
  light = map(light, 0, 150, 255, 0);
  /*fine luce*/

/*inizio client*/
Client client = server.available();
if (client) {
  boolean currentLineIsBlank = true;
  while (client.connected()) {
    if (client.available()) {
      char c = client.read();
        readString.concat(c); //store characters to string
      //if HTTP request has ended
      if (c == '\n' && currentLineIsBlank) {
         Serial.print(readString);
        if(readString.indexOf("L=1") > 0) {// lettura del valore se il LED si deve accendere
          // il led sarà acceso
          digitalWrite(outPin, HIGH); // accendo il led
          LEDON = true;
          Serial.print("ON pin ");
          Serial.println(outPin);
          }
          else
          {
          //il led sarà spento
          digitalWrite(outPin, LOW); //sengo il led
          LEDON = false;
          Serial.print("OFF pin ");
          Serial.println(outPin);
        }

        // COSTRUZIONE PAGINA HTML
        client.println("HTTP/1.1 200 OK");
        client.println("Content-Type: text/html");
        client.println();
        // inizializzo pagina (da togliere se uso ajax)
        client.print("<html><head><title>ARDUINO Controllo Led via WEB</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>");
        //inizai il body
        client.println("<div style='width:360px; height:640px;'>"); //risoluzione per nokia 5800 640x360
        client.println("<h1>STATUS SENSORI</h1><hr />");
        //Scrive sul browser il valore del termistore
        client.println("<p>TEMPERATURA = ");
        client.print(temp);
        client.println(" C <br /></p>");
      if (temp < tempreg) {
        // scrive sul web freddo se il valore del termistore è basso
        client.print("<p><strong>FREDDO</strong></p>");
        }
      else {
        // scrive sul web caldo se il valore del termistore è alto
        client.print(" <p><strong>CALDO</strong></p>");
    } 

        //Scrive sul browser il valore della fotoresistenza
            client.println("<p>LUCE = ");
            client.print(analogRead(light));
            client.println("<br /></p>");
      if (light < 150) {
          // scrive sul web luce se il valore della fotoresistenza è alto
          client.print("<p><strong>LUCE</strong></p>");
        }
      else {
          // scrive sul web buio se il valore della fotoresistenza è basso
          client.print(" <p><strong>BUIO</strong></p>");
        }
        // link per aggiornare pagina e valori
        client.print("<h2>AGGIORNA SENSORI: <a href=''>CHECK</a></h2><hr />");

        client.println("<h1>CONTROLLO ATTUATORI via internet</h1>");
        client.println("<hr />");
        client.print("<h1>PIN control n. ");
        client.print(outPin);
        client.println("</h1>");
        client.println("<br />");
        //scrivo il LED status
        client.print("<font size='5'>PIN status: ");
          if (LEDON) {
              client.println("<span style='color:green; font-weight:bold;'>ON</span></font>");
            }
            else
            {
              client.println("<span style='color:grey; font-weight:bold;'>OFF</span></font>");
          }
        client.print("<h2><a href='/?L=1'>ACCENDI</a> | <a href='/?L=0'>SPEGNI</a></h2>");

        // firma
        client.println("<hr />");
        client.print("<h4>Visita <a href='http://www.giannifavilli.it' target='_blank' />www.giannifavilli.it</a></h4>");
        client.println("<hr />");

        // chiudo il div
        client.println("</div>");
        // chiudo pagina da togliere se uso ajax
        client.println("</body></html>");

        // pulisco la stringa per la successiva lettura
        readString="";
        //fermo il client
        client.stop();

        } //if c == /n
    } // if client available
  } // while client connesso
} // FINE if client

        if (temp < tempreg) { // accende o spengo un led se la temperatura è più bassa di quella di controllo
          digitalWrite(ledPintemp, HIGH); //accendo
          Serial.print("ON pin "); //scrivo in console
          Serial.println(ledPintemp); //scrivo in console
        }
        else {
          digitalWrite(ledPintemp, LOW); //spengo
          Serial.print("OFF pin "); //scrivo in console
          Serial.println(ledPintemp); //scrivo in console
        }

        if (light < 150) { // accende o spengo un led se la c'è luce
          digitalWrite(ledPinlux, HIGH); // accendo
          Serial.print("ON pin "); //scrivo in console
          Serial.println(ledPinlux); //scrivo in console
        }
        else {
          digitalWrite(ledPinlux, LOW); //spengo
          Serial.print("OFF pin "); //scrivo in console
          Serial.println(ledPinlux); //scrivo in console
        }

} // fine loop


Non ho avuto tempo di testarlo ma dovrebbe funzionare.

Cmq da come mi hai risposto penso che io non abbia capito la differenza tra web server e cliente (:

albyy911

Ho momenti di pazziaa!!
Cerco aiuto!!  è tutto di oggi che sto cercando di accendere un led con l'ethernet ma non ce la faccio o meglio ci sono riuscito ma non ci ho capito una mazza!!

ho usato la libreria tinywebserver, tutto funziona ma non so proprio dove mettere le mani nel codice, ho solamente seguito le istruzioni senza capirci nulla.
Poi ho provato il codice che ho postato precedentemente, leggendo ho capito il 90 % delle funzioni, ma ho un problema... mi carica un loop di pagine da fare paura :) quindi si blocca il browser

se avete qualche tutorial in merito alla ethernet sheld ditemelo pure, non vi preoccupate :D

Cmq la libreria tinywebserver secondo me è fatta veramente bene (anche se non ci ho capito niente) e vi ringrazio se sapete dove leggere le istruzione XD


pelletta

Salve paesano, puoi postare un link della libreria che stai usando?
A giorni devo fare una scheda che richiede un ethernet shield, gli do un'occhiata.
Ho soltanto la prima versione sfigata dell'ethernet shield, spero che riesco a far funzionare la sd anche su quel modello (mi pare di aver visto delle modifiche in rete per farlo).
Nel frattempo non disperare, ti sento imprecare da casa mia... vedrai che qualcuno ti aiuterà prima o poi, considera anche che siamo nel weekend.
Ciao

albyy911


Salve paesano, puoi postare un link della libreria che stai usando?
A giorni devo fare una scheda che richiede un ethernet shield, gli do un'occhiata.
Ho soltanto la prima versione sfigata dell'ethernet shield, spero che riesco a far funzionare la sd anche su quel modello (mi pare di aver visto delle modifiche in rete per farlo).
Nel frattempo non disperare, ti sento imprecare da casa mia... vedrai che qualcuno ti aiuterà prima o poi, considera anche che siamo nel weekend.
Ciao


Questa è la libreria tinywebserver :

http://www.webweavertech.com/ovidiu/weblog/archives/000477.html

Nel mio caso ha funzionato perfettamente :) peccato xò (ripeto) non ci capisco niente dei comandi.

Adesso volevo provare con quella del reference di arduino Webduino, ma ancora non ho avuto tempo per provare ):

Cmq me ne sono accorto che sono tutti in vacanza e, io faccio parte del gruppo degli sfigati che quest'anno stanno a casa a lavorare XD

Go Up