+ All Categories
Home > Documents > Ethernet Corso Arduino

Ethernet Corso Arduino

Date post: 07-Aug-2018
Category:
Upload: alfredo
View: 225 times
Download: 1 times
Share this document with a friend

of 28

Transcript
  • 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