Go Down

Topic: Modulo WiFi+Bt ESP32 (Read 31403 times) previous topic - next topic

ziopippo

Se non scrivo castronerie....
questo
Code: [Select]
if (previousMillisWiFi < intervalWiFi)
non va mica, dovrebbe essere
Code: [Select]
if (millis()- previousMillisWiFi > intervalWiFi)
cioè esattamente lo stesso confronto che fai più sotto.
Hai ragione scusa non mi ero accorto dell'errore, tant'è che poi in altre funzioni la uso così
Code: [Select]
void temperature()
{
  if (millis() - t > 5000) //Una volta ogni 5 secondi:
  {
    t = millis();
    sensors.requestTemperatures();
    tempDALLAS = sensors.getTempCByIndex(0);   //Read temperature of Dallas sensor
    //Serial.print(tempDALLAS);
    //Serial.println("° C");
    dht12.get();
    /*
      if (dht12.get() == 0) {
          Serial.print("Temperature in Celsius : ");
          Serial.println(dht12.cTemp);
          Serial.print("Temperature in Fahrenheit : ");
          Serial.println(dht12.fTemp);
          Serial.print("Relative Humidity : ");
          Serial.println(dht12.humidity);
          Serial.println();
        }*/
  }
}


Ed è proprio per quella svista che molto probabilmente non andava. Maledetta fretta accompagnata dalla distrazione!  :smiley-confuse:  :-[  :-X

zoomx

Infatti ho anche scritto che in un altro punto il confronto è corretto, che è anche quello che avevo visto per primo per cui non riuscivo a capire dove fosse l'inghippo.

ziopippo

Infatti ho anche scritto che in un altro punto il confronto è corretto, che è anche quello che avevo visto per primo per cui non riuscivo a capire dove fosse l'inghippo.
In realtà il mio quesito sul poter utilizzare più variabili per millis in una ESP (cosa che faccio comunemente con le altre board) derivava dal fatto che non riesco a sostituire la riga delay(6000) dalla void T_Setting() con millis

Code: [Select]

void Touch()
{
  // Pressed will be set true is there is a valid touch on the screen
  pressed = tft.getTouch(&px, &py);

  if (!mute) drawBmp("/bmp/audio-on.bmp", 285, 200);
  else drawBmp("/bmp/audio-off.bmp", 285, 200);

  if (pressed) {
    buzzer();
    // Verifico Home
    if ((px > 0) && (px < 30)) {
      if ((py > 200) && (py <= 239)) {
        Serial.println("Hai premuto il tasto HOME");
        // buzzer();
        tft.fillScreen(TFT_BLACK);
        scelta = 0;
        Maschera();
        Home();
      } // END 2° if Home
    } //END 1° if Home

    // Verifico WPS
    if ((px > 290) && (px < 319)) {
      if ((py > 90) && (py <= 130)) {
        Serial.println("Hai premuto il tasto WPS");
        tft.fillScreen(TFT_BLACK);
        wps();
      }// END 2° if WPS
    }// END 1° if WPS

    // Verifico Audio
    if ((px > 290) && (px < 319)) {
      if ((py > 200) && (py <= 239)) {
        silenzia();
        buzzer();
        Serial.println("Hai premuto il tasto Audio");
      }// END 2° if Audio
    }// END 1° if Audio

    // Verifico Setting
    if ((px > 144) && (px < 174)) {
      if ((py > 200) && (py <= 239)) {
        Serial.println("Hai premuto il tasto Setting");
        tft.fillScreen(TFT_BLACK);
        scelta = 1; // Menù Setting
      }// END 2° if Setting
    }// END 1° if Setting

    delay(100);

    Serial.print("px = ");
    Serial.print(px);
    Serial.print(", py = ");
    Serial.println(py);
  } //END (pressed)
  px = 0, py = 0; // resetto i valori di px e py
} //END Void Touch()

void Exit()
{
  // Pressed will be set true is there is a valid touch on the screen
  pressed = tft.getTouch(&px, &py);
  drawBmp("/bmp/home.bmp", 144, 200);
  if (pressed) {

    // Verifico Home
    if ((px > 144) && (px < 30)) {
      if ((py > 200) && (py <= 239)) {
        Serial.println("Hai premuto il tasto HOME");
        tft.fillScreen(TFT_BLACK);
        Home();
      }// END 2° if Home
    }// END 1° if Home

    delay(100);

    Serial.print("x = ");
    Serial.print(px);
    Serial.print(", y = ");
    Serial.println(py);
  } //END (istouched)

} //END Void Exit()

void T_Setting()
{
  // Pressed will be set true is there is a valid touch on the screen
  pressed = tft.getTouch(&px, &py);
  if (pressed) {
    buzzer();
    EasyBuzzer.update();

    if (KeyValvola) {
      //buzzer();
      // EasyBuzzer.update();
      // Verifico Apertura Valvola
      if ((px > 100) && (px < 230)) {
        if ((py > 40) && (py <= 170)) {
          Serial.println("Hai premuto il tasto APRI VALVOLA");
        }// END 2° if Apertura Valvola
      }// END 1° if Apertura Valvola
    } //END (KeyValvola)
    else
      Serial.println("Non faccio nulla");

    // Verifico Valvola
    if ((px > 100) && (px < 134)) {
      if ((py > 200) && (py <= 239)) {
        Serial.println("Hai premuto il tasto Valvola");
        tft.fillScreen(TFT_BLACK);
        drawBmp("/bmp/Bvalve.bmp", 110, 50);
        KeyValvola = true;
        Serial.println("KeyValvola = true");
        //scelta = 1; // Menù Setting
      }// END 2° if Valvola
    }// END 1° if Valvola


    // Verifico Info
    if ((px > 144) && (px < 174)) {
      if ((py > 200) && (py <= 239)) {

        Serial.println("Hai premuto il tasto Info");

        tft.fillScreen(TFT_BLACK);
        spr.createSprite(315, 100);   // Creo lo sprite 150 pixels di lunghezza e 100 di altezza
        spr.fillSprite(TFT_BLACK);
        spr.setTextColor(TFT_WHITE);
        x = 1;
        y = 1;
        spr.setCursor(x, y);
        x += spr.drawString("ArduAcquario MALAWI V.", x , y, 2);
        x += spr.drawString((Version), x , y, 2);
        x = 1;
        y = y + 20;
        x += spr.drawString("By Ettore Di Fabio ", x , y, 2);
        x += spr.drawString((date_Version), x , y, 2);
        x = 1;
        y = y + 20;
        if (WiFi.status() != WL_CONNECTED) {
          spr.setTextColor(TFT_RED, TFT_BLACK);
          x += spr.drawString("NON CONNESSO", x , y, 4);
        }
        else
        {
          x += spr.drawString("Connesso a: ", x , y, 2);
          x += spr.drawString(WiFi.SSID(), x , y, 2);
          y = y + 20;
          x = 1;
          x += spr.drawString("IP Address: ", x , y, 2);
          // x = 10;
          // y = y + 30;
          x += spr.drawString(WiFi.localIP().toString(), x , y, 2);
        }
        spr.pushSprite(50, 70); // Posiziono la scritta
        spr.deleteSprite(); // Libero la memoria
        EasyBuzzer.update();
        delay(6000);
        tft.fillScreen(TFT_BLACK);
        scelta = 0;
        Maschera();
        Home();
      }// END 2° if Info
    }// END 1° if Info

    // Verifico Power
    if ((px > 184) && (px < 218)) {
      if ((py > 200) && (py <= 239)) {
        tft.fillScreen(TFT_BLACK);
        Serial.println("Hai premuto il tasto Power");
        x = 100;
        x += tft.drawString("RIAVVIO", x , 110, 4);

        for (int i = 0; i < 3; i++)
        {
          EasyBuzzer.update();
          delay(1000);
          x += tft.drawString(".", x , 110, 4);
        }
        ESP.restart(); // Riavvio
        //scelta = 1; // Menù Setting
      }// END 2° if Power
    }// END 1° if Power
    delay(100);
  } //END (istouched)
} //END Void Setting()


Questo spezzone di codice non è definitivo e ci sto ancora lavorando per fargli fare alcune cose ;)

