Arduinoethernet e librerie, caratteri strani

Salve ragazzi, sto iniziando a mettere le mani su un ArduinoEthernet, lo scopo finale è quello di creare un piccolo WebServer che risponda correttamente ad una richiesta, in wget (non pretendo troppo per ora :slight_smile: )

Ho provato con questo codice

#include <SPI.h>
#include <Ethernet.h>
 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,1, 130 };
EthernetServer server(80);
 
void setup()
{
  Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
  Ethernet.begin(mac, ip);
  server.begin();
  delay(1500);
  Serial.println("start");
}
 
void loop()
{
  EthernetClient client = server.available();
  if (client) {
    Serial.println("New client");
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.print(c);
        if (c == '\n' && currentLineIsBlank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
 
          client.print("Ciao");
            
          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}

E il risultato che vedo dal monitor della seriale è questo:

start

Quando faccio un wget su server iniziar a sputare caratteri strani, tipo questi sotto:

New client
 request.  <ins>Thatâ??s all we know.</ins>
Ý܏µÃ%D°?¶<??¯:¸­°5?j­¼næh£j ù³ý??ݬÛÏ?Öé[ÖýTá½I;HB½I;HB

a questo punto va in loop e continua a sputare sempre caratteri strani e non si ferma.

Ho cercato in internet ma non trovo altri che abbiano questo problema.
Qualcuno sa aiutarmi? Grazie…

probabilmente hai caricato diversi sketch e fatto diverse prove il reset non è sufficiente a svuotare il buffer della eth. - Togli alimentazione ad arduino e relativa shield ethernet - attendi qualche secondo e rialimenta - ricollegati all'ip

ciao

Si in effetti ho fatto diverse prove però, io non ho un arduino con lo shield ethernet, ho un ArduinoEthernet questo http://arduino.cc/en/Main/ArduinoBoardEthernet per capirci.

Faccio cosi:

  • Premo reset.
  • Stacco eth e usb.
  • Aspetto 5 minuti e riattacco.

Fa lo stesso scherzo.

quindi te lo fa ancora?

io sul serial monitor col tuo sketch ho questo

start New client GET / HTTP/1.1 Host: 192.168.2.177 User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Connection: keep-alive Cache-Control: max-age=0

Cavolo, a me fa solo questo:

start
New client
ù£o®ð¥$Ëäí/®r?y£¾Ì_/J×%q'à¼?)vQBîÒÄÍ©HR­Ýì?±Ã¥d´?<Ã?¯ºè© µ?j­¸næ`#j ù³ý??Õ?Ûï?Æé[ÖýTáµM;
?8\]¥Å®1ÔàÍ

che tipo scheda usi?

perchè penso che a questo punto sia la mia scheda che ha qualcosa che non va, magari qualche configurazione.

uso una shield w5100 con slot sd card, ma non credo sia una questione di scheda difettosa, sulla pagina web ottieni il risultato voluto? anche con altri esempi come il read delle porte analogiche? i pin 0 e 1 li hai lasciati liberi? sull'IDE hai selezionato la tua scheda correttamente?

ciao

Cerco di rispondere alle tue indicazioni, non ammazzarmi :)

sulla pagina web ottieni il risultato voluto?

no, il browser resta in attesa fino al suo timeout

anche con altri esempi come il read delle porte analogiche?

qua sono ignorante, come faccio a leggerle? mi puoi suggerire qualche guida? comunque non ho sensori per fare delle prove, leggerei valori random.

edit: ho provato con questo codice http://arduino.cc/en/Reference/AnalogRead e sembra andare, da valori random ma comunque numeri interi a 3 cifre.

i pin 0 e 1 li hai lasciati liberi?

scusa la mia ignoranza, non so di che pin stai parlando, ti mando una foto di come l'ho configurato, ma penso sia il pin 0 che 1 siano liberi. spero si veda bene

sull'IDE hai selezionato la tua scheda correttamente?

si credo di si, ho seguito diverse guide e penso di aver selezionato quella giusta.

si otterresti dei valori random leggendo le porte analogiche, ma comunque lo stesso dei valori, gli esempi li trovi nel compilatore sotto i menù

File > Example> ethernet>webserver

Scusa hai comprato la scheda col modulo POE ovvero ricevi alimentazione tramite il cavo di rete, sempre che sia connesso a un apparato che la fornisca, è stata una tua esigienza volerlo così? Non conosco quella scheda, in questo momento immagino che l'unica alimentazione arrivi da USB, non ti arriva da entrambe le parti spero :)

ciao

Si si so di avere il POE, l’ho preso perchè pensavo di sfruttarlo in futuro.

Per ora l’alimentazione viene ricevuta soltanto dalla USB.

Ho provato con questo sketch semplice e vengono fuori una lista di valori numerici random, come ci si aspettava.

//Librerie impiegate per il progetto
#include <SPI.h>
#include <Ethernet.h>
 
//Creao un array di byte per specificare il mac address
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//creo un array di byte per specificare l'indirizzo ip
byte ip[] = {10, 192, 1, 251};
 
//creo una variabile char per memorizzare i byte letti dal client
char Data_RX;
 
//creao un oggetto server che rimane in ascolto sulla porta
//specificata
Server ArduinoServer(80);
 
void setup()
{
    //inizializza lo shield con il mac e l'ip
    Ethernet.begin(mac, ip);
    //inizializza l'oggetto server
    ArduinoServer.begin();
}
 
void loop()
{
    //fai qualcosa!
    delay(10);
}

A chi interessa ho trovato la soluzione, il problema sta principalmente nell'IDE.

Io sono riuscito a far andare il tutto con la versione 0.22, io lo sto usando ora su un Linux Mint 12 a 64Bit con un ArduinoEthernet e una miniUSBSerial.

Poi ho dovuto modificare il file Boards.txt con questo http://arduino.cc/en/uploads/Main/boards.txt.zip, che è valido solo per la 0.22 da quel che ho capito.

Per il resto tt'apposto :)

Flavio.