#include <String.h>
#include <SPI.h>
#include <Ethernet.h>
#include <Client.h>
#include <Server.h>
/* ***
controllare un attuatore via web e salvare dati in DB
con sensori di temperatura, luce e interruttore magnetico
ARDUINO UNO
ETHERNET SHIELD
*** */
/inizializzazione ethernet shield/
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {
192, 168, 0, 100 }; // ip arduino internet in ***
byte gateway[] = {
192, 168, 0, 1 };
byte subnet[] = {
255, 255, 255, 0 };
byte server[] = {
000, 000, 000, 000 }; // server a cui inviare dati
Client client(server, 80); //porta del client server
/FINE inizializzazione ethernet shield/
long ContaCicli = 0; // contatore di loop
int outPinRele = 9; // pin attuatore
//char link[]="http://www.giannifavilli.it"; //link
String leggoStringa; // string del MAC in arrivo
boolean RELE1ON = false; // flag status attuatore RELE1ON
boolean logIn = false; // flag status attuatore logIn
/termistore/
float Temp; // variabile da calcolare
float inTemp = 1; // pin analogico IN temperature sensor
int ledPinTemp = 6; // pin led termistore
float TempReg = 20.0; // temperatura di controllo in celsius
/end termistore/
/fotoresistore/
int Lux; // variabile da calcolare
int ledPinLux = 7; // pin led fotoresistenza
int inPhotoresistor = 0; // pin analogico IN fotoresistore
float LuxReg = 150; // valore controllo luce da 0 a 255
/end fotoresistore/
/* interruttore allarme a contatto magnetico*/
int ledPinSwitch = 8; // scelgo il pin per il led interruttore
int inSwitch = 2; // scelgo il pin DIGITALE per l'interruttore
int valSwitch = 0; // variabile per leggere lo stato del pin
/* end interruttore allarme a contatto magnetico*/
/imposto la variabile e scrivo la stringa POST/
void inviaDataServer (Client c) {
c.print("POST http://000.000.000.000/arduino/listener.inc.php?cod=3&"); // indirizzo del server dove gira PHP
c.print("temp=");
c.print(Temp);
c.print("&");
c.print("lux=");
c.print(Lux);
c.print("&");
c.print("swt=");
c.print(valSwitch);
c.print("&");
c.print("Server=NOMESERVER");
c.print("&");
c.print("Board=ArduinoUNO");
c.print("&");
c.print("Cicli=");
c.println(ContaCicli);
}
void setup()
{
//delay(10000);
Ethernet.begin(mac, ip, gateway, subnet);
pinMode(outPinRele, OUTPUT); // dichiaro l'output del rele
pinMode(ledPinLux, OUTPUT); // dichiaro l'output delled lux
pinMode(ledPinTemp, OUTPUT); // dichiaro l'output della Temp
pinMode(ledPinSwitch, OUTPUT); // dichiaro l'output del led interruttore
pinMode(inSwitch, INPUT); // dichiaro l'input dell'interruttore
Serial.begin(9600);
Serial.println("connecting...");
}
void loop()
{
ContaCicli = ContaCicli++;
/inizio calcolo temperatura/
Temp = ((5 * analogRead(inTemp) * 100.0 ) / 1024) - 50;
/fine calcolo temperatura/
/inizio calcolo luce/
Lux = analogRead(inPhotoresistor);
Lux = constrain(Lux, 0, 1023); // limiti dei valori tra 0 e 1023
Lux = map(Lux, 0, LuxReg, 255, 0);
/fine clacolo luce/
/inizio clacolo switch/
valSwitch = digitalRead(inSwitch); // legge il valore dell'input switch
/fine clacolo switch/
if (client.connect()) {
inviaDataServer(client);
Serial.println("Connesso -> Valori Inviati");
// receiviDataServer(client);
// Serial.println("Connesso -> Valori Ricevuti");
/inizio client/
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
leggoStringa.concat(c);
if (c == '\n' && currentLineIsBlank) {
Serial.print(leggoStringa);
/imposto una stringa di controllo/
if(leggoStringa.indexOf("User=nome&Pwd=password") > 0) {
logIn=true;
}
else {
logIn=false;
}
if(logIn == true){
/inizio controllo attivazione del rele RELE1ON/
if(leggoStringa.indexOf("&OUT=11") > 0) {// check per attivare outPinRele
//led ON
digitalWrite(outPinRele, HIGH); // outPinRele ON
RELE1ON = true;
// *** //Serial.print("ON pin "); // scrivo in console il valore
// *** //Serial.println(outPinRele); // scrivo in console il valore
}
else
if(leggoStringa.indexOf("&OUT=01") > 0) // check per disattivare outPinRele
{
//led OFF
digitalWrite(outPinRele, LOW); // outPinRele OFF
RELE1ON = false;
// *** //Serial.print("OFF pin "); // scrivo in console il valore
// *** //Serial.println(outPinRele); // scrivo in console il valore
}
/fine controllo attivazione del rele RELE1ON/
}
} // FINE if client
}
else {
Serial.println("Connessione Fallita -> Impossbile Inviare/Ricevere Dati");
}
// pulisco la stringa per la successiva lettura
leggoStringa="";
//fermo il client
client.stop();
delay(10000);
} // FINEif client disponibile
}// FINEwhile client connesso
}// FINE if client
} // FINE loop