Il mio Arduino è raggiungibile via web e adesso ti permette di accendere o spegnere la luce del mio comodino. Al pomeriggio batte il sole e quindi potresti non accorgerti della differenza.
Il codice funziona ma non ancora bene, sospetto qualche problema di logica: se accedo dal PC accende e subito spegne; se accedo da telefono ci vogliono due clic per spegnere. Cosa sarà?
Dopo il salto, metto il codice che terrò aggiornato all’ultima versione. Se sei capace e hai qualche suggerimento da darmi, te ne sarò immensamente grato.
Versione 0.6 del 22/01/2012: la luce si accende solo se la stanza è al buio.
Versione 0.61 del 30/01/2012: lo stato della luce viene inizializzato correttamente.
/* Web Server Temp Light Relais Turn on/off an electrical appliance via web Circuit: * Ethernet shield attached to pins 10, 11, 12, 13 * Analog inputs attached to pins A0 and A5 (optional) * Digital output attached to pin 9 * Relay board created 18 Dec 2009 by David A. Mellis modified 4 Sep 2010 by Tom Igoe modified 30 jan 2012 by Gaspar Torriero tip hat to Gianni Favilli www.giannifavilli.it */ #include <String.h> #include <SPI.h> #include <Ethernet.h> int pagine = 0; int tPin = 0; // Temperature sensor pin int lPin = 5; // Light sensor pin int outPin = 9; // relais pin float temp = 0.0; // Temperature in C° int luce = 0; // light in Lux boolean oldLEDON; // previous relay status boolean LEDON; // new relay status String readString; //string // Enter a MAC address and IP address for your controller below. byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192,168,XXX, XXX); // change according to your IP settings // 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(outPin, OUTPUT); Ethernet.begin(mac, ip); server.begin(); // initialise light status if (luce < 201) { oldLEDON = false } else { oldLEDON = true } } void loop() { temp = ( 5.0 * analogRead(tPin) * 100.0) / 1024.0; // Conversione voltaggio sensore in temperatura luce = (analogRead(lPin) * 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(); readString.concat(c); //store characters to string if (c == '\n' && currentLineIsBlank) { // take the request from the web if(readString.indexOf("L=1") > 0) { // lettura del valore se il LED si deve accendere LEDON = true; } else { LEDON = false; } while(LEDON != oldLEDON) { //if status has changed if(LEDON==true&&luce<201) { //and there is no other light digitalWrite(outPin, HIGH); // turn on the light } else if(LEDON==false) { digitalWrite(outPin, LOW); //turn off the light } oldLEDON = LEDON; // save changed status into previous status } // Build the HTML page 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("Nella stanza "); if (luce > 200) { client.print("c'è luce."); } else { client.print("è buio."); } client.println("<br />"); client.print(luce); client.print(" Lux"); client.println("<br />"); client.print("Visite dall'ultimo riavvio: "); client.print(pagine); pagine=pagine+1; client.println("<br />"); client.print("<h2><a href='/?L=1'>ACCENDI</a> | <a href='/?L=0'>SPEGNI</a></h2>"); break; } // if(currentline is blank) 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; } delay(1); // give the web browser time to receive the data } // if(client.available) } // while(client.connected) client.println("</body></html>"); readString=""; // pulisco la stringa per la successiva lettura } // if client client.stop(); // close the connection: } // void loop
Ma la temperatura dove la misura? Perché dice che sul comodino hai 4° 😀
stavo sostituendo i connettori rigidi con cavetti flessibili, probabilmente ti sei connesso in un momento in cui il sensore della temperatura era staccato 🙂
Ciao Gaspar, guarda qui mi pare sia un progetto parallelo al tuo
http://www.giannifavilli.it/blog/arduino-controllo-remoto-http/
Quello di Favilli non è un progetto parallelo, è quello da dove ho scopiazzato grossi pezzi di codice 🙂 e infatti hai visto che l’ho messo nei credits assieme a David Mellis e Tom Igoe?