#define BLYNK_TEMPLATE_ID "YourTemplateID"
#define BLYNK_DEVICE_NAME "YourDeviceName"
#define BLYNK_AUTH_TOKEN "YourAuthToken"
#define BLYNK_PRINT Serial
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <NewPing.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define TRIGGER_PIN D5 // Pin collegato al pin TRIG del sensore JSN-SR04T
#define ECHO_PIN D6 // Pin collegato al pin ECHO del sensore JSN-SR04T
#define MAX_DISTANCE 400 // Distanza massima in centimetri
// Impostazioni WiFi e Blynk
char ssid[] = "TuoSSID";
char pass[] = "TuaPassword";
// Impostazioni LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Indirizzo I2C dell'LCD potrebbe variare
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
// Distanze per il livello del serbatoio
const unsigned int distanzaMinima = 10; // Distanza minima in cm (serbatoio pieno)
const unsigned int distanzaMassima = 100; // Distanza massima in cm (serbatoio vuoto)
// Definisci il pin virtuale per il LED Widget di Blynk
#define VIRTUAL_PIN_LED V2
void setup() {
Serial.begin(115200);
// Connessione al WiFi
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Configurazione Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
// Configurazione LCD
lcd.begin();
lcd.backlight();
// Messaggio di benvenuto
lcd.setCursor(0, 0);
lcd.print("Livello acqua:");
}
void loop() {
Blynk.run();
// Misurazione della distanza
unsigned int distance = sonar.ping_cm();
// Calcola il livello dell'acqua
unsigned int livelloAcqua = map(distance, distanzaMinima, distanzaMassima, 100, 0);
livelloAcqua = constrain(livelloAcqua, 0, 100); // Assicura che il livello sia tra 0 e 100
// Visualizza il livello dell'acqua su LCD
lcd.setCursor(0, 1);
lcd.print("Livello: ");
lcd.print(livelloAcqua);
lcd.print("% "); // Spazi extra per cancellare i caratteri precedenti
// Invia il livello dell'acqua a Blynk
Blynk.virtualWrite(V1, livelloAcqua);
// Controlla il livello dell'acqua e attiva l'allerta se il livello è al 30% o inferiore
if (livelloAcqua <= 30) {
Serial.println("ATTENZIONE: Livello dell'acqua al 30% o meno!");
Blynk.virtualWrite(VIRTUAL_PIN_LED, 255); // Accendi il LED virtuale
Blynk.logEvent("low_water_level", "ATTENZIONE: Livello dell'acqua al 30% o meno!"); // Abilita questa linea per le notifiche push
} else {
Blynk.virtualWrite(VIRTUAL_PIN_LED, 0); // Spegni il LED virtuale
}
delay(1000);
}