Pages: 1 [2] 3 4   Go Down
Author Topic: [RISOLTO] AIUTO ETHERNET SHIELD  (Read 3356 times)
0 Members and 1 Guest are viewing this topic.
Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2747
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi dispiace, probabilmente la patch non basta, non è escluso però che ne tuo caso ci possa essere un problema software.
tutti i moduli hanno lo stesso software?

ciao
Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Offline Offline
Jr. Member
**
Karma: 0
Posts: 97
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao pablos

Si tutte le periferiche hanno lo stesso software , l'unica differenza il delay dopo il comando delle uscite

linko la versione attuale

Code:

////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////// PERIFERICA NUMERO XXXXXXXX///////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////


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




int in1 = 19;
int in2 = 18;
int in3 = 2;
int in4 = 3;
int in5 = 4;


int out1 = 5;
int out2 = 6;
int out3 = 7;
int out4 = 8;
int out5 = 9;


int read1;
int read2;
int read3;
int read4;
int read5;

byte server[] = { xxx, xxx, xxx, xxx };

String location = "/~xxxxxx/xxxxxxxx.php?id=xxxxxxxx HTTP/1.0";

byte mac[] = { 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX };

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


EthernetClient client;

char inString[32];
int stringPos = 0;
boolean startRead = false;
char charArray[10];

void setup(){
 

 
 
  pinMode(in1, INPUT);
  pinMode(in2, INPUT);
  pinMode(in3, INPUT);
  pinMode(in4, INPUT);
  pinMode(in5, INPUT);
 
  pinMode ( out1 , OUTPUT);
  pinMode ( out2 , OUTPUT);
  pinMode ( out3 , OUTPUT);
  pinMode ( out4 , OUTPUT);
  pinMode ( out5 , OUTPUT);
 
 
 
 
   ////Serial.begin(9600);
 
 
  ////Serial.println("ricavo IP usando DHCP");

  if (!Ethernet.begin(mac)) {

    ////Serial.println("DCHCP fallito , assegno Ip manuale");
    Ethernet.begin(mac, ip);
   
  }
 
  //Serial.print("My address:");
  //Serial.println(Ethernet.localIP());
  delay(2000);

}

void loop(){
 
   

 
  String pageValue = connectAndRead();
 
 
  delay(1000);


 
}

String connectAndRead(){


  if (client.connect(server, 80)) {
    //Serial.println("connesso alla pagina xxxxxxxxx.php");
    client.print("GET ");
    client.println(location);
    client.println();

    delay(1000);
   
   
    return readPage();

  }else{
    //Serial.println("errore connessione alla pagina xxxxxxxxxxx.php");
    //return "connection failed";
   
  }

}

String readPage(){


  stringPos = 0;
  memset( &inString, 0, 32 );

  while(true){

    if (client.available()) {
      char c = client.read();

      if (c == '<' ) {
        startRead = true;
      }else if(startRead){

        if(c != '>'){
          inString[stringPos] = c;
          stringPos ++;
         
        }else{
         
            String pageValue = inString;

            pageValue.toCharArray(charArray, 10);
            unsigned long result = atoi(charArray);
         
           
            //Serial.print("risultato letto ==> ");
            //Serial.println(inString);
           
           
            digitalWrite(out5, result & B00001);
            digitalWrite(out4, result & B00010);
            digitalWrite(out3, result & B00100);
            digitalWrite(out2, result & B01000);
            digitalWrite(out1, result & B10000);
           
            delay (1000);
           
         
     
          startRead = false;
          client.stop();
          client.flush();
       
 
          return connectAndWrite();
         
         

        }

      }
    }

  }

}

String connectAndWrite(){
 

 
 
  read1 = digitalRead(in1);
  read2 = digitalRead(in2);
  read3 = digitalRead(in3);
  read4 = digitalRead(in4);
  read5 = digitalRead(in5);
 
 
  delay(1000);
 
   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();
 
  } else {
 
  //Serial.println("errore connessione alla pagina xxxxxxxxxx.php");

}
 
 
          client.stop();
          client.flush();
          delay(100);
          return inString;
         
         
         
}



Se qualcuno volesse dargli un occhio....
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 97
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

credo di aver fuso... sono arrivato alla fine dei test

Unica soluzione possibile con watcdog esterno al quale azzeriamo il conteggio quando il programma effettua un ciclo completo.

Se nessuno lo resetta lui riavvia arduino

le uscite di arduino le ho fatte diventare impulsive in modo che , al riavvio , non cambi nulla


NON E' UNA SOLUZIONE MA UN ACCROCCHIO ( PERSONALMENTE  A ME NON FA IMPAZZIRE ) SPERO IN FUTURI AGGIORNAMENTI DELLE LIBRERIE DELL'ETHERNET SHIELD

Qualcuno ha provato uno shield che monta un altro chip ??

Ciao e grazie



* pic3ln.png (51.14 KB, 951x767 - viewed 14 times.)
Logged

Bergamo
Offline Offline
God Member
*****
Karma: 1
Posts: 663
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao

gli shield con l'enc28j60 di microchip non sembrano soffrire di problemi di blocco, ne ho in esecuzione da settimane senza particolari problemi... ho scritto anche un tutorial sul loro uso: http://www.lucadentella.it/category/enc28j60-arduino/

hai però altri limiti:

- tutto lo stack TCP/IP è a carico di Arduino, il chip ENC28j60 si occupa "solo" della parte Ethernet... questo significa più carico e un diverso "approccio" alla programmazione (nel tuo loop devi prevedere esplicitamente chiamate al loop dei pacchetti);

- anche il buffer di ricezione/trasmissione è in memoria Arduino (600-700bytes) quindi hai meno memoria disponibile per il tuo uso;

- per ora le librerie non supportano la frammentazione del pacchetto TCP in più pacchetti IP, sei quindi limitato al valore MTU della rete (di solito 1500 bytes) come dimensione massima dei dati che puoi inviare...

bye
Logged

lucadentella.it

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2747
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sempre in quel link che ti ho messo tempo fa http://arduino.cc/forum/index.php/topic,94572.0.html si parla anche di chip ethernet alternativi, mi sembra "legacy" abbia testimoniato come lucadentella qui sopra che non ha problemi con enc28j60, ripeto riguardo a me sulla mia shield con il 5100 ho un traffico di 1 MB circa al minuto e non si è mai freezata il massimo di tempo in test che ho fatto sono 10-12 ore circa, poi aggiungo modifico e quindi riavvio spesso.

ciao
Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Offline Offline
Jr. Member
**
Karma: 0
Posts: 97
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Tuscany
Offline Offline
Edison Member
*
Karma: 37
Posts: 1479
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 97
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 !
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2747
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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 smiley

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
« Last Edit: May 06, 2012, 12:25:42 pm by pablos » Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Offline Offline
Jr. Member
**
Karma: 0
Posts: 97
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Quote
#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
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2747
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si è connesso smiley
Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Offline Offline
Jr. Member
**
Karma: 0
Posts: 97
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2747
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ha fatto 3 connessioni è poi basta
Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Offline Offline
Jr. Member
**
Karma: 0
Posts: 97
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2747
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Pages: 1 [2] 3 4   Go Up
Jump to: