Premessa:
Lo Shield Ethernet di Arduino oltre alla connettività LAN 10/100 Mb, offre uno slot per micro SD per operazioni di Data Logging o File Dumping, quindi inoltre la card SD consente di gestire pagine html e mini-siti WEB piu o meno complessi. Con questo tutorial vedremo qualcosa di più semplice e come approcciarsi a questa Shield.
LISTA DEI MATERIALI:
La libreria Ethernet incorporata nell’IDE di Arduino consente di utilizzare lo shield immediatamente per qualsiasi operazione in rete. Alcuni esempi accessibili dal menu File > Esempi > Ethernet:
- BarometricPressureWebServer: Esempio con sensore SCP1000
- ChatServer: Un semplice server per chat
- DhcpAddressPrinter: Rileva il DHCP e lo visualizza nel monitor
- DhcpChatServer: Rileva il DHCP e lo manda a tutti i client in chat
- TelnetClient: semplice client Telnet
- TwitterClient: Semplice client twitter per visualizzare i tweet
- UdpNtpClient: Rileva L’orario dal server Netrwork Time Protocol NTP
- UDPSendReceiveString: Riceve le stringhe dei messaggi UDP, li stampa sulla porta serialee invia la stringa “acknowledge” al mittente
- WebClient: Si connette a GooGle
- WebClientRepeating: Si connette al web server e fa una richiesta
- WebServer Semplice server che invia in rete i dati ricevuti dalle sei porte analogiche
MAC Address
Caricando uno sketch di quelli riportati qui sopra, probabilmente non funzionerà. Di solito è necessario impostare il corretto MAC Address, ovvero l’indirizzo MAC (Media Access Control).Viene chiamato anche indirizzo fisico o indirizzo LAN ed è un codice univoco di 6 byte assegnato dai costruttori a ogni scheda di rete Ethernet. Se nello sketch non viene inserito l’indirizzo MAC corrispondente al proprio shield, la connessione “fisica” a internet non sarà possbile. Di solito, l’indirizzo MAC viene riportato in un’etichetta attaccata allo shield stesso. Una volta impostato il MAC, tutti gli esempi della libreria Ethernet saranno funzionanti.
E ora passiamo all’esempio pratico per capire meglio il concetto e tutte le funzionalità che mette a disposizione lo Shield.
Aprendo lo sketch WebServer:
Librerie.
- SPI LGPL: arduino.cc/en/Reference/SPI
- Ethernet LGPL: arduino.cc/en/Reference/Ethernet
/* Web Server Questo semplice esempio permette di creare un web server e mostrare i valori dei Pin Analog input usando Arduino Wiznet Ethernet shield. Circuit: * Ethernet shield attached to pins 10, 11, 12, 13 * Analog inputs attached to pins A0 through A5 (optional) */ #include <SPI.h> #include <Ethernet.h> // Inserire MAC address e IP address per il controllo remoto. byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192,168,1,66); // Ethernet server library // con IP address e port si può usare: // (port 80 is default for HTTP): EthernetServer server(80); void setup() { // Open serial communications and wait for port to open: // Apre la comunicazione seriale e aspetta l'apertura della porta Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only //aspetta la connessione della porta seriale. Solo se si usa Leonardo come scheda } // start the Ethernet connection and the server: // inizio della connessione etherne e al server Ethernet.begin(mac, ip); server.begin(); Serial.print("server is at "); Serial.println(Ethernet.localIP()); } void loop() { // COMINCIA IL CICLO CON ISTRUZIONI PER RICHIESTA // listen for incoming clients EthernetClient client = server.available(); if (client) { Serial.println("new client"); // an http request ends with a blank line // richiesta http boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); // if you've gotten to the end of the line (received a newline // character) and the line is blank, the http request has ended, // so you can send a reply if (c == '\n' && currentLineIsBlank) { // send a standard http response header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); // the connection will be closed after completion of the response client.println("Refresh: 5"); // refresh the page automatically every 5 sec client.println(); client.println(""); client.println(""); // output the value of each analog input pin for (int analogChannel = 0; analogChannel < 6; analogChannel++) { int sensorReading = analogRead(analogChannel); client.print("analog input "); client.print(analogChannel); client.print(" is "); client.print(sensorReading); client.println(""); } client.println(""); break; } if (c == '\n') { // you're starting a new line currentLineIsBlank = true; } else if (c != '\r') { // you've gotten a character on the current line currentLineIsBlank = false; } } } // give the web browser time to receive the data delay(1); // close the connection: client.stop(); Serial.println("client disonnected"); } }
Con questo tipo di esempio potrete visualizzare da remoto connettendovi all’indirizzo ip nel nostro caso 192.168.1.66 al vostro arduino e successivamente visualizzare un Analog input A0 A1 A2 A3 A4 A5 il vostro sensore, non perforza di temperatura ma qualsiasi tipo di sensore preferiate facendo alcuni accorgimenti e piccole modifiche nel codice.
Buon progetto.