zoomx

Quando devi fare più cose devi anche pensare diversamente il programma, questo perché il decidere cosa fare a secondo del tempo trascorso alla fine deve essere centralizzato in qualche modo.
Ad esempio l'apparizione di un messaggio per un certo intervallo (quello del delay(6000) se non ho capito male) dovrebbe diventare una funzione a parte, generica ed utilizzabile dal resto del programma e cheappartiene ad un ciclo di cose che possono essere eseguite in dipendenza, ad esempio, da un flag.
Oppure ti crei o usi un task scheduler, Guglielmo, se non ricordo male, ne ha realizzato uno ma ce ne sono tanti.

ziopippo

Oppure ti crei o usi un task scheduler, Guglielmo, se non ricordo male, ne ha realizzato uno ma ce ne sono tanti.
Questa la devo studiare meglio perchè non ci ho mai provato. Avevo pensato di usare il "case" ma devo ancora capire come strutturarlo.

gpb01

#275
Mar 15, 2019, 10:20 am Last Edit: Mar 15, 2019, 10:24 am by gpb01
Oppure ti crei o usi un task scheduler, Guglielmo, se non ricordo male, ne ha realizzato uno ...
Non mi piace fare pubblicità, comunque SI. Si tratta di un semplicissimo ma efficiente "scheduler cooperativo" ed è stato pubblicato sul numero 229 di Ottobre 2018 di Elettronica In ...

