Lo zipit Z1 e arduino

Questo è il codice:

/*
 * Web Server
 *
 * A simple web server that shows the value of the analog input pins.
 */

#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 4 };

Server server(23);

void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
  Serial.println("parto");
}

void loop()
{
  Client client = server.available();
  if (client) {
    // an http request ends with a blank line

    while (client.connected()) {

while (client.connected()) {
   Serial.println("invio");
   server.print("a");
   Serial.println("attendo una risposta di almeno 5 caratteri");
   while (server.available() < 5){
      //do nothing
   }
   Serial.println("risposta ricevuta! Rispondoi e disconnetto il client, di seguito quello che ho letto:");
   server.print("Grazie per avermi parlato, hai scritto:");
   while (server.available()){
       server.print( client.read() );
   }

   delay(10); //dai il tempo al client di ricevere il messaggio
   client.stop(); //disconnetti il client

}
    }
  }
}[code]
Compila ma quando telnetto mi dice "no route to host"

[/code]

No route to host è un errore delle tabelle di routing del pc o del router, direi che hai combinato qualche casino ma larduono non cetra, salvo il cavo ethernet sia scollegato

Mmmm, oggi provo a fare il telnet con il pc :smiley:
Edit: ho provato, si collega ma non fa nulla di quello che c'è scritto nel codice

Ok, ho compreto uno shield con il W5100, ma se compilo questo sketch:

/*
 * Web Server
 *
 * A simple web server that shows the value of the analog input pins.
 */

#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 4 };

EthernetServer server(23);

void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
  Serial.println("parto");
}

void loop()
{
  Client client = server.available();
  if (client) {
    // an http request ends with a blank line

    while (client.connected()) {

while (client.connected()) {
   Serial.println("invio");
   server.print("a");
   Serial.println("attendo una risposta di almeno 5 caratteri");
   while (server.available() < 5){
      //do nothing
   }
   Serial.println("risposta ricevuta! Rispondoi e disconnetto il client, di seguito quello che ho letto:");
   server.print("Grazie per avermi parlato, hai scritto:");
   while (server.available()){
       server.print( client.read() );
   }

   delay(10); //dai il tempo al client di ricevere il messaggio
   client.stop(); //disconnetti il client

}
    }
  }
}

mi da problemi.
Cosa posso fare?

che genere di problemi?

lesto:
che genere di problemi?

Non compila, ora sono sul cell. quando torno a casa posto gli errori

Non so se ho fatto bene perché di libreria Ethernet non ci capisco nulla (usata solo 1 volta) però mi pare tu avessi definito male il client e poi non avevi incluso la libreria SPI.

Questo codice compila (con la UNO):

/*
 * Web Server
 *
 * A simple web server that shows the value of the analog input pins.
 */

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

byte mac[] = { 
    0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 
    192, 168, 1, 4 };

EthernetServer server(23);
EthernetClient client;
void setup()
{
    Ethernet.begin(mac, ip);
    server.begin();
    Serial.begin(9600);
    Serial.println("parto");
}

void loop()
{
    client = server.available();
    if (client) {
        // an http request ends with a blank line

        while (client.connected()) {

            while (client.connected()) {
                Serial.println("invio");
                server.print("a");
                Serial.println("attendo una risposta di almeno 5 caratteri");
                while (server.available() < 5){
                    //do nothing
                }
                Serial.println("risposta ricevuta! Rispondoi e disconnetto il client, di seguito quello che ho letto:");
                server.print("Grazie per avermi parlato, hai scritto:");
                while (server.available()){
                    server.print( client.read() );
                }

                delay(10); //dai il tempo al client di ricevere il messaggio
                client.stop(); //disconnetti il client

            }
        }
    }
}

Non so però se funziona :sweat_smile:

leo72:
Non so se ho fatto bene perché di libreria Ethernet non ci capisco nulla (usata solo 1 volta) però mi pare tu avessi definito male il client e poi non avevi incluso la libreria SPI.

Questo codice compila (con la UNO):

/*
  • Web Server
  • A simple web server that shows the value of the analog input pins.
    */

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

byte mac[] = {
    0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {
    192, 168, 1, 4 };

EthernetServer server(23);
EthernetClient client;
void setup()
{
    Ethernet.begin(mac, ip);
    server.begin();
    Serial.begin(9600);
    Serial.println("parto");
}

void loop()
{
    client = server.available();
    if (client) {
        // an http request ends with a blank line

while (client.connected()) {

while (client.connected()) {
                Serial.println("invio");
                server.print("a");
                Serial.println("attendo una risposta di almeno 5 caratteri");
                while (server.available() < 5){
                    //do nothing
                }
                Serial.println("risposta ricevuta! Rispondoi e disconnetto il client, di seguito quello che ho letto:");
                server.print("Grazie per avermi parlato, hai scritto:");
                while (server.available()){
                    server.print( client.read() );
                }

delay(10); //dai il tempo al client di ricevere il messaggio
                client.stop(); //disconnetti il client

}
        }
    }
}



Non so però se funziona :sweat_smile:

Infatti... a me non funziona :smiley:

cece99:
Infatti... a me non funziona :smiley:

Ho fatto già troppo per le mie misere conoscenze... :sweat_smile: :sweat_smile:

cosa vuol dire non funziona?non compila? non funziona nulla?

a parte il doppio

while (client.connected()) {

e il

client.stop(); //disconnetti il client

che metterei dopo il while, dovrebbe funzionare....

/*
 * Web Server
 *
 * A simple web server that shows the value of the analog input pins.
 */

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

byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 
  192, 168, 1, 4 };

EthernetServer server(23);
EthernetClient client;
void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
  Serial.println("parto");
}

