View
225
Download
1
Category
Preview:
Citation preview
8/20/2019 Ethernet Corso Arduino
1/72
PROGETTI CON ARDUINO UNO
-Introduzione alla shield Ethernet-
www.arduino.ccsistemisds.altervista.org
Gennaio 2015 - Sergio De Sordi
http://www.arduino.cc/http://www.arduino.cc/
8/20/2019 Ethernet Corso Arduino
2/72
Ethernet e la comunicazione in rete
Con le funzionalità di rete si possono condiidere i datiricaati dai sensori colle!ati ad una sc"eda Arduino.
#i pu$ anc"e assu%ere da lontano il controllo delle azioni delproprio Arduino.
Arduino UNO pu$ essere dotato di funzionalità di reteattraerso uno s"ield specifico. &uesta sc"eda a!!iuntia' dainnestare sopra Arduino UNO ( è compatibile anche con
Arduino Mega)' dispone dell*"ardware necessario per iniare
e riceere co%unicazioni tra%ite la connessione Et"ernet.
Grazie alla s"ield Et"ernet e alle relatie li+rerie software dautilizzare nell*IDE dienta possi+ile creare un serer per
se%plici pa!ine we+ o le!!ere dati dalla rete.
8/20/2019 Ethernet Corso Arduino
3/72
Arduino UNO e Shield Ethernet
,a s"ield Et"ernet ieneinnestata sopra lasc"eda Arduino e offrela stessa piedinatura
Cavo UTP
8/20/2019 Ethernet Corso Arduino
4/72
I pin digitali -' --' -/ e -0 sono utilizzati per permettere ilfunizonamento della Ethernet Shield.
Di conseguenza non possono essere direttamente utilizzati dalprogrammatore.
SPI
8/20/2019 Ethernet Corso Arduino
5/72
,e li+rerie da includere nello s1etc" sono la #PI." per la Serial Peripheral Interface e Et"ernet."
E* inoltre necessario i%postare un indirizzo fisico 2AC address perla sc"eda e un indirizzo lo!ico IP address' co%pati+ile con la retealla 3uale ci si colle!a' con cao di rete UTP.
4 !it"# !it
8/20/2019 Ethernet Corso Arduino
6/72
$rchitettura di rete TCP IP
livelli e protocolli
2AC
IP
PORT
I i i li i hi ld Eth t
8/20/2019 Ethernet Corso Arduino
7/72
Inizializzazione shield Ethernet
Ethernet.!egin%mac& ip'
Se il proprio net(or) * collegato a Internet utilizzando un router o ungate(a+& ,uando si chiama la funzione Et"ernet.+e!in si deve fornireanche lindirizzo ip del gate(a+.
+te gate(a+/0 1 2 3#& 35& 6& #64 78+te dns9server/0 1 2 3:& :&3& ###78
Ethernet.!egin%mac& ip& dns& gate(a+'8
8/20/2019 Ethernet Corso Arduino
8/72
Una ;$< collegata a Internet
8/20/2019 Ethernet Corso Arduino
9/72
Et"ernetTecnologia !roadcast di rete locale che fornisce le funzionalit= di !aseper trasmettere messaggi tra computer di una ;$li indirizzi diorigine e di destinazione di ,uesti messaggi sono identificati da
indirizzi 2AC %?edia $ccess Control'.
TCP e IPTransmission Control Protocol %TCP' e Internet Protocol %IP' sonoprotocolli chiave di Internet .
TCP * un protocollo di trasporto end to end e IP * un protocollo diinstradamento.I messaggi TCP4IP sono consegnati attraverso gli indirizzi IP unici dichi invia e chi riceve.IP lavora sopra Et"ernet e TCP sopra IP.
TCP introduce l indirizzo di porta che individua una applicazione in unhost.
TCP * un protocollo connessoPer certe applicazioni viene utilizzato UDP senza connessione
Indirizzi IP locali
8/20/2019 Ethernet Corso Arduino
10/72
Indirizzi IP localiSe sono presenti pi@ computer e tutti sono collegati a Internetattraverso una ;$
8/20/2019 Ethernet Corso Arduino
11/72
>li indirizzi IP sono indirizzi gerarchici che contengono dueinformazioni Rete e 5ost.
8/20/2019 Ethernet Corso Arduino
12/72
Per individuare lindirizzo di rete viene eseguita una operazione logicaAND tra lindirizzo IP e la %asc"era. ;a maschera naturale di unaclasse C * /99./99./99.
Notazione Deci%ale Puntata =or%a
8/20/2019 Ethernet Corso Arduino
13/72
5TTP;e richieste (e! inviate dal !ro(ser (e! e le risposte che ne
conseguono utilizzano messaggi 5TTP %A+perteBt TransferProtocol' .
;e pagine (e! sono formattate utilizzando 5T2, ( A+perteBt ?ar)up;anguage '
5ardware alternatioIn alcune schede il chip iznet * sostituito con il dispositivo E
8/20/2019 Ethernet Corso Arduino
14/72
Confi!urare Arduino co%e un serer we+
Pro+le%a#i uole c"e lo s1etc" risponda co%e serer we+ conuna pa!ina we+ dina%ica c"e contiene i 7 alori de!liin!ressi analo!ici della sc"eda Arduino. ,a pa!ina we+pu$ essere ric"iesta da un co%puter 3ualsiasi di una
rete ,AN.
Un +rowser si connette all*indirizzo asse!nato allasc"eda Et"ernet di Arduino. (per es. -6/.-78.96.-;; peruna rete -6/.-78.96.4/>)
#oluzioneAlla ric"iesta di connessione lo s1etc" su Arduinoinia' con un serie di print' il codice "t%l di unase%plice pa!ina we+.
8/20/2019 Ethernet Corso Arduino
15/72
Ric"iesta di connessione porta 8
ro(ser #erer suArduino
Inio pa!ina we+ in "t%l
8/20/2019 Ethernet Corso Arduino
16/72
FG e! Server $ simple (e! server that sho(s the value of the analog input pins. using an $rduino iznet Ethernet shield.
GF
Hinclude SPI.hJHinclude Ethernet.hJ
FF Enter a ?$C address and IP address for +our controllerFF The IP address (ill !e dependent on +our local net(or)K!+te mac/0 1 2 :BDE& :B$D& :BE& :BEL& :BLE& :BED 78IP$ddress ip%3#&35&6&3MM'8
FF %port : is default for ATTP'EthernetServer server%:'8
8/20/2019 Ethernet Corso Arduino
17/72
void setup%' 2 Serial.!egin%5::'8 FF start the Ethernet connection and the server
Ethernet.!egin%mac& ip'8 server.!egin%'8 Serial.print%Nserver is at N'8 Serial.println%Ethernet.localIP%''87
void loop%' 2 FF listen for incoming clients EthernetClient client 1 server.availa!le%'8 if %client' 2
Serial.println%Nne( clientN'8 FF an http re,uest ends (ith a !lan) line (hile %client.connected%'' 2 (hile %client.availa!le%'' 2 FF arrivato carattere char c 1 client.read%'8 FF legge dalla rete
Serial.(rite%c'8 FF scrive sulla seriale 7
8/20/2019 Ethernet Corso Arduino
18/72
SEOI$; ?ET F ATTPF3.3AostK 3#.35.6.3MMUser-$gentK ?ozillaF6.: %indo(s
8/20/2019 Ethernet Corso Arduino
19/72
FF send a standard http response header client.println%NATTPF3.3 #:: RN'8 client.println%NContent-T+peK teBtFhtmlN'8 client.println%NConnectionK closeN'8 FF the connection (ill !e closed
after response client.println%NOefreshK 6N'8 FFrefresh the page automaticall+ ever+ 6 s client.println%'8 client.println%NDCTPE AT?;JN'8 client.println%NhtmlJ h3JN'8
FF output the value of each analog input pin for %int analogChannel 1 :8 analogChannel 58 analogChannelQQ'2
int sensorOeading 1 analogOead%analogChannel'8 client.print%Nanalog input N'8 client.print%analogChannel'8 client.print%N is N'8 client.print%sensorOeading'8 client.println%N!r FJN'8
7 client.println%N Fh3J FhtmlJN'8
!rea)8
8/20/2019 Ethernet Corso Arduino
20/72
FF give the (e! !ro(ser time to receive the data dela+%3'8
FF close the connection client.stop%'8 Serial.println%Nclient disconnectedN'8 77
8/20/2019 Ethernet Corso Arduino
21/72
8/20/2019 Ethernet Corso Arduino
22/72
#D card
;a shield ethernet permette lutilizzo di una scheda di memoria ditipo SD cards.
8/20/2019 Ethernet Corso Arduino
23/72
Hinclude SD.hJ
Hinclude SPI.hJ
Hinclude Ethernet.hJ
!+te mac/01 2:BDE&:B$D&:BE&:BEL&:BLE&:BED78
!+te ip/0 1 23#&35&3::78
EthernetServer shttp%:'8
FF n the Ethernet Shield& CS is pin 4.
8/20/2019 Ethernet Corso Arduino
24/72
void setup%'2 Ethernet.!egin%mac&ip'8 shttp.!egin%'8
FF ma)e sure that the default chip select pin is set to FF output& even if +ou dont use itK pin?ode%3:& UTPUT'8 FF see if the card is present and can !e initializedK
if %SD.!egin%chipSelect'' 2 return8 77
void loop%' 2
8/20/2019 Ethernet Corso Arduino
25/72
void loop%' 2 EthernetClient client 1 shttp.availa!le%'8 FF in ascolto if %client' 2 (hile%client.connected%' '2
(hile%client.availa!le%' ' 2 FF arrivato carattere char c1 client.read%'8 7 client.println%NATTPF3.3 #:: RN'8 client.println%NContent-T+peK teBtFhtmlN'8 client.println%NConnectionK closeN'8 client.println%'8
Lile dataLile 1 SD.open%NindeB.htmN'8 if %dataLile' 2 (hile %dataLile.availa!le%'' 2 client.(rite%dataLile.read%''8 7
dataLile.close%'87 FF end if
client.stop%'8 7
7 FF if
7
8/20/2019 Ethernet Corso Arduino
26/72
Co%unicazione in telnet sulla porta /0
iene riconosciuto il comando : che restituisce il valore lettodallingresso analogico $:.
8/20/2019 Ethernet Corso Arduino
27/72
Hinclude SPI.hJHinclude Ethernet.hJFF the media access control %ethernet hard(are' address
for the shieldK!+te mac/0 1 2 :BDE& :B$D& :BE& :BEL& :BLE& :BED 78FFthe IP address for the shieldK!+te ip/0 1 2 3#&35&3:: 78
FF telnet defaults port #"
EthernetServer server 1 EthernetServer%#"'8
void setup%'2 FF initialize the ethernet device Ethernet.!egin%mac& ip'8 FFgate(a+ and su!net areoptional.
FF start listening for clients server.!egin%'87
id l %'
8/20/2019 Ethernet Corso Arduino
28/72
void loop%'2 FF if an incoming client connects EthernetClient client 1 server.availa!le%'8
if %client 11 true' 2 FF read !+tes from the incoming client if %client.availa!le%'' 2 char c 1 client.read%'8 FF primo carattere (hile%client.availa!le%''
char cc 1 client.read%'8
FFnon considero altri caratteri if %c11:'2 client.println%analogOead%$:''8 FF inviolettura su $: 7 else
client.println%Ncomando nonriconosciutoVnN'8 7 FFclient.availa!le J :
7 FFclient true
7 FF loop
8/20/2019 Ethernet Corso Arduino
29/72
;a shield Ethernet puW essere collegata direttamente con cavo di reteUTP allo s(itch del la!oratorio oppure si puW sfruttare uncollegamento ?i=i se la scheda lo consente.
8/20/2019 Ethernet Corso Arduino
30/72
iene aggiunto allo s(itch un Access Point per collegare $rduino iniLi. Per aggiungere la funzionalit= iLi alla scheda Ethernet vieneutilizzato un dispositivo TP-lin) M:# in modalit= Client.
Sar= ora possi!ile collegare $rduino e raggiungerlo tramite la rete
8/20/2019 Ethernet Corso Arduino
31/72
Sar= ora possi!ile collegare $rduino e raggiungerlo tramite la retei-fi
8/20/2019 Ethernet Corso Arduino
32/72
Rendere irele!! l*ethernet !hield
Esistono diversi shield i-Li per $rduinoK partendo da ,uella
ufficiale& fino a ,uelle !asate su integrati ?icrochip& YcuginiZdell[enc#\5:.
$ volte puW essere pi@ comodo collegare $rduino alla retei-Li sfruttando la !hield ethernet a!!inata ad un
dispositivo wireless.
In particolare il nano router di TP-;I
8/20/2019 Ethernet Corso Arduino
33/72
Confi!urarlo in %odalità client %olto se%plice
Per pri%a cosa dia%o al nostro PC un indirizzo fisso'
-6/.-78..-' e colle!"ia%oci al router con il caoethernet :
$priamo il !ro(ser e digitiamo "ttp:44-6/.-78../9>& accedendocon utente e pass(ord ad%in.
S l i i Cli t d
8/20/2019 Ethernet Corso Arduino
34/72
Selezioniamo Client modeK
Clicchiamo su #ureB per cercare la nostra rete i-fi& ,uindiinseriamo gli eventuali parametri di sicurezza.
$ttendiamo il restart del routerK
Riceere un insie%e di alori analo!ici dal conertitore
8/20/2019 Ethernet Corso Arduino
35/72
Riceere un insie%e di alori analo!ici dal conertitoreADC del controllore e isualizzarli su un !rafico
Pro+le%aSi vuole che lo s)etch risponda con una pagina (e! che crea sul!ro(ser una visualizzazione simile a ,uella di un oscilloscopio.
Soluzioneiene utilizzato un canas di "t%l9.;a funzione analogOead impiega circa 3#: us per ac,uisire un valore.4:: campioni vengono ac,uisiti con un ciclo in circa 4 ms.
;a rappresentazione viene fatta con una risoluzione di ::B5::& #piBelper campione.
I campioni& numeri da : a 3:#"& vengono mappati nel range da : a 6.
$ttraverso delle print lo s)etch invia al !ro(ser una pagina (e!utilizzando un canvas.
8/20/2019 Ethernet Corso Arduino
36/72
ms
B
oid loop() for(1F1>F1HH)
8/20/2019 Ethernet Corso Arduino
37/72
for(1 F1>F1HH) lettura1Janalo!Read(A)F for(1F1>F1HH) lettura1J%ap(lettura1J''-/0''966)F 44 listen for inco%in! clients
Et"ernetClient client serer.aaila+le()F if (client) #erial.println(Knew clientK)F 44 an "ttp re3uest ends wit" a +lan1 line w"ile (client.connected()) w"ile (client.aaila+le()) c"ar c client.read()F #erial.write(c)F L 44 send a standard "ttp response "eader client.println(K5TTP4-.- / OMK)F client.println(KContentTBpe: tet4"t%lK)F client.println(KConnection: closeK)F 44 t"e connection will +e closed after
co%pletion of t"e response client.println(KRefres": 9K)F 44 refres" t"e pa!e auto%aticallB eerB 9 sec client.println()F client.println(KDOCTPE 5T2,QK)F client.println(K"t%lQK)F client.println(K+odBQK)F client.println(Kcanas id*%BCanas* widt"*8* "ei!"t*7*
stBle*+order:-p solid d0d0d0F+ac1!round:+lac1*QK)F
client.println%NscriptQN'8client.println%Nar cdocu%ent.!etEle%ent
8/20/2019 Ethernet Corso Arduino
38/72
client.println% ar c docu%ent.!etEle%ent
8/20/2019 Ethernet Corso Arduino
39/72
Controllare alcuni pin di!itali attraerso una pa!inawe+
Pro+le%aSi vuole che lo s)etch risponda come serer con una pagina (e!dinamica attraverso la ,uale si possono controllare alcuni pin digitalidella scheda $rduino. ;a pagina (e! puW essere richiesta da uncomputer ,ualsiasi di una rete ;$< %per es. indirizzo di rete3#.35.6.: maschera #66.#66.#66.:' attraverso un !ro(ser che siconnette allindirizzo assegnato alla scheda Ethernet di $rduino. %peres. 3#.35.6.3MM'
8/20/2019 Ethernet Corso Arduino
40/72
Alla pri%a connessione la strin!a iniata dal +rowser c"e siconnette del tipoGET 4 5TTP-.-
In ,uesto caso il programma su $rduino passa direttamente allaserie di print che inviano al !ro(ser il codice "t%l che costituisce lapagina (e!. Da notare le prime due print e la riga vuota prima dellapagina html.
client.println%NATTPF3.3 #:: RN'8client.println%NContent-T+peK teBtFhtmlN'8client.println%'8
segue la pagina html che contiene dei form] form] form
Nelle altre connessioni la strin!a iniata con dei for% del tipo
GET 4pin0- 5TTP-.-
8/20/2019 Ethernet Corso Arduino
41/72
8/20/2019 Ethernet Corso Arduino
42/72
EthernetServer server%:'8server.!egin%'8FFviene creato un server che rimane in attesa sulla porta :.
EthernetClient client 1 server.availa!le%'8FF,uando un client si connette si ottiene loggetto client cherappresenta il !ro(ser che si collega e con il ,uale si dialoga.
(hile%client.connected%''FF controlla che il server (e! sia connesso al client
if %client.availa!le%''controlla se sono disponi!ili dati
if %client.find%N>ET FN' 'FFcerca nel flusso ricevuto la stringa Y>ET FZ
8/20/2019 Ethernet Corso Arduino
43/72
(hile%client.findUntil%NpinN&NVrVnN'' 2FFcerca la stringa YpinZ & termina con una riga vuota
int pin1client.parseInt%'8 int val1client.parseInt%'8FF legge i prossimi due numeri interi client * un flusso
GET 4pin0- 5TTP-.-
due interi
include #PI."Q
8/20/2019 Ethernet Corso Arduino
44/72
include Et"ernet."Q
+Bte %acJ 6'A/'DA''=6'A9LF
+Bte ipJ -6/'-78'-'-;;LF
Et"ernet#erer serer(8)F
oid setup()
Et"ernet.+e!in(%ac'ip)F
serer.+e!in()F L
8/20/2019 Ethernet Corso Arduino
45/72
oid loop()
Et"ernetClient client serer.aaila+le()F w"ile(client.connected()) if(client.aaila+le())
if(client.find(KGET 4K) )
w"ile(client.findUntil(KpinK'KrnK))
int pinclient.parseInt()Fint aloreclient.parseInt()F
pin2ode(pin'OUTPUT)F di!ital?rite(pin'alore)F L 44end w"ile findUntil L 44 end if client.find GET
esecuzione della richiesta
"O#M e CSS
8/20/2019 Ethernet Corso Arduino
46/72
"eadQ stBleQ
rosso color: ==L erde color: ==L 4stBleQ 4"eadQ
+rQ "- id*rosso*Q RO##O 4"-Q +rQ for% action*4* Q input tBpe*"idden* na%e*pin0* alue**Q input tBpe*su+%it* size*-* alue*#PEGNI*Q
4for%Q
action *... * indica la pa!ina we+ da ric"iedere 3uando iene cliccato il pulsante su+%itla 4 indica la Vstessa pa!ina "t%lW
pulsante
Dal !ro(ser viene inviata la stringa GET 4pin0 5TTP-.-
for%
8/20/2019 Ethernet Corso Arduino
47/72
delaB(-)F 44 necessario client.println(K5TTP4-.- / OMK)F client.println(KContentTBpe: tet4"t%lK)F client.println()F 44 ri!a uota client.println(K"t%lQK)F 44 pa!ina ric"iesta client.println(K"eadQK)F client.println(KstBleQK)F client.println(Krosso color: ==LK)F client.println(Kerde color: ==LK)F client.println(K4stBleQK)F
client.println(K4"eadQK)F client.println(K+odB +!color*azure*QK)F client.println(K"/QK)F client.println(KXiene iniata una ric"iesta ad ArduinoK)F client.println(K4"/QK)F client.println(K+rQK)F client.println(K"- id*erde*Q XERDE 4"-Q +rQK)F
client.println(K for% action*4* QK)F client.println(Kinput tBpe*"idden* na%e*pin/* alue**QK)F client.println(Kinput tBpe*su+%it* size*-* alue*#PEGNI*QK)F client.println(K 4for%QK)F client.println(K for% action*4* QK)F client.println(Kinput tBpe*"idden* na%e*pin/* alue*-*QK)F client.println(Kinput tBpe*su+%it* size*-* alue*ACCENDI*QK)F client.println(K 4for%QK)F
client.println(K+rQK)F client.println(K"- id*rosso*Q RO##O 4"-Q +rQK)F
8/20/2019 Ethernet Corso Arduino
48/72
c e t p t ( d osso O##O 4 + )F client.println(K for% action*4* QK)F client.println(Kinput tBpe*"idden* na%e*pin0* alue**QK)F client.println(Kinput tBpe*su+%it* size*-* alue*#PEGNI*QK)F
client.println(K 4for%QK)F client.println(K for% action*4* QK)F client.println(Kinput tBpe*"idden* na%e*pin0* alue*-*QK)F client.println(Kinput tBpe*su+%it* size*-* alue*ACCENDI*QK)F client.println(K 4for%QK)F 44fine ric"iesta for(int iFi 7 FiHH)
client.print(Kanalo! input K)F client.print(i)F client.print(K is K)F client.print(analo!Read(i))F client.print(K+r 4QK)F L client.println(K4+odBQK)F
client.println(K4"t%lQK)F +rea1F 44 dalla w"ile principale 'uole disconnettersi L 44end if client.aaila+le L 44end w"ile client.connected delaB(-)F client.stop()F L 44loop
pagina eb per controllo attuatori attra$er!o%
8/20/2019 Ethernet Corso Arduino
49/72
pul!anti& !elezione& radio button
"t%lQ
"eadQ
8/20/2019 Ethernet Corso Arduino
50/72
"eadQstBleQ+odB +ac1!round: AAAAAAFLiAon color: redF L
i>>>>>FL
IC widt":0p F%ar!in:-pF +order:0p solidF paddin!:/pFfloat: leftF +ac1!round: >>>>>>FLID widt":0p F%ar!in:-pF +order:0p solidF paddin!:/pFfloat: leftF +ac1!round: EEEEEEFL4stBleQ
4"eadQ
C##
+odBQ
di idKIAKQ
8/20/2019 Ethernet Corso Arduino
51/72
di id IA Qfor%Q"- idiAonQ ATTUATORE A 4"-Qinput tBpeK"iddenK na%eKpin0K alueK-KQ
input tBpeKsu+%itK actionKproafor%."t%lK alueKaccendiKQ4for%Qfor%Qinput tBpeK"iddenK na%eKpin0K alueKKQinput tBpeKsu+%itK actionKproafor%."t%lK alueKspe!niKQ4for%Q4diQ
di idKI
8/20/2019 Ethernet Corso Arduino
52/72
"- id iConQ ATTUATORE C 4"-Qselect na%eKselezK sizeK-KQoption alueK/99KQalto 4optionQoption alueK-/9KQ%edio 4optionQ
option alueK/KQ +asso 4optionQ
4selectQ
input tBpeKsu+%itK actionKproafor%."t%lK alueKi%postaKQ4for%Q4diQ
di idKIDKQfor%Q"- idiDonQ ATTUATORE D 4"-Qinput tBpeKradioK na%eKseK alueK%aleKQ2ale+rQinput tBpeKradioK na%eKseK alueKfe%aleKQ=e%ale
input tBpeKsu+%itK actionKproafor%."t%lK alueKi%postaKQ4for%Q
4diQ4+odBQ
4"t%lQ
radio
Controllo del funziona%ento di un se%aforo con unapa!ina we+
8/20/2019 Ethernet Corso Arduino
53/72
p ! Pro+le%a
Si vuole che lo s)etch risponda come server (e! per il controllo delfunzionamento di un semaforo %rosso& verde& giallo o giallo lampeggiante'
Soluzione
8/20/2019 Ethernet Corso Arduino
54/72
include #PI."Qinclude Et"ernet."Q
8/20/2019 Ethernet Corso Arduino
55/72
const int erde/Fconst int !iallo-0Fconst int rosso0F
+Bte %acJ 6'A/'DA''=6'A9LF+Bte ipJ -6/'-78'-'-;;LF+oolean rossoXerdeGiallotrueF 44 sta+ilisce il tipo di funziona%ento
Et"ernet#erer serer(8)F
oid setup()
pin2ode(erde'OUTPUT)F pin2ode(!iallo'OUTPUT)F pin2ode(rosso'OUTPUT)F
Et"ernet.+e!in(%ac'ip)F serer.+e!in()F L
oid loop() if (rossoXerdeGiallo) nor%ale()F
8/20/2019 Ethernet Corso Arduino
56/72
else !iallo,()F
L oid attendiEcontrolla(int te%po) lon! attuali%illis()F w"ile(%illis() (attualiHte%po)) Et"ernetClient client serer.aaila+le()F if (client true) w"ile(client.connected())
if(client.aaila+le()) if(client.find(KGET 4K) ) w"ile(client.findUntil(KpinK'KrnK)) int pinclient.parseInt()F
int aloreclient.parseInt()F if(alore ) rossoXerdeGiallotrueF
+rea1FL
else rossoXerdeGiallofalseF +rea1F L
L 44end w"ile findUntil 44 end client.find GET
client.println(K5TTP4-.- / OMK)F client.println(KContentTBpe: tet4"t%lK)F client.println()F
8/20/2019 Ethernet Corso Arduino
57/72
44pa!ina ric"iesta client.println(K"t%lQK)F client.println(K+odB +!color*azure*QK)F
client.println(K"/QK)F client.println(K2odifica funzina%ento se%aforoK)F client.println(K4"/QK)F client.println(K for% action*4* QK)F client.println(Kinput tBpe*"idden* na%e*pin/* alue**QK)F client.println(Kinput tBpe*su+%it* alue*nor%ale*QK)F client.println(K 4for%QK)F
client.println(K+rQK)F client.println(K for% action*4* QK)F client.println(Kinput tBpe*"idden* na%e*pin/* alue*-*QK)F client.println(Kinput tBpe*su+%it* alue*la%pe!!iante*QK)F client.println(K 4for%QK)F 44fine ric"iesta client.println(K4+odBQK)F client.println(K4"t%lQK)F +rea1F 44 dalla w"ile principale uole disconnettersi L 44end if client.aaila+le L 44end w"ile client.connected delaB(-)F client.stop()F L
L
oid nor%ale() di!ital?rite(rosso',O?)F di!ital?rite(erde'5IG5)F
di it l? it ( i ll ,O?)
8/20/2019 Ethernet Corso Arduino
58/72
di!ital?rite(!iallo',O?)F 44 delaB(>)F attendiEcontrolla(>)F
di!ital?rite(!iallo'5IG5)F di!ital?rite(erde',O?)F 44 delaB(-)F attendiEcontrolla(-)F di!ital?rite(!iallo',O?)F di!ital?rite(rosso'5IG5)F 44delaB(>)F
attendiEcontrolla(>)F L
oid !iallo,() di!ital?rite(erde',O?)F di!ital?rite(rosso',O?)F
di!ital?rite(!iallo'5IG5)F 44delaB(9)F attendiEcontrolla(>)F di!ital?rite(!iallo',O?)F 44delaB(9)F attendiEcontrolla(>)F
L
Comunicazione in rete tra $rduino e PC
8/20/2019 Ethernet Corso Arduino
59/72
Pro+le%aSi vuole che lo s)etch su $rduino rilevi la posizione di un
potenziometro attraverso un ingresso analogico e& funzionando daserver& lo invii su richiesta ad uno s)etch di processing su Pc.
;a richiesta di connessione viene fatta da un computer ,ualsiasi diuna rete ;$< % per esempio indirizzo di rete 3#.35.6.:
maschera #66.#66.#66.:' sul ,uale gira uno s)etch di processingche si connette allindirizzo assegnato alla scheda Ethernet di $rduino. %per es. 3#.35.6.3MM porta #"::'.;a posizione del potenziometro& letta da $rduino& determinalinclinazione di un segmento& gestito da processing su pc& che
simula le ali di un aereo.
#oluzioneProcessing si connette conKc 1 ne( Client%this& N3#.35.6.3MMN& #"::'8
Codice per processing %client'
8/20/2019 Ethernet Corso Arduino
60/72
i%port processin!.net.SFClient c8
String input8int data/08int B313:8int +313::8int B#144:8
int +#13::8
void setup%'2 size%46:& #66'8 !ac)ground%:'8 FF nero
stro)e%:'8 FF Connect to the servers IP address and port c 1 ne( Client%this& N3#.35.6.3MMN& #"::'8
7
void dra(%'2 stro)e%#66'8
it % 3 N N 3 N N # N N # NV N' FF i i l
8/20/2019 Ethernet Corso Arduino
61/72
c.(rite%B3QN NQ+3QN NQB#QN NQ+#QNVnN'8 FF invia al server !ac)ground%:'8
dela+%#::'8 FF ritardo importante fill%:BB'8 ellipse%##:&3::&6:&6:'8 ;ine%##:&3::#:&":'8 FF codaFF inizio ricezione if %c.availa!le%' J :' 2 input 1 c.readString%'8input 1 input.su!string%:& input.indeBf%NVnN''8 FF nl+ up to the ne(line data 1 int%split%input& ''8 FF Split values into an arra+ FF dra( line using received coord stro)e%:BB'8
line%data/:0& data/30& data/#0& data/"0'8FF print%input'8 print%N N'8 77
8/20/2019 Ethernet Corso Arduino
62/72
Codice per Arduino
4S A si%ple serer Usin! an Arduino ?iznet Et"ernet
8/20/2019 Ethernet Corso Arduino
63/72
4 A si%ple serer Usin! an Arduino ?iznet Et"ernetEt"ernet s"ield attac"ed to pins -' --' -/' -0
Analo! inputs attac"ed to pins AS4
include #PI."Qinclude Et"ernet."Q
44 Enter a 2AC address and IP address for Bour controller+elow.
44 T"e IP address will +e dependent on Bour local networ1. 44 !atewaB and su+net are optional:
+Bte %acJ DE' AD'
8/20/2019 Ethernet Corso Arduino
64/72
oid setup()
44 initialize t"e et"ernet deice Et"ernet.+e!in(%ac' ip' !atewaB' su+net)F 44 start listenin! for clients serer.+e!in()F 4 4 Open serial co%%unications and wait for port to open:
#erial.+e!in(67)F #erial.print(K serer address:K)F #erial.println(Et"ernet.localIP())FL
oid loop() 44 wait for a new client:
Et" tCli t li t il +l ()
8/20/2019 Ethernet Corso Arduino
65/72
Et"ernetClient client serer.aaila+le()F if (client)
if (client.aaila+le() Q ) 44 read t"e +Btes inco%in! fro% t"e client: -client.parseInt()F B-client.parseInt()F /client.parseInt()F
B/client.parseInt()F aloreanalo!Read(A)F
alore%ap(alore''-/0''6)F
B-B-(alore>9)F B/B/H(alore>9)F client.print(-)F client.print(K K)F client.print(B-)F client.print(K K)F
client print(/)F
8/20/2019 Ethernet Corso Arduino
66/72
client.print(/)F client.print(K K)F
client.print(B/)F client.print(KnK)F L LL
Usare il protocollo UDP
8/20/2019 Ethernet Corso Arduino
67/72
Pro+le%a
Si vuole che uno s)etch su $rduino invii un pacchetto UDP in !roadcasta tutte le macchine della stessa ;$
8/20/2019 Ethernet Corso Arduino
68/72
g + 8using S+stem.eneric8
using S+stem.TeBt8
namespace Console$pplication32 pu!lic class UDPlistener 2 private const int listenPort 1 33:::8 pu!lic static int ?ain%' 2 !ool done 1 false8 UdpClient listener 1 ne( UdpClient%listenPort'8
IPEndPoint groupEP 1 ne( IPEndPoint%IP$ddress.$n+& listenPort'8 string received9data8 !+te/0 receive9!+te9arra+8 FF i dati di un pacchetto
tr+ 2 Si !locca fino alla ricezione di un datagram
8/20/2019 Ethernet Corso Arduino
69/72
2 (hile %done' 2
receive9!+te9arra+ 1 listener.Oeceive%ref groupEP'8 Console.rite;ine%NOeceived a !roadcast from 2:7N& groupEP.ToString%''8 received9data 1 Encoding.$SCII.>etString%receive9!+te9arra+& :&receive9!+te9arra+.;ength'8 Console.rite;ine%Ndata follo( Vn2:7N& received9data'8 7 7 catch %EBception e' 2 Console.rite;ine%e.ToString%''8 7
listener.Close%'8 return :8 7 77
Hinclude SPI.hJ FF needed for $rduino versions later than ::3Hinclude Ethernet.hJHinclude EthernetUdp hJ FF UDP li!rar+
8/20/2019 Ethernet Corso Arduino
70/72
Hinclude EthernetUdp.hJ FF UDP li!rar+
FF Enter a ?$C address and IP address for +our controller !elo(.FF The IP address (ill !e dependent on +our local net(or)K!+te mac/0 1 2 :BDE& :B$D& :BE& :BEL& :BLE& :BED 78IP$ddress ip%3#& 35& 3& 3MM'8IP$ddress remote9ip%3#&35&3B'8 FF !roadcast su 3#.35.3.:
unsigned int localPort 1 8 FF local port to listenunsigned int remote9port1 33:::8const int pin148char uffer/0 1 Nattenzione !ottone pigiatoN8 FF a string to send
FF $n EthernetUDP instance to let us send and receive pac)ets
EthernetUDP Udp8
void setup%' 2pin?ode%pin&I
8/20/2019 Ethernet Corso Arduino
71/72
pin?ode%pin&I
8/20/2019 Ethernet Corso Arduino
72/72
Recommended