Buongiorno,
spero di aver scelto un titolo corretto. Premetto che non ho mai usato Arduino ma siccome ne avevo uno accantonato nel cassetto e si è posta l'occasione di provarlo ne ho approfittato.
Il mio progetto è sulla carta abbastanza semplice.
Arduino Uno
Ethernet Shield
Sensore DHT22
Sensore DS18B20
Dovrei leggere le temperature e l'umidità per poi riportarle su una pagina html raggiungibile all'IP di Arduino. Fino a qui sono riuscito nel mio intento.
Ora vorrei inviare una notifica tramite WebHook di IFTTT in modo tale che al superamento di una soglia di temperatura ricevo un'allarme. Questa parte non ho idea di come svilupparla, ho un URL ma non so nè come collegarmi e neanche come eventualmente evitare che continui a fare il loop richiamandolo continuamente (ho visto che Arduino Due permette più loop e forse è più comodo in questo). Accetto qualsiasi idea alternativa, soprattutto se su rete locale, l'importante è avere una notifica su Android e magari Windows. Ho letto delle guide per interfacciarsi con IFTTT ma richiedono HTTPClient e non sono riuscito a farlo convivere con EthernetClient, non ho ancora capito se la cosa è eventualmente possibile.
Vi riporto il codice per ora utilizzato, sono già quasi al limite di memoria (mi consigliate eventualmente di passare al Due o Mega?).
// Includo librerie
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
//PIN Usati
#define ONE_WIRE_BUS 2
#define DHTPIN 4
#define DHTTYPE DHT22
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DHT dht(DHTPIN, DHTTYPE);
//Variabili
float temp2;
float hum;
//Connessione
byte mac[] = {};
IPAddress ip(192,168,1,15);
EthernetServer server(80);
void setup(void)
{
Serial.begin(9600);
sensors.begin();
dht.begin();
Ethernet.begin(mac, ip);
server.begin();
Serial.print("Arduino server IP address: ");
Serial.println(Ethernet.localIP());
}
void loop(void)
{
sensors.requestTemperatures();
temp2 = dht.readTemperature();
hum = dht.readHumidity();
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 60");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("<title>Arduino</title>");
client.println("<script>");
client.println("window.onload=function rfsh(){");
client.println("document.getElementById('t1').innerHTML =");
client.print(sensors.getTempCByIndex(0));
client.println(";");
client.println("document.getElementById('t2').innerHTML =");
client.print(temp2);
client.println(";");
client.println("document.getElementById('h').innerHTML =");
client.print(hum);
client.println(";}");
client.println("</script>");
client.println("</head>");
client.println("<body>");
client.println("<h1>Temp1:</h1> ");
if (sensors.getTempCByIndex(0) > 26){
client.println("<p style='color: red; font-weight: bold;' id='t1'></p>");
} else {
client.println("<p id='t1'></p>");
}
client.println("<h1>Temp2:</h1> ");
if (temp2 > 26){
client.println("<p style='color: red; font-weight: bold;' id='t2'></p>");
} else {
client.println("<p id='t2'></p>");
}
client.println("<h1>Umidita:</h1> ");
client.println("<p id='h'></p>");
client.println("</body>");
client.println("</html>");
break;
}
if (c == '\n') {
currentLineIsBlank = true;
}
else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(100);
client.stop();
}
}
Vi ringrazio anticipatamente per l'aiuto. Qualsiasi critica al codice è ben accetta, anche se mi dite di buttarlo tutto e rileggermi le guide