Domotica spicciola con Arduino

Stimolato da questo incontro, ho preso qualche componente da Robot Italy (bravi e veloci), ho preso un DNS dinamico gratuito, e mi sono fatto la domotica più semplice e veloce possibile: il server della temperatura e della luce.

Il codice (che terrò aggiornato man mano che lo modifico):

/*
  Web Server Temp
 
 A simple web server that shows the value of the analog input pins.
 using an Arduino Wiznet Ethernet shield. 
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)
 
 created 18 Dec 2009
 by David A. Mellis
 modified 4 Sep 2010
 by Tom Igoe
 modified 15 jan 2012
 by Gaspar Torriero
 
 */

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

int pagine = 0;
int inPin = 0; // Pin di lettura
int temp = 0; // variabile temperatura
int luce = 0; //variabile luce

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,30, 177);

// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup()
{
  // start the Ethernet connection and the server:
  pinMode(9, OUTPUT);  
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{
  digitalWrite(9, LOW);    // set the LED off
  temp = ( 5.0 * analogRead(inPin) * 100.0) / 1024.0; // Conversione voltaggio sensore in temperatura
  luce = (analogRead(5) * 10000.0) / 1024.0; //Conversione voltaggio sensore in Lux
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // 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();
          client.print("<html><head><title>Gasparduino Web Server Ver. 0.3</title><meta http-equiv='Content-Type' content='text/html; charset=utf-8' ></head><body>");

          // output the value of analog input pins
          client.print("<h1>Gaspar Torriero gone Arduino</h1><hr />");
          client.println("<br />");
          client.print("Temperatura corrente: ");
          client.print(temp);
          client.print("°C");
          client.println("<br />");
          client.print("La luce è ");
          if (luce > 300) {
            client.print("accesa.");
          }
          else {
            client.print("spenta.");
          }
          client.println("<br />");
          pagine=pagine+1;
          client.print("Visite dall'ultimo riavvio: ");
          client.print(pagine);
          client.println("</body></html>");
          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();
    digitalWrite(9, HIGH);   // set the LED on
    delay(300);              // wait for a sec
    digitalWrite(9, LOW);    // set the LED off
    delay(300);              // wait for a sec
  }
}

5 risposte a “Domotica spicciola con Arduino”

  1. Hai 23 gradi in casa!!! Abbassare subito il termostato e indossare maglione!

    1. il termostato è impostato a 21°, ma il sensore è vicino alle mie mani, devo trovargli una sistemazione più adeguata 🙂

  2. figo. hai acceso qualcosa 5 minuti fa! 🙂 Tra qualche settimana saranno disponibili i raspberry Pi che mi piacciono altrettanto. Che tu sappia, Arduino ha progetti simili?

    1. Presveva, ho dovuto googlare 🙂 Ho sentito che stanno per uscire queste motherboard a prezzi ridicoli, ed è una gran bella novità. Ma forse l’Arduino è una filosofia diversa: invece di schermo e tastiera, physical computing!
      Per dire, uno degli esempi fatti da Tom Igoe era una interfaccia composta da una vasca di fango.

I commenti sono chiusi