[RISOLTO] AIUTO ETHERNET SHIELD

Ragazzi grazie ... mi ero perso qualche POST precedente !!

Un info al volo:

su futurashop.it le schede con il chip enc28j60 non sono disponibili , avete idea di dove poterle acquistare ?

Grazie ancora

Se non hai fretta ( 4/5 settimane ) http://www.ebay.it/itm/ENC28J60-Ethernet-LAN-Module-for-Arduino-AVR-LPC-STM32-/280706213546?pt=LH_DefaultDomain_0&hash=item415b64e6aa

Altrimenti c'e' anche questa http://www.robot-italy.com/product_info.php?products_id=1037 , ma non l'ho mai provata

Ne ho ordinate un paio sul sito di futurashop.it ( disponibili dal 15/06 )

Mi chiedo ... ma quei progetti che girano in rete , per aggiornare il proprio IP su servizi DDNS che utilizzato la ETHERNET SHIELD con il chip 5100... non vanno !!

Anche perchè vedo che LucaDentella per lo stesso progetto ha utilizzato il chip ENC28J60

Nel circuito con RESET esterno ( con il NE555 ) ho aggiunto una riga di codice che , ad ogni avvio , aggiunge in un database un campo ( MYSQL ) ..... paura !!! a fine giornata ARDUINO ed ETHERNET SHIELD si sono riavviati ben 74 volte ( in 18 ore di funzionamento )

Accetto volentieri 2 / 3 riavii al giorno , ma così e impossibile da gestire

Magari sconnettendo il SERVER e riconnettendolo aumento l'affidabilità ?
Ho necessita di comunicare ad una pagina PHP lo stato degli ingressi di arduino ogni 30 secondi !!!

DELUSIONE !

Mi chiedo ... ma quei progetti che girano in rete , per aggiornare il proprio IP su servizi DDNS che utilizzato la ETHERNET SHIELD con il chip 5100... non vanno !!

Non so, posso caricare il tuo sketch e lasciarlo una notte in test a vedere se crasha anche il mio :slight_smile:

Però questo pezzo lo puoi rudurre mandando solo 1 byte

if (client.connect(server, 80)) {
//Serial.println("connesso alla pagina xxxxxxxxxx.php");
client.print("GET /xxxxxxxxxxx.php?seriale=xxxxxxxx");
client.print("&in1=");
client.print(read1);
client.print("&in2=");
client.print(read2);
client.print("&in3=");
client.print(read3);
client.print("&in4=");
client.print(read4);
client.print("&in5=");
client.print(read5);
client.println(" HTTP/1.0");
client.println("HOST: tech-alarm.it");
client.println();

così

client.print("GET /xxxxxxxxxxx.php?seriale=xxxxxxxx&str=nnn HTTP/1.0 HOST: tech-alarm.it");
client.println();

nnn è un valore da 0 a 255 e gestisci 8 porte con un solo byte
nn=0 convertito in bin ottieni 00000000
nn=255 convertito in bin ottieni 11111111

che poi a te serve solo da 0 a 31

sul php server devi solo prendere i caratteri da 0 a 8 della stringa nnn

sei gentilissimo ma e uno steck base.. non fa nulla di particolare

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

char server[] = "tech-alarm.it";

byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0xF8, 0x4A };

byte ip[] = { 192,168,1, 166 };

EthernetClient client;

void setup(){

Serial.begin(9600);

Ethernet.begin(mac, ip);

delay(2000);

}

void loop() {

if (client.connect(server, 80)) {
client.print("GET /prova_semplice.php?seriale=14141414");
client.println(" HTTP/1.0");
client.println("HOST: tech-alarm.it");
client.println();

Serial.println("connesso");

client.stop();
client.flush();

delay (1000);

} else {

Serial.println("errore");

client.stop();
client.flush();

delay (1000);

}

}

dal monitor seriale vedo la scritta "connesso" , ogni tanto "errore" ed infine... FREEZE !!! devo riavviare

si è connesso :slight_smile:

ok ora ti vedo "FUORI LINEA" .. da 3 minuti circa

ha fatto 3 connessioni è poi basta

ok !!

io lascio il mio ARDUINO connesso alla rete ( uso un altro seriale ) ma come ti dicevo dopo un po ... FREEZE !

ora ho provato a fare un altra modifica alla libreria EthernetClient.cpp

http://arduino.cc/forum/index.php/topic,94572.120.html

