Arduino client, riceve http request?

Salve

Vorrei creare una pagina web su un server e vorrei che arduino ricevesse ed inviasse http request al server.
Siccome in questa configurazione è un client, può anche ricevere le http request? come?

potete linkarmi uno sketch giusto per farmi un idea di come gestire la ricezione (in modalità client) delle http request?

grazie

Se sei un client non potrai mai ricevere richieste http, ma solo risposte alle tue richieste.

Eventualmente devi prevedere di utilizzare sia la libreria client che quella server contemporaneamente.
I miei test per ora si sono fermati all'avere più tipi di server su arduino (http e telnet) in contemporanea, ma mai client e server insieme.

niki77:
Se sei un client non potrai mai ricevere richieste http, ma solo risposte alle tue richieste.

Era quello che sospettavo.

Quindi se volessi inviare dati ad un server e ricevere (dal server) un comando non potrei farlo.
Dovrei avere due arduino: un server e un client. Giusto?

No, dovresti avere un fw su arduino che fa sia da client che da server.
Il server ti ascolta su una porta XX, il client ti invia richiesta ad un URL YYYY.
Sono due cose distinte che dovresti poter fare con un arduino solo, semplicemente utilizzando ethernetserver ed ethernetclient contemporaneamente sullo stesso sketch.

niki77:
Sono due cose distinte che dovresti poter fare con un arduino solo, semplicemente utilizzando ethernetserver ed ethernetclient contemporaneamente sullo stesso sketch.

Ok, non sapevo che potesse essere entrambe le cose.
Ho trovato questo: Arduino Forum

grazie :slight_smile:

nono allora ad ogni richiesta HTTP fatta da arduino, il server risponde con una pagina HTML... quindi la tua risposta la puoi mettere nella pagina HTML!

poi se invece devi inviare un comando da una pagina HTML, il mio consiglio è di usare un javascript che crea un iframe nascosto nella pagina che fa fare al client la get sull'arduino... in questo modo colleghi il client direttamente con l'arduino, una architettura più p2p con i suoi pro e contro

Non penso che abbia quella necessita lesto.
Io ho capito che a lui ha bisogno di comunicazione bidirezionale asincrona tra due entità , e che intendeva comunicare via http.
L'unica soluzione è che entrambe le entità siano client e server simultaneamente.

niki77:
Io ho capito che a lui ha bisogno di comunicazione bidirezionale asincrona tra due entità , e che intendeva comunicare via http.

esattamente.
bidirezionale e asincrono

niki77:
Sono due cose distinte che dovresti poter fare con un arduino solo, semplicemente utilizzando ethernetserver ed ethernetclient contemporaneamente sullo stesso sketch.

Pensavo: cosa succede nel momento in cui dal sito invio un comando quando in quel momento arduino è in modalità client e sta inviando un dato al sito? Come posso gestire queste... collisioni?

grazie

è uno sbattimento getito dallo stack ISO/OSI, quindi semplicemente non te ne devi preoccupare, nel caso succeda verrà autogestito tutto

lesto:
è uno sbattimento getito dallo stack ISO/OSI, quindi semplicemente non te ne devi preoccupare, nel caso succeda verrà autogestito tutto

Interessante.

Quindi quando faccio una request da un webservice verso arduino, se quest'ultimo è occupato a fare altre cose (magari proprio una request verso il webservice), viene messa in coda la richiesta finchè arduino non l'ascolta? tutto gestito il tutto dallo stack iso/osi...?
Ottimo...

è molto più complicata, e non sai quale richiesta sarà messa in coda. Per il resto vai tranquillo.
Ovvio che ogni errore aumenta i tempi e dopo un pò di errori in un certo slasso di tempo la connessione va in errore definitivo

10 gg fa

lesto:
è molto più complicata, e non sai quale richiesta sarà messa in coda. Per il resto vai tranquillo.
Ovvio che ogni errore aumenta i tempi e dopo un pò di errori in un certo slasso di tempo la connessione va in errore definitivo

grazie lesto!

pablos:
10 gg fa
invio post a client da server arduino - #2 by pablos71 - Software - Arduino Forum

letto.
ma in questo mio post approfondisco l'aspetto collisioni.

quali collisioni?

nel loop

apri il client
trasmetti
chiudi

apri il server
ascolti
se c'e' una richiesta in corso .... rispondi, hai 20 secondi prima che il client vada in timeout
chiudi

fine loop

che collisioni vuoi avere?

pablos:
che collisioni vuoi avere?

La risposta a questa domanda la trovi tra il botta e risposta tra me e lesto.

pablos stai analizzando solo il lato arduino e dando per scontato che anche il pc se riceve come server non invia come client, cosa probabilmente non vera visto che sul PC il server e il client gireranno come 2 processi separati (mi aspetyto un programma come server, vedi apache, e uno script in crontab o simili come client), e quindi in grado di funzionare in parallelo.

Quindi può capitare che mentre arduino si comporta da client, contemporaneamete sul PC si svegli il programma client ad interrogare l'arduino. Da quì la collisione.

Notare cne con il tuo sistema di loop, la richiesta del PC client verrebbe persa, perchè in quel momento arduino non sarebbe in ascolto; però è possibile aprire più connessione contemporaneamete (mi pare fino a 4 col wiznet), in tal caso i dati non verrebbero persi se una la lasci sempre aperta in ascolto e una la apri/chiudi quando necessario per fare il client

AnTrea:

pablos:
che collisioni vuoi avere?

La risposta a questa domanda la trovi tra il botta e risposta tra me e lesto.

Scusa AnTrea se ti ho disturbato, siccome smanetto con server e client da 16 mesi sulla ethernet shield pensavo di poter dire la mia su esperienze personali provate, testate e attualmente in runnig, non interverrò più su un tuo treadh promesso ...
Però se vuoi chattare con un singolo utente senza l'intervento di intrusi, fallo in pm :slight_smile:
ciao

pablos:
Scusa AnTrea se ti ho disturbato

Non hai disturbato e non ti ho mai negato di dire la tua. Non l'ho mai fatto nè con te nè con nessun altro.
Può solo farmi piacere leggere le opinioni anche di altri (in particolar modo di chi ha più esperienza di me).

Ma non volevo essere ridondante ripetendo di nuovo i miei dubbi.

Pace? :slight_smile: