Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Scheda ethernet di arduino
3
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
4
Librerie #include <Dhcp.h> #include <Dns.h>
#include <Ethernet.h> #include <EthernetClient.h> #include <EthernetServer.h> #include <EthernetUdp.h> #include <util.h>
5
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 EthernetClient ed EthernetServer gestiscono la scheda Arduino a seconda se funziona rispettivamente da client o da server EthernetUdp è utile per le comincazioni tramite il protocollo Udp Util gestisce le conversioni da a esadecimale
6
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[]={ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE,0xED} ; Indirizzo IP con sintassi:IPAddress ip(192, 168, 1,1);
7
Classe EthernetServer
EthernetServer: crea una porta sul server desiderato. Per http serve la porta 80. Essendo una classe, bisogna creare una istanza es. EthernetServer 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
8
Classe EthernetClient
La classe EthernetClient 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
9
Esempio: un host remoto legge i dati inviati da arduino
#include <LiquidCrystal.h> #include <SPI.h> #include <Ethernet.h> boolean lettura; int addr = 0; #define RS 12 #define EN 11 #define D7 2 #define D6 3 #define D5 4 #define D4 5 LiquidCrystal lcd( 12,11,5,4,3,2 ); // 'lcd' è una variabile di tipo LiquidCrystal */ byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(172, 16, 200, 243); EthernetServer server(80); int n=0; int m=0; int k=0; const int led=10; void setup() { lcd.begin( 16, 2 ); Serial.begin(9600); pinMode(led,OUTPUT); pinMode(7,INPUT); Ethernet.begin(mac,ip); server.begin(); }void loop() {delay(3000); digitalWrite(led,LOW); lettura=digitalRead(7); lcd.setCursor(0,0); if (lettura==LOW){ m=m+1; if(n==4){ n=0; k=k+1; digitalWrite(led,HIGH); } else{n=n+1;digitalWrite(led,LOW);} } lcd.print(n); EthernetClient client = server.available(); if (client) { Serial.println("new client"); boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); if (c == '\n' && currentLineIsBlank) { client.println("HTTP/ OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println("Refresh: 5"); client.println(); client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<p />"); client.println("<H1>"); client.println("m="); client.print(m); client.println("</H1>"); client.println("<H2>"); client.print("k= "); client.println("</H2>"); client.print(k); client.println("</html>"); break; if (c == '\n') { currentLineIsBlank = true; else if (c != '\r') { currentLineIsBlank = false; }}}}}
10
Esempio: controllo di una lampada da remoto (parte 1)
#include <SPI.h> #include <Ethernet.h> int pinLED = 9; int pinLED1 = 8; boolean acceso = false; boolean acceso1= false; byte mac[]={0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; IPAddress ip(172, 16, 200, 243); EthernetServer server(80); void setup() { pinMode(pinLED,OUTPUT); digitalWrite(pinLED,LOW); pinMode(pinLED1,OUTPUT); digitalWrite(pinLED1,LOW); Serial.begin(9600); Ethernet.begin(mac,ip); server.begin(); Serial.print("server is at "); Serial.println(Ethernet.localIP());} void loop() { EthernetClient client = server.available(); if (client) { Serial.println("new client"); boolean currentLineIsBlank = true; String postText =""; String postText1 =""; while (client.connected()) { if (client.available()) { char c = client.read(); if(postText.length()<10){ postText +=c; } if(postText1.length()<10){ postText1 +=c; if (c == '\n' && currentLineIsBlank) { client.println("HTTP/ OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println(); client.println("<meta charset=UTF-8>"); client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<head> <TITLE>Lambade</TITLE> </head>"); client.println("<body> <h1> Benvenuto nel Webserver Arduino </h1>"); client.println("<h1> Controllo di due lampade</h1>"); client.println("</body>"); client.println("</html>"); break; } if (c == '\n') { currentLineIsBlank = true; else if (c != '\r') { currentLineIsBlank = false;
11
Esempio: controllo di una lampada da remoto (parte 2)
if(postText.indexOf("?on") >0){ digitalWrite(pinLED,HIGH); Serial.println("Accendi LED"); acceso = true; acceso1= true; } // Se l'utente ha premuto l'icona per spegnere il LED if(postText.indexOf("?off") >0 ){ digitalWrite(pinLED,LOW); Serial.println("Spegni LED"); acceso = false; acceso1=false; if(postText1.indexOf("?on") >0){ digitalWrite(pinLED1,HIGH); if(postText1.indexOf("?off") >0 ){ digitalWrite(pinLED1,LOW); if(acceso){ client.println("<a href=\"./?off\"> <img src = \" = \"Spegni\" ></a>"); client.println("<h3> La lampada è accesa </h3>"); }else{ client.println("<a href=\"./?on\"> <img src = \" = \"Accendi\" ></a>"); client.println("<h3> La lampada è spenta </h3>"); } if(acceso1){ delay(1); client.stop(); Serial.println("client disconnected");
12
Template #include <SPI.h> #include <Ethernet.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(172, 16, 200, 243); // Viene inizializzata la libreria Ethernet di Arduino e il webserver gira sulla porta 80 EthernetServer server(80); void setup() { Serial.begin(9600); Ethernet.begin(mac,ip); server.begin(); Serial.print("server is at "); Serial.println(Ethernet.localIP()); } void loop() { EthernetClient client = server.available(); if (client) { Serial.println("new client"); boolean currentLineIsBlank = 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' && currentLineIsBlank) { // Viene fatta una risposta HTTP, in pratica viene creata una pagina WEB in HTML client.println("HTTP/ 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') { currentLineIsBlank = true; } else if (c != '\r') { currentLineIsBlank = false; delay(1); // Viene chiusta la connessione client.stop(); Serial.println("client disconnected");
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.