Problema con libreria Blynk

Salve a tutti,
Sto utilizzando la libreria Blynk per poter tenere controllato e raccogliere dati da remoto di un arduino uno con relativa shield Ethernet. Siccome dove è montago arduino non è presente una connessione Ethernet ho provveduto ad inserire un router con sim dati.
Da quando ho messo è nato questo problema.
Se si accende arduino con già presente la connessione ad internet il tutto funziona regolarmente, se invece per cause accidentali viene a mancare l’alimentazione e viene riarmata, non parte più il programma. Deduco che siccome il router ha bisogno di avere accesso alla rete dati della sim, ha bisogno di un paio di minuti per rendere disponibile la connessione; ma nel frattempo arduino non sentendo la connessione al server di Blynk si blocca.
Qualcuno ha riscontrato questa problematica?
Ha trovato una soluzione?
A me andrebbe bene anche se il programma partisse subito e andasse stand alone fino a quando non può connettersi al server di Blynk.

Spero di essere stato abbastanza chiaro.
Buona giornata.

Ho guardato nella sfera di cristallo per vedere il testo del programma che hai scritto, ma data la stagione c'era molta nebbia e un principio di nevischio.

Saresti così gentile da postarlo qui?

Ciao,
P.

Ciao, hai perfettamente ragione...
Ecco lo sketch:

#include <SPI.h>
#include <Ethernet.h>
#include "DHT.h"
#include <PID_v1.h>             //Per controllo riscaldamento e raffreddamento
#include <OneWire.h>            //Per sensore temperatura DALLAS DS18B20
#include <DallasTemperature.h>  //Per sensore temperatura DALLAS DS18B20
#include <BlynkSimpleEthernet.h>

#define W5100_CS  10
#define SDCARD_CS 4

#define PIN_INPUT A5
#define PIN_OUTPUT 3
#define PIN_OUTPUT2 6

#define ONE_WIRE_BUS_1 A1       //Sonda temperatura INGRESSO
#define ONE_WIRE_BUS_2 A2       //Sonda temperatura USCITA

OneWire oneWire_in(ONE_WIRE_BUS_1);
OneWire oneWire_out(ONE_WIRE_BUS_2);

DallasTemperature sensor_in(&oneWire_in);
DallasTemperature sensor_out(&oneWire_out);

//Define Variables we'll be connecting to
double Setpoint_HOT, Setpoint_COLD, Input, Output_HOT, Output_COLD;

//Specify the links and initial tuning parameters
double KpH = 1, KiH = 3, KdH = 5;
PID myPID_HOT(&Input, &Output_HOT, &Setpoint_HOT, KpH, KiH, KdH, DIRECT);
double KpC = 7, KiC = 3, KdC = 3;
PID myPID_COLD(&Input, &Output_COLD, &Setpoint_COLD, KpC, KiC, KdC, REVERSE);

//  INGRESSI

DHT dht(A0, DHT22);
#define fin  A3             //Finecorsa coperchio

//  USCITE

#define alimentatori  2     //Accensione alimentatori riscaldatori
int riscaldatore1 = 3;      //Riscaldatore 1
#define ledrosso  4         //Led ROSSO accensione riscaldamento
int riscaldatore2 = 5;      //Riscaldatore 2
int ventole12 = 6;          //Gruppo ventole aspirazione/espulsione 1-2
#define ledblu  7           //Led BLU accensione gruppi ventole
int ventole34 = 9;          //Gruppo ventole aspirazione/espulsione 3-4
int ventoleR = 8;          //Controllo ventole riscaldatori


//  VARIABILI

int tempcaldo  = 15;   //Temperatura MAX riscaldatori
int tempfreddo = 25;   //temperatura accendione ventilazione raffreddamento

char auth[] = "";
IPAddress arduino_ip ( 192,   168,   0,  10);
IPAddress gateway_ip ( 192,   168,   0,   1);


void setup()
{
  // Debug console
  Serial.begin(9600);
  // Inizializzazione libreriua sensore
  dht.begin();
  
  sensor_in.begin();
  sensor_out.begin();
  Serial.print("Requesting temperatures...");
  sensor_in.requestTemperatures();
  sensor_out.requestTemperatures();
  Serial.println(" done");

  //initialize the variables we're linked to
  //Input = analogRead(PIN_INPUT);


  //turn the PID on
  myPID_HOT.SetMode(AUTOMATIC);
  myPID_HOT.SetOutputLimits(0, 255);
  myPID_COLD.SetMode(AUTOMATIC);
  myPID_COLD.SetOutputLimits(0, 255);

  //Inizializzazioni IO

  pinMode(fin, INPUT);
  pinMode(ledrosso, OUTPUT);
  pinMode(ledblu, OUTPUT);
  pinMode(alimentatori, OUTPUT);
  pinMode(ventoleR, OUTPUT);
/*
  digitalWrite(ledblu,  LOW);
  digitalWrite(ledrosso,LOW);
  delay(10000);                                   //attendo tempo per accensione ROUTER 3G
  digitalWrite(ledblu, HIGH);
  digitalWrite(ledrosso, HIGH);
  delay(2000); 
  digitalWrite(ledblu,  LOW);
  digitalWrite(ledrosso,LOW);
  delay(2000);                                   //Segnale accensione 1
  digitalWrite(ledblu, HIGH);
  digitalWrite(ledrosso, HIGH);
  delay(2000); 
  digitalWrite(ledblu,  LOW);
  digitalWrite(ledrosso,LOW);
  delay(2000);                                   //Segnale accensione 2
  digitalWrite(ledblu, HIGH);
  digitalWrite(ledrosso, HIGH);
  delay(2000); 
  digitalWrite(ledblu,  LOW);
  digitalWrite(ledrosso,LOW);
  delay(2000);                                   //Segnale accensione 3
  digitalWrite(ledblu, HIGH);
  digitalWrite(ledrosso, HIGH);
*/  
  pinMode(SDCARD_CS, OUTPUT);
  digitalWrite(SDCARD_CS, HIGH); // Deselect the SD card
  
  Blynk.begin(auth);                              //Inizializzo BLYNK


}

