Scheda ethernet di arduino Introduzione La scheda ethernet

  • Slides: 12
Download presentation
Scheda ethernet di arduino

Scheda ethernet di arduino

Introduzione • La scheda ethernet di arduino si serve dei pin 10, 11, 12,

Introduzione • La scheda ethernet di arduino si serve dei pin 10, 11, 12, 13 di Arduino appoggiandosi alla interfaccia SPI • L’interfaccia SPI Serial Peripheral Interface è utilizzata per la comunicazione seriale sincronizzata • Il pin 4 viene utilizzato per il segnale Slave Select

Librerie • • #include <Dhcp. h> #include <Dns. h> #include <Ethernet. Client. h> #include

Librerie • • #include <Dhcp. h> #include <Dns. h> #include <Ethernet. Client. h> #include <Ethernet. Server. h> #include <Ethernet. Udp. h> #include <util. h>

Librerie • La libreria fondamentale è Ethernet. h da essa dipendono tutte le altre

Librerie • La libreria fondamentale è Ethernet. h da essa dipendono tutte le altre librerie • Dhcp. h è la libreria che permette l’acquisizione di un indirizzo IP tramite server • DNS. h attribuisce un indirizzo IP ad ogni hostname. Ciò è possibile solo se si riesce ad interagire con un server • Ethernet. Client ed Ethernet. Server gestiscono la scheda Arduino a seconda se funziona rispettivamente da client o da server • Ethernet. Udp è utile per le comincazioni tramite il protocollo Udp • Util gestisce le conversioni da a esadecimale

Indirizzi • Gli indirizzi utili sono: – MAC address, Media Access Control; è un

Indirizzi • Gli indirizzi utili sono: – MAC address, Media Access Control; è un indirizzo di 6 cifre esadecimali univoco per ogni scheda per la comunicazione. La sintassi è la seguente : byte mac[]={ 0 x. DE, 0 x. AD, 0 x. BE, 0 x. EF, 0 x. FE, 0 x. ED} ; – Indirizzo IP con sintassi: IPAddress ip(192, 168, 1, 1);

Classe Ethernet. Server • Ethernet. Server: crea una porta sul server desiderato. Per http

Classe Ethernet. Server • Ethernet. Server: crea una porta sul server desiderato. Per http serve la porta 80. Essendo una classe, bisogna creare una istanza es. Ethernet. Server mioserver=Server(80); Metodi: – write(dato): scrive un carattere a tutti i client correttamente collegati – print(dati, base), println(dati, base): scrive i dati in una determinata base; la differenza tra print e println è che il primo, scrive su una sola riga, il secondo torna daccapo

Classe Ethernet. Client • La classe Ethernet. Client va instanziata; non ha parametri in

Classe Ethernet. Client • La classe Ethernet. Client va instanziata; non ha parametri in ingresso e non ha parametri in uscita • Metodi: Connected() Connect(ip, porta) Write(dato)- scrive un dato sul server connesso Print(dato, base), println(dato, base) Available() Read()-legge il byte successivo nel buffer; se non ci sono dati il valore restituito è -1 – Flush()-rimuove dal buffer i dati non ancora letti – Stop()-disconette il server – – –

Esempio: un host remoto legge i dati inviati da arduino #include <Liquid. Crystal. h>

Esempio: un host remoto legge i dati inviati da arduino #include <Liquid. Crystal. h> #include <SPI. h> #include <Ethernet. h> boolean lettura; int addr = 0; #define RS 12 #define EN 11 #define D 7 2 #define D 6 3 #define D 5 4 #define D 4 5 Liquid. Crystal lcd( 12, 11, 5, 4, 3, 2 ); // 'lcd' è una variabile di tipo Liquid. Crystal */ byte mac[] = { 0 x. DE, 0 x. AD, 0 x. BE, 0 x. EF, 0 x. FE, 0 x. ED }; IPAddress ip(172, 16, 200, 243); Ethernet. Server server(80); int n=0; int m=0; int k=0; const int led=10; void setup() { lcd. begin( 16, 2 ); Serial. begin(9600); pin. Mode(led, OUTPUT); pin. Mode(7, INPUT); Ethernet. begin(mac, ip); server. begin(); }void loop() {delay(3000); digital. Write(led, LOW); lettura=digital. Read(7); lcd. set. Cursor(0, 0); if (lettura==LOW){ m=m+1; if(n==4){ n=0; k=k+1; digital. Write(led, HIGH); } else{n=n+1; digital. Write(led, LOW); } } lcd. print(n); Ethernet. Client client = server. available(); if (client) { Serial. println("new client"); boolean current. Line. Is. Blank = true; while (client. connected()) { if (client. available()) { char c = client. read(); Serial. write(c); if (c == 'n' && current. Line. Is. Blank) { client. println("HTTP/1. 1 200 OK"); client. println("Content-Type: text/html"); client. println("Connection: close"); client. println("Refresh: 5"); client. println("<!DOCTYPE HTML>"); client. println("<html>"); client. println("<p />"); client. println("<H 1>"); client. println("m="); client. print(m); client. println("</H 1>"); client. println("<p />"); client. println("<H 2>"); client. print("k= "); client. println("</H 2>"); client. println("<H 1>"); client. print(k); client. println("</H 1>"); client. println("</html>"); break; } if (c == 'n') { current. Line. Is. Blank = true; } else if (c != 'r') { current. Line. Is. Blank = false; }}}}}

