Salve a tutti!
inizio col spiegare cosa avrei intenzione di fare..
vorrei usare arduino con la ethernet shield, per spegnere il mio pc da remoto.
il problema è che non riesco a trovare una guida...
sul pc ho installato un programma chiamato airytec switch off, che tramite browser consente di spegnere ibernare riavviare il pc.
non riesco a inviare l'input al server tramite arduino.
questo è il link che iberna il mio pc(testato da altro computer) http://192.168.1.65:60/?action=System.Hibernate
vi posto il mio codice.
non c'è un modo semplice di far aprire un indirizzo web alla scheda
sono nuovo con la programmazione ethernet.
grazie a coloro che mi aiutano
e chiedo scusa se ho sbagliato qualcosa
Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.
La tua presentazione è scarsa, direi inutile. "buonasera a tutti!"
La chiediamo per sapere quali sono le tue conoscenze di elettronica e di programmazione. Per capire cosa sai e cosa ti deve essere spiegato, non per rompere le scatole.
P.S. quel pezzo di codice serve solo per la Leonardo
Ciao nid69ita,
Chiedo scusa ho sistemato il post,
E ho completato la presentazione...
Premetto che il codice l'ho modificato dall originale
Ethernetclient di arduino...
Rispondo anche a pablos,
Avrei la necessita di eseguire questa procedura tramite arduino... So che con software dedicati è molto piu semplice.
Il progetto è questo:
Arduino mega + tft shield + tft display,
Arduino uno + ethernet shield.
Il mega lo uso come consolle di comando tramite il touch screen,
Collegamento seriale per la comunicazione tra le 2 schede.
E arduino uno per la comunicazione ethernet.
Il tutto installato in magazzino per la gestione dei server, computer e in futuro allarme.
Spero di esser stato soddisfaciente.
Mi merito l'aiuto adesso?
pablos:
Allora ti conviene usare una scheda più affidabile
Una scheda piu affidabile non mi serve.
Stiamo andando off-topic
Nessuno puo aiutarmi?
Il mio problema è che non riesco ad aprire un link con la scheda arduino..
Dove sbaglio?
Ringrazio tutti.
nel loop invece hai messo:
if client.connected
Serial.print "niente"
poi manca il codice http 200, non capisco cosa vuoi fare, vuoi chiamare arduino da browser?
o vuoi che sia larduino a chiamare un server ?
Ps: Se stiamo andando off-topic è un problema mio, non tuo anche se di off-topic non c'è nulla.
Dico solo che se ci vuoi fare anche un allarme con quella scheda non puoi permetterti un crash, poi fai come ti pare.
**>i_seppia: ** Perché non vai nell'IDE -> File -> Examples -> Ethernet -> WebClientRepeating e guardi BENE cosa occorre trasmettere (il tutto si trova nella funzione "void httpRequest()") ? ... :
scusate forse mi sono spiegato male.
la funzione è nel setup perche mi basta che la esegua una volta sola..poi è uno sketch di prova quando vedo che funziona lo sistemo...
quello che vorrei è settare arduino come client in modo che mi si connetta alla pagina del server del mio pc (server generato dal programma airytech switch off) che permette di ibernare il computer da remoto.
so che ci sono altri sistemi per farlo, ma io vorrei che sia arduino ad eseguire l'ibernazione....
il problema è che sono alle prime armi con la shield ethernet.
non riesco a capire perche la stringa
client.write("/?action=System.Hibernate");
non mi funziona..
ho provato anche il WebClientRepeating citato da gpb01 senza successo.
cosa intendi per codice html 200 pablos?
io inserisco (poi ditemi se sbaglio):
il MAC della scheda, l'ip della scheda, l'ip del server nel mio caso 192.168.1.65,
fo connettere la scheda alla rete,
e infine fo il GET...
specifico che la porta non è la classica 80 ma lho impostata sulla 60,
impostando il
(client.connect(server, 60))
correttamente.
se io da pc/telefono/tablet inserisco http://192.168.1.65:60/?action=System.Hibernate il pc mi si iberna subito.
ragazzi spero di non esser noioso ma se mi aiutate mi togliete un tormento dalla testa. :o :o :o
grazie a tutti ancora
Quindi fammi capire, vuoi nel setup chiamare un server solo una volta (quindi arduino è in quel momento un client)
Poi vuoi nel loop che arduino diventi un webserver che risponda a chiamate da client
tu hai un vero server a questo indirizzo? char server[] = "192.168.1.65"; capace di rispondere a richieste di un client?
Perciò la parte setup() potrebbe essere corretta arduino chiama il server spedisce client.write("/?action=System.Hibernate");
hai verificato che quel action=System.Hibernate arrivi scritto così?
La connessione pare essere andata a buon fine (quella nel setup) perchè ti risponde
connecting...
connected
NO, quello è l'IP del server e non ha nulla a che vedere con la struttura dei messaggi HTTP ...
... o copi pedissequamente gli esempi, SENZA TOGLIERE NULLA, o ti studi il protocollo HTTP !!!
i_seppia:
... cosa è quell'H?
comunque il computer continua a non ibernarsi
Metti il codice che stai usando (... mi raccomando, in conformità al regolamento, punto 7, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> ... primo a sinistra).
nono il webserver non mi serve,
voglio solo che arduino mi apra il link sopra citato.
Non stai capendo cosa stai facendo, non hai la minima idea di quale sia la differenza tra client e server.
E te l'ho spiegato prima ....
Quello che hai nel setup è un webclient, quello che hai nel loop è un webserver, se ne deduce che come hai detto (webserver non mi serve) il loop deve restare vuoto.
il compito di arduino è
connecting...
connected
spedisci la GET
fine
Webclient:
Arduino prende l'iniziativa dichiamare un IP esterno che sia es. google, il forum arduino o un server interno alla rete come il tuo ....
fanno un po di negoziazione
arduino ti scrive connected
il server gli dice "che vuoi?"
arduino risponde "niente, ti volevo solo dire che action=System.Hibernate"
perfetto me lo segno, ora chiudo ciao!
Webserver:
Arduino non prende nessuna iniziativa se non è interrogato
il browser (che sarebbe il client) chiama arduino tramite http://192...***:80 default
si scambiano l' OK, tu stai bene si 200 Ok, e tu? si io anche .. 200 OK
si dicono anche che tipo di protocollo è ecc ecc
ora il browser dice ad arduino "mandami tutto quello che hai"
Arduino gli manda tutto quello che è previsto nel programma (sketch)
poi sempre arduino senza nemmeno salutare gli fa un bel close
e a te dice disconnect
Tutto questo ovviamente deve essere regolato da un linguaggio che entrambe le macchine devovo capire, perciò non possiamo inventarci la sintassi.
che cosa vuoi dei due?
comunque il computer continua a non ibernarsi
Il fatto che non funzioni il comando non significa che arduino non ha completato il suo compito, chi ci dice a noi che la parte server va bene?
Cosa c'è sul pc che vuoi ibernare in ascolto? un codice PHP o lo stai mandando alla rete sperando che il pc si spenga?
Infatti ti ho chiesto post dietro, "hai verificato che la GET arrivi?"
Per verificato vuol dire che dal lato server devi vedere quella scritta con un debug, con un analizzatore del traffico di rete, insomma qualcosa che ti aiuti a capire cosa sta succedendo, così capisci se c'è un sordo o c'è un muto.
So la differenza tra server e client..
Io ho solo usato lo sketch esempio di client arduino e ho modificato gli ip e le porte e il get.
Domani provo con ad analizzare il traffico sul server.
Grazie per l'aiuto e scusatemi se non ci arrivo alla prima sono alle prime armi con l'ethernet
Aggiornamento.
ho usato wireshark per analizzare le connessioni in entrata sul computer.
allora....
impostando la porta su 60 sia sul server che sulla scheda il debug mi tira fuori questo.
il problema secondo me è solo la porta..
sapete mica se arduino ha qualche limitazione a comunicare con alcune porte?
puo comunicare solo con la classica 80?
vi posto il mio codice.