Guglielmo

P.S.: ... dato che è passato un po' di tempo, ho già chiesto che lo rendano fruibile gratuitamente a tutti in formato .pdf scaricabile dal sito (... occorrerà solo registrarsi se già non lo si è). E solo questione dei necessari tempi tecnici ... ;)
Search is Your friend ... or I am Your enemy !

ziopippo

Buona domenica, torno a bomba con le domande  :smiley-twist:

Ho provato a collegare sia un relè singolo (cinese) che un modulo con doppio relè optoisolato. Quello singolo non ne vuol sapere di eccitarsi mentre sul doppio se ne eccita uno solo. Presumo quindi che i 3V della ESP non siano sufficienti.
Ora prevedendo di mettere un piccolo alimentatore switch a 12V esterno che userò per accendere delle ventole ed una elettrovalvola, mi consigliate di alimentare il relè con l'alimentatore esterno per risolvere il problema?

zoomx

Io ho usato lo shield con relais per Wemos D1 mini e funziona benissimo. Credo però che il relè sia alimentato dalla linea a 5V mentre la logica sia a 3.3V. C'è anche il relè doppio se non ricordo male.
Sopra il relè ci dovrebbe essere scritta la tensione di eccitazione, se è da 5V dargliene 12 non credo faccia bene.

ziopippo

Devo leggere bene e poi ti faccio sapere.
La cosa strana è che quello cinese non ne vuol sapere di eccitarsi (si accende solo il led rosso) mentre l'altro, se collego solo un relè alla ESP non ho problemi ma, se collego entrambi i PIN alla ESP fa lo stesso difetto del cinese.
Presumo non siano sufficienti i 3V ad eccitarli entrambi.
Che tu sappia, è possibile prendere la 5V dall'ingresso della ESP (e come) se alimentato tramite porta USB? (Uso una LOLIN D32 Pro)

zoomx


Non è chiarissimo ma sospetto che il piedino USB sia quello con i 5V dell'USB

ziopippo

Questi schemi della pagina ufficiale li consulto continuamente ma, non essendo un elettrotecnico, volevo il parere di un esperto. ;)

zoomx

Ma io non sono né un esperto nè un elettrotecnico!

gpb01

#282
Mar 18, 2019, 10:43 am Last Edit: Mar 18, 2019, 10:44 am by gpb01
Beh ... basta fare un piccolo sforzo ... cercare lo schema ...  ;)

Lo SCHEMA è pubblico e basta andarlo a guardare per vedere che quel pin (JP1 - 15) è direttamente collegato al VBUS della USB, ovvero ai 5V che arrivano direttamnete dalla porta USB senza passare attraverso a null'altro. :)

Guglielmo
Search is Your friend ... or I am Your enemy !

ziopippo

Beh ... basta fare un piccolo sforzo ... cercare lo schema ...  ;)

Lo SCHEMA è pubblico e basta andarlo a guardare per vedere che quel pin (JP1 - 15) è direttamente collegato al VBUS della USB, ovvero ai 5V che arrivano direttamnete dalla porta USB senza passare attraverso a null'altro. :)

Guglielmo
Perdona l'ignoranza (che in tale materia è davvero tanta) quindi potrei collegare direttamente il +5 del modulo relè ai pin USB o BAT(PIN 15 e 16) della LOLIN?   :smiley-money:

gpb01

#284
Mar 18, 2019, 11:01 am Last Edit: Mar 18, 2019, 11:01 am by gpb01
... devi usare il pin USB, lascia stare il pin BAT ;)

Ovviamnete la scheda deve essere alimentata tramite la USB !

Guglielmo
Search is Your friend ... or I am Your enemy !

Go Up