Esempio: controllo di una lampada da remoto (parte 1) • #include <SPI. h> #include

Esempio: controllo di una lampada da remoto (parte 1) • #include <SPI. h> #include <Ethernet. h> int pin. LED = 9; int pin. LED 1 = 8; boolean acceso = false; boolean acceso 1= false; byte mac[]={0 x. DE, 0 x. AD, 0 x. BE, 0 x. EF, 0 x. FE, 0 x. ED}; IPAddress ip(172, 16, 200, 243); Ethernet. Server server(80); void setup() { pin. Mode(pin. LED, OUTPUT); digital. Write(pin. LED, LOW); pin. Mode(pin. LED 1, OUTPUT); digital. Write(pin. LED 1, LOW); Serial. begin(9600); Ethernet. begin(mac, ip); server. begin(); Serial. print("server is at "); Serial. println(Ethernet. local. IP()); } void loop() { Ethernet. Client client = server. available(); if (client) { Serial. println("new client"); boolean current. Line. Is. Blank = true; String post. Text =""; String post. Text 1 =""; while (client. connected()) { if (client. available()) { char c = client. read(); if(post. Text. length()<10){ post. Text +=c; } if(post. Text 1. length()<10){ post. Text 1 +=c; } if (c == 'n' && current. Line. Is. Blank) { client. println("HTTP/1. 1 200 OK"); client. println("Content-Type: text/html"); client. println("Connection: close"); client. println("<meta charset=UTF-8>"); client. println("<!DOCTYPE HTML>"); client. println("<html>"); client. println("<head> <TITLE>Lambade</TITLE> </head>"); client. println("<body> <h 1> Benvenuto nel Webserver Arduino </h 1>"); client. println("<h 1> Controllo di due lampade</h 1>"); client. println("</body>"); client. println("</html>"); break; } if (c == 'n') { current. Line. Is. Blank = true; } else if (c != 'r') { current. Line. Is. Blank = false; } } }

Esempio: controllo di una lampada da remoto (parte 2) if(post. Text. index. Of("? on")

Esempio: controllo di una lampada da remoto (parte 2) if(post. Text. index. Of("? on") >0){ digital. Write(pin. LED, HIGH); Serial. println("Accendi LED"); acceso = true; acceso 1= true; } if(acceso){ client. println("<a href=". /? off"> <img src = "http: //mariangelamone. altervista. org/bt_OFF. png"alt = "Spegni" ></a>"); client. println("<h 3> La lampada è accesa </h 3>"); }else{ client. println("<a href=". /? on"> <img src = "http: //mariangelamone. altervista. org/bt_ON. png"alt = "Accendi" ></a>"); client. println("<h 3> La lampada è spenta </h 3>"); // Se l'utente ha premuto l'icona per spegnere il LED if(post. Text. index. Of("? off") >0 ){ digital. Write(pin. LED, LOW); Serial. println("Spegni LED"); acceso = false; acceso 1=false; } if(post. Text 1. index. Of("? on") >0){ digital. Write(pin. LED 1, HIGH); Serial. println("Accendi LED"); acceso = true; acceso 1= true; } if(post. Text 1. index. Of("? off") >0 ){ digital. Write(pin. LED 1, LOW); Serial. println("Spegni LED"); acceso = false; acceso 1=false; } } if(acceso 1){ client. println("<a href=". /? off"> <img src = "http: //mariangelamone. altervista. org/bt_OFF. png"alt = "Spegni" ></a>"); client. println("<h 3> La lampada è accesa </h 3>"); }else{ client. println("<a href=". /? on"> <img src = "http: //mariangelamone. altervista. org/bt_ON. png"alt = "Accendi" ></a>"); client. println("<h 3> La lampada è spenta </h 3>"); } delay(1); } } client. stop(); Serial. println("client disconnected");

Template #include <SPI. h> #include <Ethernet. h> byte mac[] = { 0 x. DE,

Template #include <SPI. h> #include <Ethernet. h> byte mac[] = { 0 x. DE, 0 x. AD, 0 x. BE, 0 x. EF, 0 x. FE, 0 x. ED }; IPAddress ip(172, 16, 200, 243); // Viene inizializzata la libreria Ethernet di Arduino e il webserver gira sulla porta 80 Ethernet. Server server(80); void setup() { Serial. begin(9600); Ethernet. begin(mac, ip); server. begin(); Serial. print("server is at "); Serial. println(Ethernet. local. IP()); } void loop() { Ethernet. Client client = server. available(); if (client) { Serial. println("new client"); boolean current. Line. Is. Blank = true; while (client. connected()) { if (client. available()) { char c = client. read(); // {variabili inviate dal server} // Se viene completato l'invio della richiesta HTTP, allora il server invia la risposta if (c == 'n' && current. Line. Is. Blank) { // Viene fatta una risposta HTTP, in pratica viene creata una pagina WEB in HTML client. println("HTTP/1. 1 200 OK"); client. println("Content-Type: text/html"); client. println("Connection: close"); // Dopo la risposta la connessione si interrompe client. println(); client. println("<meta charset=UTF-8>"); // serve per inserire i caretteri speciali client. println("<!DOCTYPE HTML>"); client. println("<html>"); //continuo pagina web break; } if (c == 'n') { current. Line. Is. Blank = true; } else if (c != 'r') { current. Line. Is. Blank = false; } } } delay(1); // Viene chiusta la connessione client. stop(); Serial. println("client disconnected"); } }