Why? The written data isn’t going anywhere until cleared or overwritten… and you can use additional timers to send the viewable data in timeout timer segments.
void.......{
lcd.clear();
lcd.setCursor(4, 0);//colonna e riga del display
lcd.print("IP Locale");
lcd.setCursor(2,1);//colonna e riga del display
lcd.print(WiFi.localIP());
timer.setTimeout(1000L,Temper_Serra);
}
void Temper_Serra(){
lcd.clear();
lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("Temper. Serra");
lcd.setCursor(4,1);//colonna e riga del display
lcd.print(T,2);
lcd.setCursor(11,1);//colonna e riga del display
lcd.print("%");
timer.setTimeout(1000L,Umidita_Serra);
}
void Umidita_Serra(){
lcd.clear();lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("Umidita' Serra");
lcd.setCursor(4,1);//colonna e riga del display
lcd.print(H,2);
lcd.setCursor(11,1);//colonna e riga del display
lcd.print("%");
timer.setTimeout(1000L,Luminosita);
}
void Luminosita(){
lcd.clear();
lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("Luminosita'");
lcd.setCursor(4,1);//colonna e riga del display
lcd.print(100-Luminosita/32767*100, 2);
lcd.setCursor(11,1);//colonna e riga del display
lcd.print("%");
timer.setTimeout(1000L, Umidita_SX);
}
and so on…
Thanks Alexis for the answer and suggestions.
I tried to use your code does not actually disconnect from blynk but I can not display the data on the display.
I tried increasing the timer.setTimeout but without result.
… I’m studying the timer function to understand how to use it in this project …
at the moment the code works if I deactivate the LCD display …
thank you
could you please post your new formated code so I could help you?
Here it is, thanks Alexis…
in this way it does not disconnect from blynk, but on LCD I display only the first part related to the connection and the last water level …
//--------------------- include librerie utilizzate ----------------------------
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_ADS1015.h>
Adafruit_ADS1115 ads; /* Use this for the 16-bit version */
//--------------------- parametri connessione wi-fi + blynk ----------------------------
char auth[] = "5691xxxxxxxxxxxxx"; // token Serra Domotica
char ssid[] = "TISxxxxxx";
char pass[] = "xxxxxxxxxxxxxxxxx";
// --------------------- parametri LCD ----------------------------
int lcdColumns = 16; // set the LCD number of columns
int lcdRows = 2; // set the LCD number of rows
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows); // set LCD address, number of columns and rows
//--------------------- definizione variabili ---------------------
#define DHT1PIN D7
#define DHT1TYPE DHT22
DHT dht1(DHT1PIN, DHT1TYPE);
SimpleTimer timer;
float h1 = dht1.readHumidity();
float t1 = dht1.readTemperature();
float adc0 = ads.readADC_SingleEnded(0); //fotocellula
float adc1 = ads.readADC_SingleEnded(1); //umidita Sx
float adc2 = ads.readADC_SingleEnded(2); //umidita Dx
float adc3 = ads.readADC_SingleEnded(3); //livello serbatorio
void setup(){
Serial.begin(9600); // console debug
Blynk.begin(auth, ssid, pass); // avvio connessione
Wire.begin();
Wire.setClockStretchLimit (1500);
dht1.begin(); // set DHT22
ads.setGain(GAIN_ONE); // set valore ADS1115 --> 1x gain +/- 4.096V 1 bit = 2mV 0.125mV
ads.begin(); // set Adafruit_ADS1015
lcd.init(); // set LCD
lcd.backlight(); // accensione LCD
//--------------------- definizione PIN ---------------------
pinMode(D0, OUTPUT);// rele soglia <25
//pinMode(D1);// SDA --> LCD + ADS1115
//pinMode(D2);// SLC --> LCD + ADS1115
pinMode(D3, OUTPUT);// allarme sensore acqua
//pinMode(D4);// RELE LAMPADA 1 via Blynk
//pinMode(D5);// RELE LAMPADA 2 via Blynk
pinMode(D6, OUTPUT);// rele soglia >25
//pinMode(D7);// DHT 22
pinMode(D8, OUTPUT);// inverter BC237
pinMode(D9, INPUT);// sensore acqua
//--------------------- assegnazione valore iniziale PIN ---------------------
digitalWrite(D0, HIGH);
digitalWrite(D3, LOW);
digitalWrite(D4, LOW);
digitalWrite(D5, LOW);
digitalWrite(D6, LOW);
digitalWrite(D8, LOW);
Serial.print ("IP Locale -->");
Serial.println (WiFi.localIP());
Serial.print ("Connessione Blynk OK! ");
Serial.println (Blynk.connected());
Serial.println ("");
}
void sensoreDHT(){
Serial.print ("IP Locale -->");
Serial.println (WiFi.localIP());
Serial.print ("Connessione Blynk OK! ");
Serial.println (Blynk.connected());
Serial.println ("");
float t1 = dht1.readTemperature();
float h1 = dht1.readHumidity();
t1 = ((int) (t1 * 10) / 10.0);
h1 = ((int) (h1 * 10) / 10.0);
Blynk.virtualWrite(10, t1); // virtual pin
Blynk.virtualWrite(11, h1); // virtual pin
// Check if any reads failed and exit early (to try again).
if (isnan(t1) || isnan(h1)) {
Serial.println("Failed to read from DHT #1");
}
else {
Serial.print("Temperatura interna: ");
Serial.print(t1);
Serial.print ("");
Serial.println(" gradi /"),(h1);
Serial.print("Umidita' interna: ");
Serial.print(h1);
Serial.println(" %");
Serial.println ("");
}
delay(2000);
if(t1 < 21)
{
Blynk.virtualWrite(V1, 255);
digitalWrite(D0, LOW); //accende alimenatore cella Peltier
delay(1000);
}
else
{
Blynk.virtualWrite(V1, 0);
digitalWrite(D0, HIGH); //spegne alimenatore cella Peltier
delay(1000);
}
if(t1 > 25)
{
Blynk.virtualWrite(V2, 255);
digitalWrite(D0, LOW); //accende alimenatore cella Peltier
digitalWrite(D8, LOW); //inverter cella Peltier
delay(1000);
}
else
{
Blynk.virtualWrite(V2, 0);
digitalWrite(D0, HIGH); //spegne alimenatore cella Peltier
digitalWrite(D8, HIGH); //spegne inverter cella Peltier
delay(1000);
}
}
void ads1115(){
int16_t adc0, adc1, adc2, adc3;
adc0 = ads.readADC_SingleEnded(0); //fotocellula
adc1 = ads.readADC_SingleEnded(1); //umidita Sx
adc2 = ads.readADC_SingleEnded(2); //umidita Dx
adc3 = ads.readADC_SingleEnded(3); //livello serbatorio
// Fotocellula - Luminosita
Serial.print("IN0 Fotocellula: "); Serial.print(adc0);
float Luminosita = (adc0);
Serial.print("\ Luminosita: "); Serial.println(Luminosita/32767*100);
Blynk.virtualWrite(V7, (100-Luminosita/32767*100)); // virtual pin
Serial.println(" ");
// Umidità Sx
Serial.print("IN1 umiditaSx : "); Serial.print(adc1);
float umiditaSx = (adc1);
Serial.print("\ Umidita' terreno Sx: "); Serial.println(umiditaSx/32767*100, 2);
Blynk.virtualWrite(V5, (100-umiditaSx/32767*100)); // virtual pin
float SX = (100-umiditaSx/32767*100);
Serial.println(" ");
// Umidità Dx
Serial.print("IN2 umiditaDx : "); Serial.print(adc2);
float umiditaDx = (adc2);
Serial.print("\ Umidita' terreno Dx : "); Serial.println(umiditaDx/32767*100, 2);
Blynk.virtualWrite(V6, (100-umiditaDx/32767*100)); // virtual pin
Serial.println(" ");
float DX = (100-umiditaDx/32767*100);
if ((DX <= 45) || (SX <= 45))
{ digitalWrite(D3,HIGH); //Accendi led
Blynk.virtualWrite(V3, 255);
}
else {
digitalWrite(D3,LOW); //Spegni led
Blynk.virtualWrite(V3, 0);
delay(1000); //Attende due secondi
}
// Livello serbatoio
Serial.print("IN3 livello acqua: "); Serial.print(adc3);
float livello = (adc3);
Serial.print("\ Livello acqua : "); Serial.println(livello/32767*100, 2);
Blynk.virtualWrite(V8, (100-livello/32767*100)); // virtual pin
Serial.println(" ");
float LV = ((100-livello/32767*100));
if (LV <= 30)
{
digitalWrite(D3,HIGH); //Accendi led
Blynk.virtualWrite(V4, 255);
}
else {
digitalWrite(D3,LOW); //Spegni led
Blynk.virtualWrite(V4, 0);
delay(1000); //Attende due secondi
}
}
//------------------ visualizzazione LCD ------------
void LCD(){
lcd.clear();
lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("SERVER BLYNK");
lcd.setCursor(0,1);
if (!Blynk.connected()){
lcd.print("NON CONNESSO");}
else{
lcd.setCursor(0,1);
if (Blynk.connected()){
lcd.print(" CONNESSO");
timer.setTimeout(1000L,Temper_Serra);}
}
}
void Temper_Serra(){
float T = dht1.readTemperature();
T = ((int) (T * 10) / 10.0);
Serial.print("temperatura lcd : "); Serial.println(T);
Serial.println(" ");
lcd.clear();
lcd.setCursor(1, 0);//colonna e riga del display
lcd.print("Temper. Serra");
lcd.setCursor(4,1);//colonna e riga del display
lcd.print(T,2);
lcd.setCursor(11,1);//colonna e riga del display
lcd.print("%");
timer.setTimeout(1000L,Umidita_Serra);
}
void Umidita_Serra(){
float H = dht1.readHumidity();
H = ((int) (H * 10) / 10.0);
Serial.print("umidita' lcd : "); Serial.println(H);
Serial.println(" ");
lcd.clear();lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("Umidita' Serra");
lcd.setCursor(4,1);//colonna e riga del display
lcd.print(H,2);
lcd.setCursor(11,1);//colonna e riga del display
lcd.print("%");
timer.setTimeout(1000L,Luminosita);
}
void Luminosita(){
float Luminosita = adc0;
lcd.clear();
lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("Luminosita'");
lcd.setCursor(4,1);//colonna e riga del display
lcd.print(100-Luminosita/32767*100, 2);
lcd.setCursor(11,1);//colonna e riga del display
lcd.print("%");
timer.setTimeout(1000L, Umidita_SX);
}
void Umidita_SX(){
float umiditaSx = adc1;
lcd.clear();
lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("Umidita' SX'");
lcd.setCursor(4,1);//colonna e riga del display
lcd.print(100-umiditaSx/32767*100, 2);
lcd.setCursor(11,1);//colonna e riga del display
lcd.print("%");
timer.setTimeout(1000L, Umidita_DX);
}
void Umidita_DX(){
float umiditaDx = adc2;
lcd.clear();
lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("Umidita' DX'");
lcd.setCursor(4,1);//colonna e riga del display
lcd.print(100-umiditaDx/32767*100, 2);
lcd.setCursor(11,1);//colonna e riga del display
lcd.print("%");
timer.setTimeout(1000L, Livello_acqua);
}
void Livello_acqua(){
float LV = adc3;
lcd.clear();
lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("Livello acqua");
lcd.setCursor(5,1);//colonna e riga del display
lcd.print(100-LV/32767*100, 2);
lcd.setCursor(11,1);//colonna e riga del display
lcd.print("%");
if (LV <= 30)
{
lcd.clear();
lcd.setCursor(4, 0);//colonna e riga del display
lcd.print("ALLARME");
lcd.setCursor(0,1);//colonna e riga del display
lcd.print("SERBATOIO VUOTO");
timer.setTimeout(1000L, LCD);
}
}
void loop(){
Blynk.run();
timer.run();
timer.setInterval(5000, sensoreDHT);
timer.setInterval(5000, ads1115);
timer.setInterval(5000, LCD);
timer.setInterval(5000, Temper_Serra);
timer.setInterval(5000, Umidita_Serra);
timer.setInterval(5000, Umidita_DX);
timer.setInterval(5000, Umidita_SX);
timer.setInterval(5000, Livello_acqua);
}
Oh…my… Why!!!
I don’t think you understand the concept of setting up a timer yet all those go in the void setup()
not in the loop where they are trying to run thousands of times a second.
AND, you have them all set to run simultaneously every 5 seconds… so even in the proper location… well, bad, very bad
Stagger the timers accordingly so they do not try to run concurrent functions.
timer.setInterval must be in setup
you can’t use same timer.setInterval value
replace timer.setInterval(5000, sensoreDHT) with timer.setInterval(60000, sensoreDHT)
no need to get temperature every 5 secs
as functions are called by timer.setTimeout(1000L,…
you only need timer.setInterval(5000, Temper_Serra);
I don’t know if the void ads1115(){ … is correct I never use ads1115
as @Gunner said, you have to understand the concept of setting up the timers first.
Hi, I thank you for the suggestions I hope to be able to put them into practice.
… you will surely have understood that I am not a programmer …
I have made the suggested changes, below the new code, I hope I have understood and made the right changes.
… at the moment you do not disconnect anymore from blynk but the visualization on LCD is still fast …
I’m working on a scretch to learn how the Timer function works …
//--------------------- include librerie utilizzate ----------------------------
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_ADS1015.h>
Adafruit_ADS1115 ads; /* Use this for the 16-bit version */
//--------------------- parametri connessione wi-fi + blynk ----------------------------
char auth[] = "56xxxxxxxxxx95"; // token Serra Domotica
char ssid[] = "TISxxxxxx";
char pass[] = "xxxxxxxx";
//--------------------- parametri LCD ----------------------------
int lcdColumns = 16; // set the LCD number of columns
int lcdRows = 2; // set the LCD number of rows
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows); // set LCD address, number of columns and rows
//--------------------- definizione variabili ---------------------
#define DHT1PIN D7
#define DHT1TYPE DHT22
DHT dht1(DHT1PIN, DHT1TYPE);
SimpleTimer timer;
float h1 = dht1.readHumidity();
float t1 = dht1.readTemperature();
float adc0 = ads.readADC_SingleEnded(0); //fotocellula
float adc1 = ads.readADC_SingleEnded(1); //umidita Sx
float adc2 = ads.readADC_SingleEnded(2); //umidita Dx
float adc3 = ads.readADC_SingleEnded(3); //livello serbatorio
void setup(){
Serial.begin(9600); // console debug
Blynk.begin(auth, ssid, pass); // avvio connessione
Wire.begin();
dht1.begin(); // set DHT22
ads.setGain(GAIN_ONE); // set valore ADS1115 --> 1x gain +/- 4.096V 1 bit = 2mV 0.125mV
ads.begin(); // set Adafruit_ADS1015
lcd.init(); // set LCD
lcd.backlight(); // accensione LCD
//--------------------- definizione PIN ---------------------
pinMode(D0, OUTPUT);// rele soglia <25
//pinMode(D1);// SDA --> LCD + ADS1115
//pinMode(D2);// SLC --> LCD + ADS1115
pinMode(D3, OUTPUT);// allarme sensore acqua
//pinMode(D4);// RELE LAMPADA 1 via Blynk
//pinMode(D5);// RELE LAMPADA 2 via Blynk
pinMode(D6, OUTPUT);// rele soglia >25
//pinMode(D7);// DHT 22
pinMode(D8, OUTPUT);// inverter BC237
pinMode(D9, INPUT);// sensore acqua
//--------------------- assegnazione valore iniziale PIN ---------------------
digitalWrite(D0, HIGH);
digitalWrite(D3, LOW);
digitalWrite(D4, LOW);
digitalWrite(D5, LOW);
digitalWrite(D6, LOW);
digitalWrite(D8, LOW);
Serial.print ("IP Locale -->");
Serial.println (WiFi.localIP());
Serial.print ("Connessione Blynk OK! ");
Serial.println (Blynk.connected());
Serial.println ("");
}
void sensoreDHT(){
Serial.print ("IP Locale -->");
Serial.println (WiFi.localIP());
Serial.print ("Connessione Blynk OK! ");
Serial.println (Blynk.connected());
Serial.println ("");
float t1 = dht1.readTemperature();
float h1 = dht1.readHumidity();
t1 = ((int) (t1 * 10) / 10.0);
h1 = ((int) (h1 * 10) / 10.0);
Blynk.virtualWrite(10, t1); // virtual pin
Blynk.virtualWrite(11, h1); // virtual pin
// Check if any reads failed and exit early (to try again).
if (isnan(t1) || isnan(h1)) {
Serial.println("Failed to read from DHT #1");
}
else {
Serial.print("Temperatura interna: ");
Serial.print(t1);
Serial.print ("");
Serial.println(" gradi /"),(h1);
Serial.print("Umidita' interna: ");
Serial.print(h1);
Serial.println(" %");
Serial.println ("");
}
delay(2000);
if(t1 < 21)
{
Blynk.virtualWrite(V1, 255);
digitalWrite(D0, LOW); //accende alimenatore cella Peltier
delay(1000);
}
else
{
Blynk.virtualWrite(V1, 0);
digitalWrite(D0, HIGH); //spegne alimenatore cella Peltier
delay(1000);
}
if(t1 > 25)
{
Blynk.virtualWrite(V2, 255);
digitalWrite(D0, LOW); //accende alimenatore cella Peltier
digitalWrite(D8, LOW); //inverter cella Peltier
delay(1000);
}
else
{
Blynk.virtualWrite(V2, 0);
digitalWrite(D0, HIGH); //spegne alimenatore cella Peltier
digitalWrite(D8, HIGH); //spegne inverter cella Peltier
delay(1000);
}
}
void ads1115(){
int16_t adc0, adc1, adc2, adc3;
adc0 = ads.readADC_SingleEnded(0); //fotocellula
adc1 = ads.readADC_SingleEnded(1); //umidita Sx
adc2 = ads.readADC_SingleEnded(2); //umidita Dx
adc3 = ads.readADC_SingleEnded(3); //livello serbatorio
// Fotocellula - Luminosita
Serial.print("IN0 Fotocellula: "); Serial.print(adc0);
float Luminosita = (adc0);
Serial.print("\ Luminosita: "); Serial.println(Luminosita/32767*100);
Blynk.virtualWrite(V7, (100-Luminosita/32767*100)); // virtual pin
Serial.println(" ");
// Umidità Sx
Serial.print("IN1 umiditaSx : "); Serial.print(adc1);
float umiditaSx = (adc1);
Serial.print("\ Umidita' terreno Sx: "); Serial.println(umiditaSx/32767*100, 2);
Blynk.virtualWrite(V5, (100-umiditaSx/32767*100)); // virtual pin
float SX = (100-umiditaSx/32767*100);
Serial.println(" ");
// Umidità Dx
Serial.print("IN2 umiditaDx : "); Serial.print(adc2);
float umiditaDx = (adc2);
Serial.print("\ Umidita' terreno Dx : "); Serial.println(umiditaDx/32767*100, 2);
Blynk.virtualWrite(V6, (100-umiditaDx/32767*100)); // virtual pin
Serial.println(" ");
float DX = (100-umiditaDx/32767*100);
if ((DX <= 45) || (SX <= 45))
{ digitalWrite(D3,HIGH); //Accendi led
Blynk.virtualWrite(V3, 255);
}
else {
digitalWrite(D3,LOW); //Spegni led
Blynk.virtualWrite(V3, 0);
delay(1000); //Attende due secondi
}
// Livello serbatoio
Serial.print("IN3 livello acqua: "); Serial.print(adc3);
float livello = (adc3);
Serial.print("\ Livello acqua : "); Serial.println(livello/32767*100, 2);
Blynk.virtualWrite(V8, (100-livello/32767*100)); // virtual pin
Serial.println(" ");
float LV = ((100-livello/32767*100));
if (LV <= 30)
{
digitalWrite(D3,HIGH); //Accendi led
Blynk.virtualWrite(V4, 255);
}
else {
digitalWrite(D3,LOW); //Spegni led
Blynk.virtualWrite(V4, 0);
delay(1000); //Attende due secondi
}
}
//------------------ visualizzazione LCD ------------
void LCD(){
lcd.clear();
lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("SERVER BLYNK");
lcd.setCursor(0,1);
if (!Blynk.connected()){
lcd.print("NON CONNESSO");}
else{
lcd.setCursor(0,1);
if (Blynk.connected()){
lcd.print(" CONNESSO");
timer.setTimeout(60000,Temper_Serra);}
}
}
void Temper_Serra(){
float T = dht1.readTemperature();
T = ((int) (T * 10) / 10.0);
Serial.print("temperatura lcd : "); Serial.println(T);
Serial.println(" ");
lcd.clear();
lcd.setCursor(1, 0);//colonna e riga del display
lcd.print("Temper. Serra");
lcd.setCursor(4,1);//colonna e riga del display
lcd.print(T,2);
lcd.setCursor(11,1);//colonna e riga del display
lcd.print("%");
timer.setTimeout(60000,Umidita_Serra);
}
void Umidita_Serra(){
float H = dht1.readHumidity();
H = ((int) (H * 10) / 10.0);
Serial.print("umidita' lcd : "); Serial.println(H);
Serial.println(" ");
lcd.clear();lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("Umidita' Serra");
lcd.setCursor(4,1);//colonna e riga del display
lcd.print(H,2);
lcd.setCursor(11,1);//colonna e riga del display
lcd.print("%");
timer.setTimeout(60000,Luminosita);
}
void Luminosita(){
float Luminosita = adc0;
adc0 = ads.readADC_SingleEnded(0); //fotocellula
lcd.clear();
lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("Luminosita'");
lcd.setCursor(4,1);//colonna e riga del display
lcd.print(100-Luminosita/32767*100, 2);
lcd.setCursor(11,1);//colonna e riga del display
lcd.print("%");
timer.setTimeout(60000, Umidita_SX);
}
void Umidita_SX(){
float umiditaSx = adc1;
adc1 = ads.readADC_SingleEnded(1); //umidita Sx
lcd.clear();
lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("Umidita' SX'");
lcd.setCursor(4,1);//colonna e riga del display
lcd.print(100-umiditaSx/32767*100, 2);
lcd.setCursor(11,1);//colonna e riga del display
lcd.print("%");
timer.setTimeout(60000, Umidita_DX);
}
void Umidita_DX(){
float umiditaDx = adc2;
adc2 = ads.readADC_SingleEnded(2); //umidita Dx
lcd.clear();
lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("Umidita' DX'");
lcd.setCursor(4,1);//colonna e riga del display
lcd.print(100-umiditaDx/32767*100, 2);
lcd.setCursor(11,1);//colonna e riga del display
lcd.print("%");
timer.setTimeout(60000, Livello_acqua);
}
void Livello_acqua(){
float LV = (100-adc3/32767*100, 2);
adc3 = ads.readADC_SingleEnded(3); //livello serbatorio
if (LV <= 30){
lcd.clear();
lcd.setCursor(4, 0);//colonna e riga del display
lcd.print("ALLARME");
lcd.setCursor(0,1);//colonna e riga del display
lcd.print("SERBATOIO VUOTO");
}
else{
lcd.clear();
lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("Livello acqua");
lcd.setCursor(5,1);//colonna e riga del display
lcd.print(LV, 2);
lcd.setCursor(11,1);//colonna e riga del display
lcd.print("%");
timer.setTimeout(60000, LCD);
}
}
void loop(){
Blynk.run();
timer.run();
timer.setInterval(5000,ads1115);
timer.setInterval(60000,sensoreDHT);
LCD(); Temper_Serra(); Umidita_Serra();
Umidita_DX(); Umidita_SX(); Livello_acqua();
}
no
only that in the loop
void loop(){
Blynk.run();
timer.run();
}
void setup(){
Serial.begin(9600); // console debug
Blynk.begin(auth, ssid, pass); // avvio connessione
timer.setInterval(5000,ads1115);
timer.setInterval(60000,sensoreDHT);
Hi Alexis with the changes you suggest in the Blynk app the DHT sensor data is lost!
… with the code I posted Blynk does not disconnect and the project works.
Only the LCD display is too fast and some data is not displayed.
I can not figure out how to manage the time of displaying individual information to be displayed on LCD …
DHT sensor is lost or failed ?
I saw that you have redundancy between void ads1115() and other void !
timer.setInterval(5000,ads1115);
failed…
your code is very poorly structured
too many redundancies
Alexis, how could I fix it?
… I tried with the varibaili goblali but I can not make it work …
… if I exclude the display on the LCD, for how I thought it works even if it is badly written
Alexis, so far I’ve made simpler projects with blynk, this is the first time I’ve done a more complex project …
the difficulties I am encountering is the simultaneous display of the data I send to Blynk also on LCDs
I will fix that for you soon, if you can wait till tomorrow
I have to edit your code and manage it
Alexis, of course I’m waiting!
thank you so much…
I hope to learn a lot from your directions …
Salvatore,
Learn that and try it
As you can see, I managed all your sketch
I can’t test it because I’ve no ADS1015,
but , code compiles without any error on my IDE.
waiting for your comments
//--------------------- include librerie utilizzate ----------------------------
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_ADS1015.h>
//#include <SimpleTimer.h> not needed , already included with blynk
BlynkTimer timer;
Adafruit_ADS1115 ads; /* Use this for the 16-bit version */
//--------------------- parametri connessione wi-fi + blynk ----------------------------
char auth[] = "56xxxxxxxxxx95"; // token Serra Domotica
char ssid[] = "TISxxxxxx";
char pass[] = "xxxxxxxx";
//--------------------- parametri LCD ----------------------------
int lcdColumns = 16; // set the LCD number of columns
int lcdRows = 2; // set the LCD number of rows
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows); // set LCD address, number of columns and rows
//--------------------- definizione variabili ---------------------
#define DHT1PIN D7
#define DHT1TYPE DHT22
DHT dht1(DHT1PIN, DHT1TYPE);
float adc0 = ads.readADC_SingleEnded(0); //fotocellula
float adc1 = ads.readADC_SingleEnded(1); //umidita Sx
float adc2 = ads.readADC_SingleEnded(2); //umidita Dx
float adc3 = ads.readADC_SingleEnded(3); //livello serbatorio
float livello, Luminosita , umiditaSx , umiditaDx , DX, SX, LV , H , T, t1, h1 ;
void setup() {
Serial.begin(115200); // console debug
Blynk.begin(auth, ssid, pass); // avvio connessione
Wire.begin();
dht1.begin(); // set DHT22
ads.setGain(GAIN_ONE); // set valore ADS1115 --> 1x gain +/- 4.096V 1 bit = 2mV 0.125mV
ads.begin(); // set Adafruit_ADS1015
lcd.init(); // set LCD
lcd.backlight(); // accensione LCD
//--------------------- definizione PIN ---------------------
pinMode(D0, OUTPUT);// rele soglia <25
//pinMode(D1);// SDA --> LCD + ADS1115
//pinMode(D2);// SLC --> LCD + ADS1115
pinMode(D3, OUTPUT);// allarme sensore acqua
//pinMode(D4);// RELE LAMPADA 1 via Blynk
//pinMode(D5);// RELE LAMPADA 2 via Blynk
pinMode(D6, OUTPUT);// rele soglia >25
//pinMode(D7);// DHT 22
pinMode(D8, OUTPUT);// inverter BC237
pinMode(D9, INPUT);// sensore acqua
//--------------------- assegnazione valore iniziale PIN ---------------------
digitalWrite(D0, HIGH);
digitalWrite(D3, LOW);
digitalWrite(D4, LOW);
digitalWrite(D5, LOW);
digitalWrite(D6, LOW);
digitalWrite(D8, LOW);
Serial.print ("IP Locale -->");
Serial.println (WiFi.localIP());
Serial.print ("Connessione Blynk OK! ");
Serial.println (Blynk.connected());
Serial.println ("");
//--------------------- TIMERS iniziale ---------------------
timer.setInterval(500000, LCD); //7x60000 + margin, time needed to execute all the functions, could be adjusted if you have to change '60000' intervals
}//end setup
//------------------ visualizzazione LCD ------------
void LCD() {
lcd.clear();
lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("SERVER BLYNK");
lcd.setCursor(0, 1);
if (!Blynk.connected()) {
lcd.print("NON CONNESSO");
}
else {
lcd.setCursor(0, 1);
if (Blynk.connected()) {
lcd.print(" CONNESSO");
timer.setTimeout(60000, Temper_Serra);
}
}
}
void Temper_Serra() {
sensoreDHT();//call sensor
Serial.print("temperatura lcd : "); Serial.println(t1);
Serial.println(" ");
lcd.clear();
lcd.setCursor(1, 0);//colonna e riga del display
lcd.print("Temper. Serra");
lcd.setCursor(4, 1); //colonna e riga del display
lcd.print(t1, 2);
lcd.setCursor(11, 1); //colonna e riga del display
lcd.print("%");
timer.setTimeout(60000, umidita);
}
void umidita() {
Serial.print("umidita' lcd : "); Serial.println(h1);
Serial.println(" ");
lcd.clear(); lcd.setCursor(2, 0); //colonna e riga del display
lcd.print("Umidita' Serra");
lcd.setCursor(4, 1); //colonna e riga del display
lcd.print(h1, 2);
lcd.setCursor(11, 1); //colonna e riga del display
lcd.print("%");
timer.setTimeout(60000, luminosita);
}
// Fotocellula - Luminosita
void luminosita() {
Luminosita = adc0;
adc0 = ads.readADC_SingleEnded(0); //fotocellula
Serial.print("IN0 Fotocellula: "); Serial.print(adc0);
float Luminosita = (adc0);
Serial.print("\ Luminosita: "); Serial.println(Luminosita / 32767 * 100);
Blynk.virtualWrite(V7, (100 - Luminosita / 32767 * 100)); // virtual pin
Serial.println(" ");
lcd.clear();
lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("Luminosita'");
lcd.setCursor(4, 1); //colonna e riga del display
lcd.print(100 - Luminosita / 32767 * 100, 2);
lcd.setCursor(11, 1); //colonna e riga del display
lcd.print("%");
timer.setTimeout(60000, Umidita_SX);
}
// Umidità Sx
void Umidita_SX() {
umiditaSx = adc1;
adc1 = ads.readADC_SingleEnded(1); //umidita Sx
Serial.print("IN1 umiditaSx : "); Serial.print(adc1);
umiditaSx = (adc1);
Serial.print("\ Umidita' terreno Sx: "); Serial.println(umiditaSx / 32767 * 100, 2);
Blynk.virtualWrite(V5, (100 - umiditaSx / 32767 * 100)); // virtual pin
SX = (100 - umiditaSx / 32767 * 100);
Serial.println(" ");
lcd.clear();
lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("Umidita' SX'");
lcd.setCursor(4, 1); //colonna e riga del display
lcd.print(100 - umiditaSx / 32767 * 100, 2);
lcd.setCursor(11, 1); //colonna e riga del display
lcd.print("%");
timer.setTimeout(60000, Umidita_DX);
}
// Umidità Dx
void Umidita_DX() {
umiditaDx = adc2;
adc2 = ads.readADC_SingleEnded(2); //umidita Dx
Serial.print("IN2 umiditaDx : "); Serial.print(adc2);
umiditaDx = (adc2);
Serial.print("\ Umidita' terreno Dx : "); Serial.println(umiditaDx / 32767 * 100, 2);
Blynk.virtualWrite(V6, (100 - umiditaDx / 32767 * 100)); // virtual pin
Serial.println(" ");
DX = (100 - umiditaDx / 32767 * 100);
if ((DX <= 45) || (SX <= 45))
{ digitalWrite(D3, HIGH); //Accendi led
Blynk.virtualWrite(V3, 255);
}
else {
digitalWrite(D3, LOW); //Spegni led
Blynk.virtualWrite(V3, 0);
}
lcd.clear();
lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("Umidita' DX'");
lcd.setCursor(4, 1); //colonna e riga del display
lcd.print(100 - umiditaDx / 32767 * 100, 2);
lcd.setCursor(11, 1); //colonna e riga del display
lcd.print("%");
timer.setTimeout(60000, Livello_acqua);
}
// Livello serbatoio
void Livello_acqua() {
LV = (100 - adc3 / 32767 * 100, 2);
adc3 = ads.readADC_SingleEnded(3); //livello serbatorio
Serial.print("IN3 livello acqua: "); Serial.print(adc3);
livello = (adc3);
Serial.print("\ Livello acqua : "); Serial.println(livello / 32767 * 100, 2);
Blynk.virtualWrite(V8, (100 - livello / 32767 * 100)); // virtual pin
Serial.println(" ");
LV = ((100 - livello / 32767 * 100));
if (LV <= 30)
{
digitalWrite(D3, HIGH); //Accendi led
Blynk.virtualWrite(V4, 255);
}
else {
digitalWrite(D3, LOW); //Spegni led
Blynk.virtualWrite(V4, 0);
}
Serial.print("IN3 livello acqua: "); Serial.print(adc3);
livello = (adc3);
Serial.print("\ Livello acqua : "); Serial.println(livello / 32767 * 100, 2);
Blynk.virtualWrite(V8, (100 - livello / 32767 * 100)); // virtual pin
Serial.println(" ");
LV = ((100 - livello / 32767 * 100));
if (LV <= 30)
{
digitalWrite(D3, HIGH); //Accendi led
Blynk.virtualWrite(V4, 255);
lcd.clear();
lcd.setCursor(4, 0);//colonna e riga del display
lcd.print("ALLARME");
lcd.setCursor(0, 1); //colonna e riga del display
lcd.print("SERBATOIO VUOTO");
}
else {
digitalWrite(D3, LOW); //Spegni led
Blynk.virtualWrite(V4, 0);
lcd.clear();
lcd.setCursor(2, 0);//colonna e riga del display
lcd.print("Livello acqua");
lcd.setCursor(5, 1); //colonna e riga del display
lcd.print(LV, 2);
lcd.setCursor(11, 1); //colonna e riga del display
lcd.print("%");
}
}
void sensoreDHT() {
Serial.print ("IP Locale -->");
Serial.println (WiFi.localIP());
Serial.print ("Connessione Blynk OK! ");
Serial.println (Blynk.connected());
Serial.println ("");
t1 = dht1.readTemperature();
h1 = dht1.readHumidity();
t1 = ((int) (t1 * 10) / 10.0);
h1 = ((int) (h1 * 10) / 10.0);
Blynk.virtualWrite(10, t1); // virtual pin
Blynk.virtualWrite(11, h1); // virtual pin
// Check if any reads failed and exit early (to try again).
if (isnan(t1) || isnan(h1)) {
Serial.println("Failed to read from DHT #1");
}
else {
Serial.print("Temperatura interna: ");
Serial.print(t1);
Serial.print ("");
Serial.println(" gradi /"), (h1);
Serial.print("Umidita' interna: ");
Serial.print(h1);
Serial.println(" %");
Serial.println ("");
}
if (t1 < 21)
{
Blynk.virtualWrite(V1, 255);
digitalWrite(D0, LOW); //accende alimenatore cella Peltier
}
else
{
Blynk.virtualWrite(V1, 0);
digitalWrite(D0, HIGH); //spegne alimenatore cella Peltier
}
if (t1 > 25)
{
Blynk.virtualWrite(V2, 255);
digitalWrite(D0, LOW); //accende alimenatore cella Peltier
digitalWrite(D8, LOW); //inverter cella Peltier
}
else
{
Blynk.virtualWrite(V2, 0);
digitalWrite(D0, HIGH); //spegne alimenatore cella Peltier
digitalWrite(D8, HIGH); //spegne inverter cella Peltier
}
}
void loop() {
Blynk.run();
timer.run();
}
Alexis, thank you so much!
Your code works, do not disconnect from Blynk and display the data on the LCD, I have only readjusted the intervals of the various functions.
I think the main mistake I made was to keep the LCD display separate from the various functions. I have to understand better the functioning of the Timer which is still unclear to me.
I found that once the cycle is over, the DHT sensor data is lost (I am attaching screenshots of the serial monitor), which are restored shortly thereafter.
thank you so much.