void loop()
{
  client = server.available();
  if (client) {
    // an http request ends with a blank line

    while (client.connected()) {


      Serial.println("invio");
      server.print("a");
      Serial.println("attendo una risposta di almeno 5 caratteri");
      while (client.available() < 5){
        //do nothing
      }
      Serial.println("risposta ricevuta! Rispondoi e disconnetto il client, di seguito quello che ho letto:");
      server.print("Grazie per avermi parlato, hai scritto:");
      while (client.available()){
        server.print( client.read() );
      }

      delay(10); //dai il tempo al client di ricevere il messaggio
      client.stop(); //disconnetti il client


    }
    client.stop(); //disconnetti il client
  }
}

edit: come non detto! client.availble() NON server.available()!

con server.available() ottieni un oggetto di tipo EthernetClient con dei dati da leggere.
con client.available() ottieni il numero di byte che quel client ha ricevuto.

oltre al fatto che se usi server.write scrivi a tutti i client connessi, mavabe, qui dipende da cosa vuoi fare

lesto:
cosa vuol dire non funziona?non compila? non funziona nulla?

a parte il doppio

while (client.connected()) {

e il

client.stop(); //disconnetti il client

che metterei dopo il while, dovrebbe funzionare....

/*
  • Web Server
  • A simple web server that shows the value of the analog input pins.
    */

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

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {
  192, 168, 1, 4 };

EthernetServer server(23);
EthernetClient client;
void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
  Serial.println("parto");
}

void loop()
{
  client = server.available();
  if (client) {
    // an http request ends with a blank line

while (client.connected()) {

Serial.println("invio");
      server.print("a");
      Serial.println("attendo una risposta di almeno 5 caratteri");
      while (client.available() < 5){
        //do nothing
      }
      Serial.println("risposta ricevuta! Rispondoi e disconnetto il client, di seguito quello che ho letto:");
      server.print("Grazie per avermi parlato, hai scritto:");
      while (client.available()){
        server.print( client.read() );
      }

delay(10); //dai il tempo al client di ricevere il messaggio
      client.stop(); //disconnetti il client

}
    client.stop(); //disconnetti il client
  }
}




edit: come non detto! client.availble() NON server.available()!

con server.available() ottieni un oggetto di tipo EthernetClient con dei dati da leggere.
con client.available() ottieni il numero di byte che quel client ha ricevuto.

oltre al fatto che se usi server.write scrivi a tutti i client connessi, mavabe, qui dipende da cosa vuoi fare

Cavolo! Volete proprio confondermi? Non ho capito ancora cosa c'entra quell' edit.... potresti spiegarmi bene bene?

con quell'edit dico che hai sbagliato completamente la logica.

server.available() ritorna un oggetto EthernetClient che ha dei dati da leggere con la read.
client.available() ritorna il numero di dati da leggere con la read() da quel client.

esempio: ci sono 2 client connessi. nessuno scrive:
sia server.available() ritorna NULL (nessun oggetto client ha ricevuto dati)
client1.available() e client2.available() ritornano 0 (ovvero 0 dat da leggere)

ora client1 scrive "ciao" ad arduino:
server.available() ritorna client1 (che è un oggetto di tipo EthernetClient)
client1.available() ritorna 4 (ci sono 4 byte da leggere, perchè pgni lettera è un byte, se hai usato la codifica ASCII o UTF8, 2 byte per lettera se hai usato la codifica UTF16... quasi tutti usano la ASCII o la UTF8)
client2.available() ritorna 0

lesto:
con quell'edit dico che hai sbagliato completamente la logica.

server.available() ritorna un oggetto EthernetClient che ha dei dati da leggere con la read.
client.available() ritorna il numero di dati da leggere con la read() da quel client.

esempio: ci sono 2 client connessi. nessuno scrive:
sia server.available() ritorna NULL (nessun oggetto client ha ricevuto dati)
client1.available() e client2.available() ritornano 0 (ovvero 0 dat da leggere)

ora client1 scrive "ciao" ad arduino:
server.available() ritorna client1 (che è un oggetto di tipo EthernetClient)
client1.available() ritorna 4 (ci sono 4 byte da leggere, perchè pgni lettera è un byte, se hai usato la codifica ASCII o UTF8, 2 byte per lettera se hai usato la codifica UTF16... quasi tutti usano la ASCII o la UTF8)
client2.available() ritorna 0

Quindi il codice giusto sarebbe?

ehhh la pappa pronta no :stuck_out_tongue:

lesto:
ehhh la pappa pronta no :stuck_out_tongue:

Ehh sto facendo casino....
così va bene?

/*
 * Web Server
 *
 * A simple web server that shows the value of the analog input pins.
 */

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

byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 
  192, 168, 1, 4 };

EthernetServer server(23);
EthernetClient client;
void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
  Serial.println("parto");
}

void loop()
{
  client = client.available();
  if (client) {
    // an http request ends with a blank line

    while (client.connected()) {


      Serial.println("invio");
      server.print("a");
      Serial.println("attendo una risposta di almeno 5 caratteri");
      while (client.available() < 5){
        //do nothing
      }
      Serial.println("risposta ricevuta! Rispondoi e disconnetto il client, di seguito quello che ho letto:");
      server.print("Grazie per avermi parlato, hai scritto:");
      while (client.available()){
        server.print( client.read() );
      }

      delay(10); //dai il tempo al client di ricevere il messaggio
      client.stop(); //disconnetti il client


    }
    client.stop(); //disconnetti il client
  }
}[code]

[/code]

se client.available() ritorna un numero, come fai ad essegnarlo ad una variabile di tipo EthernetClient?

lesto:
se client.available() ritorna un numero, come fai ad essegnarlo ad una variabile di tipo EthernetClient?

Dove?
Sto facendo un casino pazzesco........