vediamo... ( anche se nel post in questione ho scritto che si bloccava ma non avevo salvato la modifica ) ora e 10 minuti che gira.. un po presto ma posto i risultati

Grazie

Ok .... come ti dicevo prova a ridurre il flusso di dati inviando solo un byte
al « Reply #23 on: Today at 05:51:16 PM » di questo treadh

ciao

ok lo faccio subito.. ho anche creato un unica pagina .php che esegue tutte e 3 le pagine che prima chiamavo ; vedo di passargli meno byte possibili

pablos approfitto della tua gentilezza ma mi sto perdendo ..

Lato server io ricevo un numero da 0 a 31 , lo converto in binario .. ok capisco i 5 ingressi in che stato sono ... fatto

mi perdo in ARDUINO

  read1 = digitalRead(in1);
  read2 = digitalRead(in2);
  read3 = digitalRead(in3);
  read4 = digitalRead(in4);
  read5 = digitalRead(in5);

queso come lo coverto in numero int da 0 a 31 ?

val_input = 0;
  
  if ( digitalRead(in1) == HIGH ){
    val_input = val_input + 1;
  }
  
  if ( digitalRead(in2) == HIGH ){
    val_input = val_input + 2;
  }
  
  if ( digitalRead(in3) == HIGH ){
    val_input = val_input + 4;
  }
  
  if ( digitalRead(in4) == HIGH ){
    val_input = val_input + 8;
  }
  
  if ( digitalRead(in5) == HIGH ){
    val_input = val_input + 16;
  }
  
  
  Serial.println(val_input);

non so se è il metodo giusto ma funziona !

ero a fare pappa :slight_smile:

ipotizzando tutte le in a 1 rispettivamente sarebbe
in1 in2 in3 in4 in5
1 ( x16 ) + 1 ( x8 ) + 1 ( x4 ) + 1 ( x2 ) + 1 ( x1 )
16+8+4+2+1=31

ero a fare pappa

ci mancherebbe !!! :slight_smile:

ok perfetto ! ma a questo punto altro tasto dolente per me.. come concateno le stringhe per risparmiare memoria ??

// risultato = numero da 0 a 31 in base agli ingressi ==> perfetto !

    client.print("GET /prova_semplice.php?seriale=18102005&val=")
    client.print(risultato);
    client.print(" HTTP/1.0 HOST: tech-alarm.it");
    client.println();

questo vorrei diventasse :

// risultato = numero da 0 a 31 in base agli ingressi ==> perfetto !

    client.print("GET /prova_semplice.php?seriale=18102005&val=risultato HTTP/1.0 HOST: tech-alarm.it");
    client.println();

ma come si mette una variabile dentro le virgolette ??

in C++ uso

[("GET /prova_semplice.php?seriale=18102005&val=%@ HTTP/1.0 HOST: tech-alarm.it"),risultato];

ma qui non funge

risultato lo converti in stringa

int val=31

(String)val non lo metti tra ""

qui non avevi fatto così ?
client.print("&in1=");
client.print(read1);
metti un + dovrei provare :slight_smile: non ne sono certo

si ok ! lo converto in stringa ma posso in unica linea chiudere e riaprire le virgolette ?

client.print("GET /prova_semplice.php?seriale=18102005&val="risultato" HTTP/1.0 HOST: tech-alarm.it");
client.println();

cosi ?

client.print("GET /prova_semplice.php?seriale=18102005&val=" + risultato + " HTTP/1.0 HOST: tech-alarm.it");
oppure così se risultato non è una stringa
client.print("GET /prova_semplice.php?seriale=18102005&val=" + (String)risultato + " HTTP/1.0 HOST: tech-alarm.it");

e ti giuro che ho cercato come un pazzo in rete ma il simbolo + proprio non lo ho trovato.... ok provo grazie ancora

:sweat_smile:

Scusa se ti angoscio questa sera !

  String valore = String(val_input);
  
  Serial.println(valore);
  
  
  
  if (client.connect(server, 80)) {
    client.print("GET /prova_semplice.php?seriale=18102005&val_input="+valore+" HTTP/1.0 HOST: tech-alarm.it");
    client.println();
    
    Serial.println("connesso");
    
    client.stop();
    client.flush();
    
    delay (1000);
    
  }

Dal serial monitor leggo il valore da 0 a 31 in base agli ingressi in modo corretto , si connette ma la pagina in PHP non si aggiorna

ho provato dal browser

http://........./prova_semplice.php?seriale=18102005&val_input=10

e funziona

quindi la stringa che invia arduino non va.....

uffa !!!