come da topic è possibile utilizzare l' ethernet sheld sia come client che come server??
mi viene da chiederti: "In che senso?"
un server potrebbe eseguire gli stessi comandi di un client.
Marbi
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:
#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
</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("
</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("
");
//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 (:
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
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
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
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
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