Irrigazione con blynk

Ciao a tutti, ho scritto questo piccolo codice ma blynk si disconntette usando delay. il programma continua a funzionare ma sull'app blynk mi da disconnesso.consigli?

 *************************************************************/

/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial


/* Fill-in your Template ID (only if using Blynk.Cloud) */
//#define BLYNK_TEMPLATE_ID   "YourTemplateID"


#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
BlynkTimer timer;
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "gudvIfJQWQmakqB8xFN2LRo16y-LiXcb";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "*******";
char pass[] = "*******";

int minutipersettore = 0;
int settore1 = D1;
int minutipersettoresec = 0;

void setup()
{
  // Debug console
  Serial.begin(9600);
//server da cambiare in base a cosa si usa
  Blynk.begin(auth,ssid,pass,"iot.serangkota.go.id",8080);
 
 }
 
 
BLYNK_WRITE(V2){
   minutipersettore = param.asInt();

}

 


void loop()
{
  
  minutipersettoresec = map(minutipersettore, 1, 60, 60000, 3600000);
 int sensorumid = analogRead(A0);
 int orario = digitalRead(D8);
 Blynk.virtualWrite(V0, sensorumid);

 if (sensorumid > 500 && orario == 1 ){
  digitalWrite (D1, LOW);
  delay ( minutipersettoresec );
  digitalWrite (D1, HIGH);
 
  

  digitalWrite (D2, LOW);
  delay ( minutipersettoresec );
   digitalWrite (D2, HIGH);
  
  

  digitalWrite (D3, LOW);
  delay ( minutipersettoresec );
   digitalWrite (D3, HIGH);
  

  digitalWrite (D4, LOW);
  delay ( minutipersettoresec );
   digitalWrite (D4, HIGH);
    
  
 
  digitalWrite (D5, LOW);
   delay ( minutipersettoresec );
   digitalWrite (D5, HIGH);

  digitalWrite (D6, LOW);
    delay ( minutipersettoresec );
   digitalWrite (D6, HIGH);
 
  
 }


Serial.print(sensorumid);

 Blynk.run(); 
  
  }
  

Buonasera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il succitato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nel rispetto del suddetto regolamento nessuno ti risponderà (eventuali risposte verrebbero cancellate), quindi ti consiglio di farla al più presto. :wink:

Fatto scusate

Ecco un'altra vittima dell'infido delay() :rofl:

Scherzi a parte, non conosco nel dettaglio blynk, ma immagino che ogni volta che metti un delay così lungo come fai tu, il server disconnette il client per timeout.

si ma non riesco a capire cosa usare apposto di delay :sweat_smile:

Al posto di delay si usa millis(), ma nel tuo caso ciò avrà conseguenze sul comportamento del programma, comportamento che non sarà quello desiderato,

Guarda l'esempio blinkwithoutdelay tra gli esempio di arduino IDE.

Prendi confidenza e familiarità con millis e il suo uso e poi studia anche come funziona lo switch case.

Purtroppo il problema è quello che ha ipotizzato @cotestatnt e cioè che la funzione Blynk.run() non viene eseguita per il tempo dato dalla somma di tutti i delay. Prova per verificare ad imporre delay di 1 secondo o meno per ogni settore.

Ciao.

Pultroppo mi serve azionare un relè e tenerlo acceso per minuti no secondi quindi non posso scendere il delay provo a vedere millis. Se avete altre idee resto qua

Capisco ma è solo per verificare che non si disconnetta.
In ogni caso con millis() dovrai averci averci a che fare prima o poi e non sei il primo ne l'ultimo che scopre il lato non desiderato di delay,

Ciao.

Si, se blynk non riveve nulla ti butta fuori dal server massimo 5 secondi. Bel problema da risolvere

In reltà nessun bel problema ... c'è solo da studiare e t'hanno già detto cosa, comunque ...

... devi capire come si usa la funzione millis(), prima QUI, poi QUI e QUI e QUI e tutti gli articoli che sono in QUESTA pagina ed anche in QUESTA ... :roll_eyes:

Guglielmo

Poi una "piccola" nota di sicurezza informatica. Le password delle vostre reti wifi, per favore, non mettetele in chiaro!
Grazie!

Ecco grazie di avermelo fatto notare per fortuna è una rete test che stacco appena finisco il progetto

Un dubbio su millis. Il valore posso inviarlo tramite un pin virtuale in modo che posso modificarlo dall'app?

Che intendi su un pin virtuale ? ? ?

Se crei una Seriale Virtuale avari due pin reali che sono dedicati uno per il TX ed uno per il RX e, in tal caso, certamnete puoi andare a leggere il valore dalla seriale e poi usarlo per il valore da passare a millis(); ricorda solo che è un valore espresso in millesimi diu secondo :wink:

Guglielmo

Si, ma la domanda non è chiara. Per adesso usi la variabile
minutipersettore, ma che valore ha, tipo 4, 10 minuti?
Es. 4 minuti in millesimi di secondo eqivale a 4 x 60000 = 240000.

PS: pin virtuale è un concetto specifico di Blynk. link

Ciao.

Al momento il dalay è uguale al valore del pin v2 in minuti. Se v2 è impostato a 3 sarà 3 minuti se dall'app lo imposto a 1 sarà 1 minuto. Questo dalay è il tempo in cui l'elettrovalvola sarà alimentata e quindi aperta.

... e allora applichi la stessa logica per il valore di millis().

Guglielmo

Grazie per il link ... MAI usato Blynk ... :grin:

Guglielmo