Mar.01

P5: Controllore di rete con Arduino

P5

Intro: Progettare un controllore di rete LAN con Arduino (Diagnostica) e stampare i valori analogici (A0-A5) su una una pagina web.

 

Occorrente Hardware

  • 1 Arduino Uno
  • 1 Ethernet Shield
  • 1 cavo LAN
 
Occorrente Software
  • Arduino software
 
Sorgente Arduino

 

#include <SPI.h>
#include <Ethernet.h>

byte macAdd[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //indirizzo MAC (Arduino)

EthernetServer server(80); //in ascolto alla porta 80 (http)
EthernetClient client;

void setup() {

  Serial.begin(9600); //monitor seriale
   while (!Serial) { ; }

  if (Ethernet.begin(macAdd) == 0) { //controllo connessione
    Serial.println("ERROR DHCP."); //Nessun indirizzo IP

    // nessun client sta tentando di connettersi, restiamo in attesa
    for(;;)
      ;
  }

  Serial.print("Indirizzo IP Arduino: ");

  for (byte Byte = 0; Byte < 4; Byte++) {

    Serial.print(Ethernet.localIP()[Byte], DEC);
    Serial.print("."); 
  }
  Serial.println();

  server.begin();
  Serial.print("Avvio server, Ip: ");
  Serial.println(Ethernet.localIP());

}

void loop() {

  EthernetClient client = server.available(); //in attesa di clients

  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) {

          // header http

          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
	  client.println("Refresh: 5");  // refresh ogni 5 secondi
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");

          // stampo il valore di ciascun pin analogico

          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {

            int sensorReading = analogRead(analogChannel);

            client.print("A");
            client.print(analogChannel);
            client.print(" : ");
            client.print(sensorReading);
            client.println("<br />");

            }
            client.println("</html>");
            break;
          }

        if (c == '\n') {
          currentLineIsBlank = true; //nuova riga
        } 

        else if (c != '\r') {
          currentLineIsBlank = false; //carattere su nuova riga
        }
      }
    }

    delay(1); //ritardo

    client.stop(); //chiusura connessione

    Serial.println("Client disconnesso");

  }
}

 

 
Arduino
Share this Story:
  • facebook
  • twitter
  • gplus