Ein Pflanzenwächter für die Fensterbank Teil 2 - Handy App - AZ-Delivery

Salve e benvenuti nella seconda parte della nostra linea di guardia dell'impianto.

Anche se la nostra guardia dell'impianto funziona già abbastanza bene, trovo un po 'imbarazzante come un produttore di cercare il Led - "semaforo" per vedere se il mio impianto ha bisogno di essere annaffiato. Vorrei trovare molto più pratico se devo solo guardare il telefono cellulare in qualsiasi momento e ovunque per sapere come la pianta sta facendo a casa.

Ma prima che qualcuno pensi: Questo non è possibile, questo è troppo complicato, diamo un'occhiata più da vicino l'App Store in anticipo. Dopo tutto, c'è un APP che è già stato progettato per i nostri scopi, che dobbiamo solo regolare qui, perché dobbiamo aggiungere un po 'di codice e poi mettere il tutto insieme! Dopo di che, la nostra APP funziona esattamente come vogliamo.

Allora andiamo! Come primo passo, scarichiamo l'app "Blynk" dall'App Store al nostro cellulare. L'APP stessa è gratuita e può essere utilizzata per il nostro caso d'uso descritto qui nella seconda parte del blog senza alcun costo aggiuntivo per l'app.

Tuttavia, le unità "2000 Energy" della versione gratuita potrebbero non essere più sufficienti per una successiva espansione dell'app all'interno della serie di blog.

Tuttavia, ci sono costi per la trasmissione dei dati dal monitor dell'impianto al telefono cellulare, indipendentemente dalla fase di espansione. Si prega di prendere in considerazione questi costi quando si replica il progetto!

Quindi, dopo aver scaricato l'app Blynk dal negozio e avviarla per la prima volta, dobbiamo prima creare un account. Per fare questo, tocca "Crea nuovo account"

Ci registriamo con il nostro indirizzo e-mail e assegniamo una password:

Poi clicchiamo sul nuovo progetto:

Finiamo nel dialogo per creare un nuovo progetto. Qui, devono essere utilizzati i dati di base del progetto, come il nome del progetto, la nostra piattaforma di sviluppo ESP32 e il modulo di connessione desiderato. È possibile specificare vari parametri di connessione, ad esempio Bluetooth o Wlan. Tuttavia, per poter ricevere dati in viaggio, è necessario selezionare il tipo di connessione GSM. Di seguito sono riportate le impostazioni che ho scelto per il mio progetto:

Confermiamo le informazioni con "Crea" e finiamo in un progetto vuoto. Aggiungeremo il nostro primo elemento attivo alla nostra app utilizzando l'icona "Plus" nella barra del titolo:

Selezioniamo l'elemento Misuratore e configuriamo l'elemento. In primo luogo, assegniamo un NAMEN per l'elemento. Ho scelto il nome "Suolo Moisture Plant 1".


Quindi selezioniamo la variabile "V1" come input, 0 come valore minimo e 100 come valore massimo. Aggiungiamo l'uno% al campo LABEL e imposti "Push" come Velocità di lettura. Il design consente di scegliere qualsiasi colore e dimensione del carattere.

Confermiamo le impostazioni con la freccia a sinistra, e poi atterriamo di nuovo nella vista principale dell'APP:

Ora possiamo chiudere di nuovo l'app, perché ora dobbiamo adattare il nostro codice ESP al nostro APP. Per fare questo, installiamo prima la libreria Blynk nell'ultima versione di Arduino tramite il gestore della libreria:

Quindi aggiungiamo il codice seguente all'IDE:

 

#include <autista/Adc.H>
#include <Wifi.H>
#include <WiFiClient (Client WiFi).H>
#include <BlynkSimpleEsp32.H>


Portedefination Led's
# define LED_Rot     18    LED rosso 
# define LED_Gelb    14    LED giallo
# define LED_Gruen   15    Gruene LED

Impostazioni PWM LED
# define PWMfreq 5000  Frequenza di base 5 Khz
# define PWMledCanaleA  0
# define PWMledCanaleB  1
# define PWMledCanaleC  2
# define Risoluzione PWM  8 Risoluzione a 8 bit

# define ADCAttenuazione ADC_ATTEN_DB_11  ADC_ATTEN_DB_11 - attenuazione ADC
# define MoisureSens_Poll_Interval 60000  Intervallo tra due misurazioni dell'umidità del suolo in millisecondi
# define MaxSensors 1

# define BLYNK_PRINT Seriale
# define BLYNK_NO_BUILTIN 
# define BLYNK_NO_FLOAT
BLYNK_DEBUG #define

Struct MoistureSensorCalibrationDati   {     Int Dati[MaxSensors*2] = {1650,2840};  Dati di calibrazione per il sensore di umidità. Si prega di osservare il testo del progetto e regolare i valori di conseguenza    };

Struct Dati Di umidità   {     Byte Percentuale[MaxSensors] = {0};       Dati del sensore di umidità in percentuale      Byte Old_Percent[MaxSensors] = {0};   Precedente _ Dati del sensore di umidità in percentuale (scopo: Salvare dataQuantity.)   };
 
Variabili globali
Char Auth[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; Inserisci qui la tua app Blynk (e-mail) in base alle istruzioni Token di autenticazione.

Le tue credenziali WiFi.
Char Ssid[] = "WLANSSID";
Char Passare[] = "XXXXXXXX";  Impostare Password su "" per le reti aperte.

MoistureSensorCalibrationDati MCalib;
Dati Di umidità MMisura;
Byte AttachedMoistureSensors; Rilevati sensori di umidità attiva (conteggio) 
Unsigned Lungo Moisure_ServiceCall_Handler = 0;  Variabile di ritardo per ritardo tra le letture moisure

Vuoto Installazione() {   PinMode (Modalità pin)(LED_Rot,Output);   PinMode (Modalità pin)(LED_Gelb,Output);   PinMode (Modalità pin)(LED_Gruen,Output);   Seriale.Iniziare(115200);   inizializzare la comunicazione seriale a 115200 bit al secondo:   ledcSetup(PWMledCanaleA, PWMfreq, Risoluzione PWM);   ledcSetup(PWMledCanaleB, PWMfreq, Risoluzione PWM);   ledcSetup(PWMledCanaleC, PWMfreq, Risoluzione PWM);   ledcAttachPin(LED_Rot, PWMledCanaleA);   collegare il canale al GPIO da controllare   ledcAttachPin(LED_Gelb, PWMledCanaleB);   ledcAttachPin(LED_Gruen, PWMledCanaleC);   SetLedConfig (configurazione di Windows)(255,255,255);   Seriale.println(D("Configurazione del sistema:"));   AttachedMoistureSensors = DetectMoistureSensors();   Seriale.Stampare(AttachedMoistureSensors);   Seriale.println(D(" Sensore(i) di umidità del suolo"));   Seriale.Stampare(D("Connessione al Wi-Fi"));   Ritardo(500);   Blynk.Iniziare(Auth, Ssid, Passare);  Initalize WiFi Connection su Blync Library   Seriale.println(D("Operazione riuscita".));   SetLedConfig (configurazione di Windows)(0,0,0);   Run_MoistureSensors(Vero);
}    Byte DetectMoistureSensors ()   {   # define MinSensorValue (valore incuito) 100     Byte Rilevato = 0;   Per (Int Ho. = 0;Ho. < MaxSensors;Ho.++)     {     Int MSensorRawValue (valore MSensorRawValue) = ReadMoistureSensor_Raw_Val(Ho.);     Se ( MSensorRawValue (valore MSensorRawValue) > MinSensorValue (valore incuito)) { Rilevato++; } Altro {Pausa;}     }   Se (Rilevato < 1)     {        Seriale.println(D("Nessuna sigillazione di umidità del suolo rilevata. sistema in pausa.));       esp_deep_sleep_start();       Mentre(1) {}     }      Ritorno Rilevato;   }

Bool SetLedConfig (configurazione di Windows)(Byte Rosso,Byte Giallo,Byte Verde)
{
ledcWrite (scrittura)(PWMledCanaleA, Rosso); LED rosso 
ledcWrite (scrittura)(PWMledCanaleB, Giallo); LED giallo
ledcWrite (scrittura)(PWMledCanaleC, Verde); Gruene LED
Ritorno Vero;
}

Int ReadMoistureSensor_Raw_Val(Byte Sensore)   {    Int Returnvalue,Ho.;    Lungo Somma = 0;    # define NUM_READS 6       adc1_config_width(ADC_WIDTH_BIT_12);   Gamma 0-4095        Interruttore (Sensore)     {     Caso 0:       {       adc1_config_channel_atten(ADC1_CHANNEL_0,ADCAttenuazione);       Per (Ho. = 0; Ho. < NUM_READS; Ho.++){  Algoritmo di media        Somma += adc1_get_raw( ADC1_CHANNEL_0 ); Leggi analogico        }        Returnvalue = Somma / NUM_READS;       Pausa;          }     }      Ritorno Returnvalue;     }

Bool Get_Moisture_DatainPercent()
 {
 Bool ReadisValido = Vero;
 Per (Int Ho. = 0;Ho. < AttachedMoistureSensors;Ho.++)   {   Se ((MCalib.Dati[Ho.] == 0) || (MCalib.Dati[Ho.+1] == 0)) Valore MinADC maxADC VALORE ADC     {      ReadisValido = False;     Ritorno ReadisValido;      }   Int RawMoistureValue= ReadMoistureSensor_Raw_Val(Ho.);   RawMoistureValue= MCalib.Dati[Ho.+1] - RawMoistureValue;   RawMoistureValue=MCalib.Dati[Ho.] + RawMoistureValue;   Serial.println(MCalib.Data[i]);   Serial.println(MCalib.Data[i-1]);   Serial.println (RawMoistureValue);   MMisura.Percentuale[Ho.] = Mappa(RawMoistureValue,MCalib.Dati[Ho.],MCalib.Dati[Ho.+1], 0, 100);   Se (MMisura.Percentuale[Ho.] > 100 ) { ReadisValido = False; }   }
 Ritorno ReadisValido;
 }

Vuoto Run_MoistureSensors (Bool Init)   Funzione principale per il funzionamento dei sensori di umidità del suolo
{
Byte MinSensValore = 100;
Se ((millis() - Moisure_ServiceCall_Handler >= MoisureSens_Poll_Interval) | (Init))   {    Moisure_ServiceCall_Handler = millis();    Se (Get_Moisture_DatainPercent())  Ricevere dati correnti validi    {       Per (Int Ho. = 0;Ho. < AttachedMoistureSensors;Ho.++)         {            Se (MMisura.Percentuale[Ho.] != MMisura.Old_Percent[Ho.])             {               MMisura.Old_Percent[Ho.] = MMisura.Percentuale[Ho.];               Se (MMisura.Percentuale[Ho.] < MinSensValore ) { MinSensValore = MMisura.Percentuale[Ho.]; };               Seriale.Stampare(D("Sensore valore umido 1 in percentuale :"));               Seriale.Stampare(MMisura.Percentuale[0]);                   Seriale.println(D(" %"));                Se (Ho. == 0)  {Blynk.virtualWrite (Scrittura virtuale)(V1 (in via di,MMisura.Percentuale[Ho.]);  } Aggiornare i valori del telefono cellulare             }                    }       Se (MMisura.Percentuale[0] > 50)         { SetLedConfig (configurazione di Windows)(0,0,20); }       Altro Se (MMisura.Percentuale[0] > 10)         {            SetLedConfig (configurazione di Windows)(0,255,0);            }       Altro          { SetLedConfig (configurazione di Windows)(255,0,0); }     }     Altro  Non ricevere dati validi    {      Seriale.Stampare(D("Il sensore di umidità del suolo non si calibra. Si prega di calibrare. Dati grezzi del sensore 1:"));      Seriale.println(ReadMoistureSensor_Raw_Val(0));      SetLedConfig (configurazione di Windows)(255,255,255);    }    }
}    Ciclo principale
Vuoto Ciclo() 
{
 Run_MoistureSensors(False);
 Blynk.Correre();   Esecuzione delle funzioni di base di Blync 
}

 

Ora abbiamo bisogno di regolare il nostro codice un po' . Da un lato, le credenziali WLAN (SSID e password) devono essere adattate alla WLAN principale nel codice:

Le tue credenziali WiFi.
char ssid[] - "WLANSSID";
char pass[] - "XXXXXXXX"; Impostare Password su "" per le reti aperte.

D'altra parte, abbiamo ricevuto un token di autenticazione quando abbiamo installato il nostro progetto nel AP:

Portiamo questo token nel codice nella riga:

Variabili globali

char auth[] - "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Inserisci qui la tua app Blynk (e-mail) in base alle istruzioni Token di autenticazione.

 

e compilare il codice. Poi lo carichiamo dal nostro ESP. Dovremmo ora ottenere un output simile a questo sull'interfaccia seriale:

Ora l'app Blynk può essere avviata sul tuo telefono. Dopo aver effettuato l'accesso e avviato l'applicazione appena creata, l'applicazione ci mostra il valore di umidità corrente del sensore di umidità del suolo in percentuale.

 

Per ulteriori informazioni sull'APP Blynk e sul suo utilizzo nei controller, visitare:

Introduzione a Blynk -> https://www.blynk.cc/getting-started
Documentazione -> http://docs.blynk.cc/
Generatore di schizzi -> https://examples.blynk.cc/
- Ultima libreria Blynk -> https://github.com/blynkkk/blynk-library/releases/download/v0.6.1/Blynk_Release_v0.6.1.zip
- Ultimo server Blynk -> https://github.com/blynkkk/blynk-server/releases/download/v0.41.5/server-0.41.5.jar
Blynk Home -> https://www.blynk.cc


Vi auguro un sacco di divertimento ricreare, e fino alla prossima volta.

 

Projekte für fortgeschritteneSensorenSmart home

1 commento

Max

Max

Hallo, es wird hier von begrenztem Datenvolumen gesprochen!
Wo liegt hier die Begrenzung?
Am Datenvolumen des Handy´s oder am Serverdienst des Blynk-Token.
Mit welcher Datenmenge muss man rechnen, wenn alle 30 Min. bei voller Bestückung gesendet wird?

Danke schon mal
Gruß Max

Lascia un commento

Tutti i commenti vengono moderati prima della pubblicazione