Pubblicato il

Come usare Ethernet Shield Arduino W5100 Controllare Temperatura

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.

ArduinoEthernetNotPoe

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.