void loop()
{
    Blynk.run();
//  WidgetLED led1(V6);
//  WidgetLED led2(V8);

  //Richiesta temperatura da sonde esterne
  
  sensor_in.requestTemperatures();
  sensor_out.requestTemperatures();


  //Lettura temperatura ed umidità da DHT

  float H = dht.readHumidity();                                       // Leggo il valore di umidità
  float T = dht.readTemperature();                                    // Leggo il valore di temperatura
  Input = T;
  Serial.println(" ");
  Serial.print("Temperatura interna: ");
  Serial.println(T);
  Serial.print("Umidità interna: ");
  Serial.println(H);
  //Input = (analogRead(PIN_INPUT) / 25);
  Blynk.virtualWrite(V1, H);                                          // Definisco variabili Blynk Umidità
  Blynk.virtualWrite(V0, T);                                          // Definisco variabili Blynk TEMPERATURA

  Setpoint_COLD = tempfreddo;
  Setpoint_HOT = tempcaldo;


  boolean stato = 0;

  if (digitalRead(fin) == LOW)
  {
    /*Led ROSSO e BLU lampeggianti */
    digitalWrite(alimentatori, LOW);
    digitalWrite(ledrosso, HIGH);
    digitalWrite(ledblu, HIGH);
    analogWrite(riscaldatore1, LOW);
    analogWrite(riscaldatore2, LOW);
    analogWrite(ventole12, LOW);
    analogWrite(ventole34, LOW);
    delay(500);
    digitalWrite(ledrosso, LOW);
    digitalWrite(ledblu, LOW);
  }
  else if (digitalRead(fin) == HIGH)
  {
    digitalWrite(ledrosso, HIGH);
    digitalWrite(ledblu, HIGH);
    digitalWrite(alimentatori, HIGH);
    digitalWrite(ventoleR, HIGH);




    //QUI Aggiungo il PID
    //2. calcolo i suoi valori di output assegnando la temp misurata
    myPID_COLD.Compute();
    myPID_HOT.Compute();
    //3. applico il controllo
    analogWrite(riscaldatore1, Output_HOT);
    analogWrite(riscaldatore2, Output_HOT);
    analogWrite(ventole12, Output_COLD);
    analogWrite(ventole34, Output_COLD);


    if (Output_HOT > 5)
    {      
      digitalWrite(alimentatori, LOW);
      digitalWrite(ledrosso, LOW);
      digitalWrite(ventoleR, LOW);
      digitalWrite(ledblu, HIGH);
//      led1.on();
    }
    else if (Output_HOT = 0)
    {
      digitalWrite(alimentatori, HIGH);
      digitalWrite(ledrosso, HIGH);
      digitalWrite(ventoleR, HIGH);
//      led1.off();
    }


    if (Output_COLD > 5)
    {
      digitalWrite(ledblu, LOW);
      digitalWrite(ledrosso, HIGH);
      digitalWrite(alimentatori, HIGH);
      digitalWrite(ventoleR, HIGH);
//      led2.on();
    }
    else if (Output_COLD = 0)
    {
      digitalWrite(ledblu, HIGH);
      digitalWrite(ledrosso, HIGH);
//      led2.on();
    }

  }
  
  Serial.print("Valore PWM Caldo: ");
  Serial.println(Output_HOT);
  Blynk.virtualWrite(V2, Output_HOT);                                          // Definisco variabili Blynk
  Serial.print("Valore PWM Freddo: ");
  Serial.println(Output_COLD);
  Blynk.virtualWrite(V3, Output_COLD);                                          // Definisco variabili Blynk

  //Serial.print("Temperatura aria aspirazione: ");
  //Serial.println(sensor_in.getTempCByIndex(0));
  Blynk.virtualWrite(V4, sensor_in.getTempCByIndex(0));


  //Serial.print("temperatura aria estrazione: ");
  //Serial.println(sensor_out.getTempCByIndex(0));
  Blynk.virtualWrite(V5, sensor_out.getTempCByIndex(0));
  Serial.println(" ");

  //delay(1000);

}
Il codice di Blynk nel sketch caricato lo ho inserito :grinning:
Grazie :sweat_smile: