Icmp Ethernet shield Ufficiale

Esiste una libreria compatibile con 1.0 per gestire il Ping dall'Arduino verso un server ? Ho provato a cercare su google ma ho trovato pochi risultati e volevo sapere se qualcuno di voi gentilmente mi puoi aiutare con qualcosa di testato e funzionante, grazie

Luigi

ciao

una libreria compatibile per gestire il Ping dall'Arduino verso un server ?

sinceramente la domanda lascia molto spazio all'immaginazione .... cosa vuoi fare?

l'ho trovata in mezzo secondo di ricerca su google, tra l'altro su questo stesso forum.
Visto che non hai usato il tasto "cerca" prima di chiedere per dispetto non te la linko :stuck_out_tongue:

Ma che significa pingare arduino da un server, non è mandargli un pacchetto e ricevere una risposta?... serve una lib per fare cio?
dimmi lesto dimmi dimmi a me :slight_smile: senza libreria che a me non serve, solo il senso della cosa mi interessa :slight_smile:

ciao

ping equivale ad un pacchetto ICMP ECHO REQUEST e attende la risposta ICMP ECHO REPLY... è il test base per capire se l'host con un dato IP è "vivo" e raggiungibile.

cosa vorrei fare: esistono in commercio delle SmsMachine ovvero macchine che controllano lo stato di server e servizi e in caso di blocco inviano un sms di allarme, per farlo mi serve un client telnet che si connetta alla porta tcp dell'applicazione e controlli la risposta, credo che il client della classe ethernet sia valido, un client udp, ho già testato questa parte e ci siamo e un gestore di icmp per mandare un ping al server o all'apparato di rete e controllare se risponde correttamente, quindi è Arduino che "pinga" il server.. :slight_smile:

Per quanto riguarda la libreria icmp

nel link http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1260845455
viene anche detto If you're using the official Arduino Ethernet shield (using the WIZnet chip) then the code at the link above won't work with it.

nel post http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1285859555
viene fornita una libreria icmp, ma quando provo a caricare il suo esempio non si compila,

ecco perché chiedevo se conoscevate qualcosa di testato e funzionante con l'1.0 poiché se mi dite a me funziona e uso questa poi è evidente che ho qualcosa di incasinato io nel mio compilatore e nelle mie librerie, spero di aver soddisfatto i prerequisiti imposti Lesto e di aver diritto ora ad avere visibilità della soluzione...

l'icmp è un protocollo di segnalazione che gestisce diverse cose come ad esempio la frammentazione dei pacchetti, i messaggi di redirect etc etc ma il mio uso è solo quello spiegato da lucadentella, echo e replay, se c'e' un altro modo più banale per farlo ... vorrei essere illuminato... :slight_smile:

Grazie per la disponibilità,
Luigi

ciao

ho dato una occhiata veloce alla libreria ICMPPing... sembra ok, stai usando l'IDE 1.0 per compilare l'esempio? Che errore ti da?
Ho visto sempre nel thread linkato che consigliano di cambiare socket (il W5100 ha 4 socket disponibili, nell'esempio è definito SOCKET pingSocket = 0; mentre dicono di provare con il 3)

Grazie dopo il tuo check ho controllato su una macchina xp pulita e la libreria funziona correttamente l'asino sono io che ho incasinato nel mio mac la libreria Ethernet/utility/w5100.cpp , sistemo la cosa e vado avanti.... grazie per il prezioso indizio e per la pazienza!!!

ottimo! sarebbe carino fare il merge di questa funzionalità nella libreria ufficiale...

sarebbe grave mettersi a programmare per mesi la ethernet e non sapere cosè un ping :slight_smile:
la mia domanda era :
Perchè ci vuole una libreria, quando metti la shield in begin e fai un es: ping 192.168.1.100 in locale o un ip esterno con forwarding su router : porta xxxx.... a me risulta che ti risponde senza particolari strumenti.
tutto li

ciao

che la shied risponda ai ping in automatico non ne dubito, ma lui ha chiesto come fare per pingare DALLA shield qualcos'altro.

mink sono troppo bruciato!!! ho riletto e dice da arduno verso server .... sorry :slight_smile:

lucadentella:
ho dato una occhiata veloce alla libreria ICMPPing... sembra ok,

Riporto in vita questo post per una curiosita'
Premetto che mi serve fare un "coso" che pinghi alcuni IP pubblici e se non raggiungibili tolga corrente al router e lo riattivi dopo una breve pausa
Purtroppo e' uno sfigatissimo Alice , ho litigato una giornata con Telecom , il cliente vuole che i macchinari non rimangano orfani di telecontrollo e quindi , anche se ci sono pochi Km da fare non e' mia intenzione andare a spegnere ed accendere se si puo fare in automativo
Ecco comunque la curiosita' :
Anch'io ho dato una occhiata veloce e vedo che richiama librerie per altro richiamate dal programma principale senza alcun ifndef ( mi pare di averlo visto scritto cosi' )
La domanda :
Ma includendo piu' di una volta la libreria funzia tutto OK ?
Si mangiano Kbyte inutilmente ?

Grazie

la doppia inclusione di librerie è un bel casino, perchè da ambito a errori di compilazione.
Per le classi si usa il trucco della ifdef, però in realtà il c++ implementa la #import (al posti della #include) che si occupa in automatico di questo problema.

more info: What is the difference between #import and #include in Objective-C? - Stack Overflow

lesto:
la doppia inclusione di librerie è un bel casino,

Il programma di esempio esordisce cosi' :

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

poi su ICMPPing.h si ritrova

#include <SPI.h>
#include <Ethernet.h>
#include <utility/w5100.h>

Come sarebbe opportuno modificare la libreria perche' sia sintatticamente corretta ??
O forse e' il caso di includere inizialmente solo ICMPPing.h che poi a sua volta include il resto ??

Io ho fatto qualcosa di funzionante su ethernet ma non ho incluso utility/w5100.h
Non e' che sia anche questo l'include dell'include ??

@lromagnoli23
Ma allafine hai fatto qualche modifica oppure hai usato tutto cosi ed ha funzionato ??

Grazie

arduino IDE fa delle lavorazioni sullo sketch prioma di mandarlo in pasto al compilatore, per cui tutte le librerie che usi anche all'interno delle librerie vanno incluse nel file .PDE
Di conseguenza, tutte le librerie arduino usano il trucco dell'ifdef per eliminare il problema della doppia inclusione.

Cmq il problema della doppia inclusione è a livello di compilazione, quindi se ci fossero problemi NON compilerebbe il codice.

lesto:
Cmq il problema della doppia inclusione è a livello di compilazione, quindi se ci fossero problemi NON compilerebbe il codice.

Grazie
Domani ho una trasferta puzzolente ( pellami :drooling_face: ) ma martedi' provo e poi confermo i risultati
Sperando che arrivi l'Arduino Ethernet ordinato cosi' evito di smontare l'attuale applicazione che ha superato le 500 ore di funzionamento senza inchiodarsi ; riferito al lungo post in cui si parla dei congelamenti del Wiz..

scusami per il ritardo con cui rispondo, ti confermo che sto usando la libreria ping e funziona correttamente e anche io ho attivo il Wiz.. da un sacco di ore.. quindi no problem

prima di usarla ho controllato che non mi incasinasse tutto ed effettivamente tutte le altre librerie chiamate hanno il codice di controllo per evitare la doppia inclusione

#ifndef _SPI_H_INCLUDED
#define _SPI_H_INCLUDED
....

#endif

ad essere precisi tale codice manca proprio alla ICMPPing.h quindi se per sbaglio la si invoca due volte o qualche altra libreria la invoca si ha una doppia definizione, inserirlo non è poi complesso, ma comunque fin'ora non ne ho avuto bisogno..

saluti
Luigi

brunol949:
ma martedi' provo e poi confermo i risultati

Ho realizzato il marchingegno utilizzando quella libreria senza problemi

Faccio il ping ogni 10 minuti su 3 IP e se nessuno dei 3 risponde attivo un rele' per 20" che interrompe l'alimentazione del Router
Funzionare funziona
Adesso lo metto in opera e vediamo se ci ritroviamo ancora co' 'sto sfigato di router inceppato

Ho fatto una basettina con il rele' ed un transistor
Ho scoperto di avere una scatola di rele' da 8,5 Volts ; giusti giusti per i 9 volts con cui alimento il circuito

Bel progetto semplice ed efficiente ...