Pflanzenwächter für die Fensterbank Teil 3 – Erweiterung der Bodenfeuchtesensoren auf maximal sechs Stück. - AZ-Delivery

In het derde deel van de rij van "plant bewakers." Wij op in de voorgaande delen reeds uitgevoerde technische circuit groep terug, en verlengt het aantal sensoren kunnen de vochtige in onze fabriek op maximum 6 bewaker. Een of andere beschikbare al zes delers misschien spanningen hebben voorgedaan, was tot nu toe echter maar één van was beschaltet. Overige 5 delers spanning geserveerd dat tot nog toe op het centrale thema voor het 5 van de 6 analoog digitale ingangen van het definieert ESP32 op 0 te verplaatsen en te beletten dat ze aan de ene kant misschien vleugels in ongecontroleerde, maar ook om te zorgen dat ook merkbaar met ESP het voor ons de vraag wie nu zes ingangen sensor is een vochtige geen verband en waarin. Omdat het moet mogelijk zijn zonder wijziging van de gedragscode door het aansluiten van een makkelijk van een andere sensor (tot maximaal 6) en een volgende Reset van het systeem naar andere sensoren verbinden net zo men wil en nodig hebben. We voorzieningen kan een willekeurig aantal tenminste 1 tot maximaal 6 sensoren, te beginnen met de haven verliet na (GPIO36) tot ten hoogste gelijk aan de haven (33 GPIO). Toch is er naast havens kan worden uitgelaten tussen sensoren, omdat deze anders niet worden erkend. In de volgende de maximale insertie is vochtig getoond met sensoren:

Met sensoren circuit 6

 

Onze kant verhoogt daarom lijst op:1 x groene kleur leidde (560 nm); 5 mm

  • 1x gele kleur leidde (605 nm); 5 mm
  • 1x leidde rode kleur (633 nm); 5 mm
  • Ω tolerantie 6x130k oppositie 1%
  • 6x Ω tolerantie 47K oppositie 1
  • 150 oppositie 3x Ω tolerance 1%
  • 6x Vochtige kapazitiver sensor
  • 1x generieke esp32 38pin variatie; type NodeMCU maatje 32; Benen 38;
  • 1x elektrisch YwRobot spanning uit

Nadat we hebben verricht nu de nodige apparatuur veranderingen mogen we nog steeds onze code aanpassen op de ESP een beetje als onze mobiele telefoon verlengen toepassing. Eerst doen we er de volgende code ESP op onze hoog:

 

# include <Bestuurder/adc.H>
# include <WiFi.H>
# include <WiFiClient.H>
# include <BlynkSimpleEsp32.H>


//Portedefinierung Led's
# define LED_Rot     18    //Red leidde 
# define LED_Gelb    14    //Yellow leidde
# define LED_Gruen   15    //Green leidde

//Settings leidde PWM
# define PWMfreq 5000  Base //5 kHz frequentie voor het weergeven van leidde
# define PWMledChannelA  0
# define PWMledChannelB  1
# define PWMledChannelC  2
# define PWMresolution  8 Resolutie //8 stukjes voor LED PWM

//Other definities
# define ADCAttenuation ADC_ATTEN_DB_11    //ADC_ATTEN_DB_11 = demping 0-3.6V ADC (ADC uitbreiding
# define MoisureSens_Poll_Interval 300000   //Interval tussen twee vochtige grond metingen tijdens > milliseconden,; Alle vijf minuten pakket van gegevens naar mobiele telefoon sturen
# define MaxSensors 6                      //Maximum nummer kunnen sensoren in vochtige
# define StartInit Waar
# define Sens_Calib Waar
# define Sens_NOTCalib Valse

Toepassing //blynk definities
# define BLYNK_GREEN     "23C48E #"
# define BLYNK_BLUE      "04C0F8 #"
# define BLYNK_YELLOW    "ED9D00 #"
# define BLYNK_RED       "D3435C #"
# define BLYNK_BLACK     "#000000"
# define BLYNK_PRINT Serie
# define BLYNK_NO_BUILTIN
# define BLYNK_NO_FLOAT
# define BLYNK_DEBUG //

struct MoistureSensorCalibrationData
{   int Gegevens[MaxSensors * 2] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}; Gegevens voor //calibration vochtigheidsmeter. Volg tekst aanpassen project en waarden ensprechend   String Sensornaam[MaxSensors] = {"Fabriek 1", "Fabriek 2", "Plant 3", "Plant 4", "Plant 5", "Plant 6"}; //Sensor naam en die is ook geschikt voor de toepassing als titel   byte StatusBorderPercentValues[MaxSensoren * 2][2] = { {10, 50},     // Tweedimensionale reeks voor procentuele grenswaarden (verkeerslicht) afzonderlijk voor elke vochtigheidssensor (1-6)     {10, 50},     {10, 50},     {10, 50},     {10, 50},     {10, 50}   };
};

struct MoistureSensorData
{   int Procent[MaxSensoren] = {0, 0, 0, 0, 0, 0};  // Vochtsensorgegevens in procent   byte Old_Percent[MaxSensoren] = {0, 0, 0, 0, 0, 0}; // Vorige _ Vochtsensorgegevens in procent (doel: hoeveelheid gegevens opslaan.)   dwaas DataValid [MaxSensoren] = {fout, fout, fout, fout, fout, fout};
};


// Globale variabelen

char auth[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // Voer de Blynk-app in volgens de instructies voor het Auth Token (e-mail).
// Uw wifi-toegangsgegevens.
char ssid[] = "Your_WLAN_SSID";                 // Pas uw eigen WLAN SSID aan
char doorgeven[] = "Uw _WLAN _Passwort!";           // Pas uw eigen WiFi-wachtwoord aan

MoistureSensorCalibrationData MCalib;
MoistureSensorData MMeasure;
byte AttachedMoistureSensors; // Gedetecteerde actieve vochtsensoren (aantal)
niet ondertekend lang Moisure_ServiceCall_Handler = 0;  // Vertragingsvariabele voor vertraging tussen metingen van de vrije tijd

nietig instellen() {   pinMode(LED_Rood, UITGANG);   pinMode(LED_Geel, UITGANG);   pinMode(LED_Green, UITGANG);   Serie.beginnen(115200);   // initialiseer seriële communicatie met 115200 bits per seconde:   ledcSetup(PWMledChannelA, PWMfreq, PWM-resolutie);   ledcSetup(PWMledChannelB, PWMfreq, PWM-resolutie);   ledcSetup(PWMledChannelC, PWMfreq, PWM-resolutie);   ledcAttachPin(LED_Rood, PWMledChannelA);   // voeg het kanaal toe aan de te besturen GPIO   ledcAttachPin(LED_Geel, PWMledChannelB);   ledcAttachPin(LED_Green, PWMledChannelC);   SetLedConfig(255, 255, 255);   Serie.println(F("Systeemconfiguratie:"));   AttachedMoistureSensors = DetectMoistureSensors();   Serie.afdrukken(AttachedMoistureSensors);   Serie.println(F("Bodemvochtsensor (en)"));   Serie.afdrukken(F("Verbinding met WLAN"));   vertraging(500);   Blynk.beginnen(auth, ssid, doorgeven);  // Initialiseer WiFi-verbinding via Blync Library   Serie.println(F("succesvol."));   SetLedConfig(0, 0, 0);   Init_Blynk_APP();   Run_MoistureSensors(StartInit);   voor (int ik = AttachedMoistureSensors; ik < 6; ik++) {     Update_Blynk_APP(ik, Sens_Calib);   };
}

byte DetectMoistureSensors ()
{
#define MinSensorValue 100   byte Gedetecteerd = 0;   voor (int ik = 0; ik < MaxSensoren; ik++)   {     int MSensorRawValue = ReadMoistureSensor_Raw_Val(ik);     als ( MSensorRawValue > MinSensorValue) {       Gedetecteerd++;     } anders {       pauze;     }   }   als (Gedetecteerd < 1)   {     Serie.println(F("Geen bodemvochtsensoren gedetecteerd. Systeem gestopt."));     esp_deep_sleep_start();     terwijl (1) {}   }   terug Gedetecteerd;
}

dwaas SetLedConfig(byte Rood, byte geel, byte groen)
{   ledcWrite(PWMledChannelA, Rood); // Rode LED   ledcWrite(PWMledChannelB, geel); // Gele LED   ledcWrite(PWMledChannelC, groen); // Groene LED   terug waar;
}

int ReadMoistureSensor_Raw_Val(byte Sensor)
{   int ReturnValue, ik;   lang som = 0;
#define NUM_READS 6   adc1_config_width(ADC_WIDTH_BIT_12);   // Bereik 0-4095   schakelaar (Sensor)   {     geval 0:       {         adc1_config_channel_atten(ADC1_CHANNEL_0, ADCAttenuation);         voor (ik = 0; ik < NUM_READS; ik++) { // Gemiddelde algoritme           som += adc1_get_raw( ADC1_CHANNEL_0 ); // Analoog lezen         }         ReturnValue = som / NUM_READS;         pauze;       }     geval 1:       {         adc1_config_channel_atten(ADC1_CHANNEL_3, ADCAttenuation);         voor (ik = 0; ik < NUM_READS; ik++) { // Gemiddelde algoritme           som += adc1_get_raw( ADC1_CHANNEL_3 ); // Analoog lezen         }         ReturnValue = som / NUM_READS;         pauze;       }     geval 2:       {         adc1_config_channel_atten(ADC1_CHANNEL_6, ADCAttenuation);         voor (ik = 0; ik < NUM_READS; ik++) { // Gemiddelde algoritme           som += adc1_get_raw( ADC1_CHANNEL_6 ); // Analoog lezen         }         ReturnValue = som / NUM_READS;         pauze;       }     geval 3:       {         adc1_config_channel_atten(ADC1_CHANNEL_7, ADCAttenuation);         voor (ik = 0; ik < NUM_READS; ik++) { // Gemiddelde algoritme           som += adc1_get_raw( ADC1_CHANNEL_7 ); // Analoog lezen         }         Winstwaarde = som / NUM_READS;         breken;       }     geval 4:       {         adc1_config_channel_atten(ADC1_CHANNEL_4, ADCAttenuation);         voor (ik = 0; ik < NUM_READS; ik++) { // Gemiddelde algoritme           som += adc1_get_raw( ADC1_CHANNEL_4 ); // Analoog lezen         }         Winstwaarde = som / NUM_READS;         breken;       }     standaard:       {         adc1_config_channel_atten(ADC1_CHANNEL_5, ADCAttenuation);         voor (ik = 0; ik < NUM_READS; ik++) { // Gemiddelde algoritme           som += adc1_get_raw( ADC1_CHANNEL_5 ); // Analoog lezen         }         Winstwaarde = som / NUM_READS;         breken;       }   }   terug Winstwaarde;
}

nietig Init_Blynk_APP()
{   Blynk.setProperty(V1, "etiket", MCalib.Sensornaam[0]);   Blynk.setProperty(V2, "etiket", MCalib.Sensornaam[1]);   Blynk.setProperty(V3, "etiket", MCalib.Sensornaam[2]);   Blynk.setProperty(V4, "etiket", MCalib.Sensornaam[3]);   Blynk.setProperty(V5, "etiket", MCalib.Sensornaam[4]);   Blynk.setProperty(V6, "etiket", MCalib.Sensornaam[5]);
}

nietig Update_Local_Display()
{   byte rood1 = 0;   byte geel1 = 0;   byte groen1 = 0;   voor (byte ik = 0; ik < AttachedMoistureSensors; ik++)   {     als (MMeasure.DataValid[ik])     {       als ( MMeasure.Procent[ik] > MCalib.StatusBorderPercentValues[ik][1])       {         groen1++;       } anders als ( MMeasure.Procent[ik] > MCalib.StatusBorderPercentValues[ik][0])       {         geel1++;       } anders       {         rood1++;       }     }   }   als (rood1 > 0)   {     SetLedConfig(255, 0, 0);   }   anders als (geel1 > 0)   {     SetLedConfig(0, 255, 0);   }   anders als (groen1 > 0)   {     SetLedConfig(0, 0, 100);   }   anders   {     SetLedConfig(100, 100, 100);   }
}

nietig Update_Blynk_APP(byte Sensor, dwaas Gekalibreerd)
{   schakelaar (Sensor)   {     geval 0:       {         als ((MMeasure.DataValid[0]) & (Gekalibreerd))         {           als ( MMeasure.Procent[0] > MCalib.StatusBorderPercentValues[0][1])           {             Blynk.setProperty(V1, "kleur", BLYNK_GREEN);           } anders als ( MMeasure.Procent[0] > MCalib.StatusBorderPercentValues[0][0])           {             Blynk.setProperty(V1, "kleur", BLYNK_YELLOW);           } anders           {             Blynk.setProperty(V1, "kleur", BLYNK_RED);           }           vertraging(100);           Blynk.virtualWrite(V1, MMeasure.Procent[0]);         } anders         {           als (Gekalibreerd)           {             Blynk.setProperty(V1, "etiket", "Deaktiviert");             vertraging(100);             Blynk.virtualWrite(V1, 0);             vertraging(100);             Blynk.setProperty(V1, "kleur", BLYNK_BLACK);           }           anders           {             Blynk.virtualWrite(V1, 0);             vertraging(100);             Blynk.setProperty(V1, "kleur", BLYNK_BLUE);           }         }         breken;       }     geval 1:       {         als ((MMeasure.DataValid[1]) & (Gekalibreerd))         {           als ( MMeasure.Procent[1] > MCalib.StatusBorderPercentValues[1][1])           {             Blynk.setProperty(V2, "kleur", BLYNK_GREEN);           } anders als ( MMeasure.Procent[1] > MCalib.StatusBorderPercentValues[1][0])           {             Blynk.setProperty(V2, "kleur", BLYNK_YELLOW);           } anders           {             Blynk.setProperty(V2, "kleur", BLYNK_RED);           }           vertraging(100);           Blynk.virtualWrite(V2, MMeasure.Procent[1]);         } anders         {           als (Gekalibreerd)           {             Blynk.setProperty(V2, "etiket", "Deaktiviert");             vertraging(100);             Blynk.virtualWrite(V2, 0);             vertraging(100);             Blynk.setProperty(V2, "kleur", BLYNK_BLACK);           }           anders           {             Blynk.virtualWrite(V2, 0);             vertraging(100);             Blynk.setProperty(V3, "kleur", BLYNK_BLUE);           }         }         breken;       }     geval 2:       {         als ((MMeasure.DataValid[2]) & (Gekalibreerd))         {           als ( MMeasure.Procent[2] > MCalib.StatusBorderPercentValues[2][1])           {             Blynk.setProperty(V3, "kleur", BLYNK_GREEN);           } anders als ( MMeasure.Procent[2] > MCalib.StatusBorderPercentValues[2][0])           {             Blynk.setProperty(V3, "kleur", BLYNK_YELLOW);           } anders           {             Blynk.setProperty(V3, "kleur", BLYNK_RED);           }           vertraging(100);           Blynk.virtualWrite(V3, MMeasure.Procent[2]);         } anders         {           als (Gekalibreerd)           {             Blynk.setProperty(V3, "etiket", "Deaktiviert");             vertraging(100);             Blynk.virtualWrite(V3, 0);             vertraging(100);             Blynk.setProperty(V3, "kleur", BLYNK_BLACK);           }           anders           {             Blynk.virtualWrite(V3, 0);             vertraging(100);             Blynk.setProperty(V3, "kleur", BLYNK_BLUE);           }         }         breken;       }     geval 3:       {         als ((MMeasure.DataValid[3]) & (Gekalibreerd))         {           als ( MMeasure.Procent[3] > MCalib.StatusBorderPercentValues[3][1])           {             Blynk.setProperty(V4, "kleur", BLYNK_GREEN);           } anders als ( MMeasure.Procent[3] > MCalib.StatusBorderPercentValues[3][0])           {             Blynk.setProperty(V4, "kleur", BLYNK_YELLOW);           } anders           {             Blynk.setProperty(V4, "kleur", BLYNK_RED);           }           vertraging(100);           Blynk.virtualWrite(V4, MMeasure.Procent[3]);         } anders         {           als (Gekalibreerd)           {             Blynk.setProperty(V4, "etiket", "Deaktiviert");             vertraging(100);             Blynk.virtualWrite(V4, 0);             vertraging(100);             Blynk.setProperty(V4, "kleur", BLYNK_BLACK);           }           anders           {             Blynk.virtualWrite(V4, 0);             vertraging(100);             Blynk.setProperty(V4, "kleur", BLYNK_BLUE);           }         }         breken;       }     geval 4:       {         als ((MMeasure.DataValid[4]) & (Gekalibreerd))         {           als ( MMeasure.Procent[4] > MCalib.StatusBorderPercentValues[4][1])           {             Blynk.setProperty(V5, "kleur", BLYNK_GREEN);           } anders als ( MMeasure.Procent[4] > MCalib.StatusBorderPercentValues[4][0])           {             Blynk.setProperty(V5, "kleur", BLYNK_YELLOW);           } anders           {             Blynk.setProperty(V5, "kleur", BLYNK_RED);           }           vertraging(100);           Blynk.virtualWrite(V5, MMeasure.Procent[4]);         } anders         {           als (Gekalibreerd)           {             Blynk.setProperty(V5, "etiket", "Deaktiviert");             vertraging(100);             Blynk.virtualWrite(V5, 0);             vertraging(100);             Blynk.setProperty(V5, "kleur", BLYNK_BLACK);           }           anders           {             Blynk.virtualWrite(V5, 0);             vertraging(100);             Blynk.setProperty(V5, "kleur", BLYNK_BLUE);           }         }         breken;       }     standaard:       {         als ((MMeasure.DataValid[5]) & (Gekalibreerd))         {           als ( MMeasure.Procent[5] > MCalib.StatusBorderPercentValues[5][1])           {             Blynk.setProperty(V6, "kleur", BLYNK_GREEN);           } anders als ( MMeasure.Procent[5] > MCalib.StatusBorderPercentValues[5][0])           {             Blynk.setProperty(V6, "kleur", BLYNK_YELLOW);           } anders           {             Blynk.setProperty(V6, "kleur", BLYNK_RED);           }           vertraging(100);           Blynk.virtualWrite(V6, MMeasure.Procent[5]);         } anders         {           als (Gekalibreerd)           {             Blynk.setProperty(V6, "etiket", "Deaktiviert");             vertraging(100);             Blynk.virtualWrite(V6, 0);             vertraging(100);             Blynk.setProperty(V6, "kleur", BLYNK_BLACK);           }           anders           {             Blynk.virtualWrite(V6, 0);             vertraging(100);             Blynk.setProperty(V6, "kleur", BLYNK_BLUE);           }         }         breken;       }   } // Eindschakelaar
}

nietig Get_Moisture_DatainPercent()
{   byte CalibDataOffset = 0;   voor (byte ik = 0; ik < AttachedMoistureSensors; ik++)   {     CalibDataOffset =  ik * 2;     int RawMoistureValue = ReadMoistureSensor_Raw_Val(ik);     als ((MCalib.Gegevens[CalibDataOffset] == 0) || (MCalib.Gegevens[CalibDataOffset + 1] == 0)) // MinADC-waarde maxADC ADC-waarde     {       MMeasure.Procent[ik] = RawMoistureValue;       MMeasure.DataValid[ik] = fout;     } anders     {       RawMoistureValue = MCalib.Gegevens[CalibDataOffset + 1] - RawMoistureValue;       RawMoistureValue = MCalib.Gegevens[CalibDataOffset] + RawMoistureValue;       MMeasure.Procent[ik] = kaart(RawMoistureValue, MCalib.Gegevens[CalibDataOffset], MCalib.Gegevens[CalibDataOffset + 1], 0, 100);       als ((MMeasure.Procent[ik] > 100 ) | (MMeasure.Procent[ik] < 0 ))       {         MMeasure.Procent[ik] = RawMoistureValue;         MMeasure.DataValid[ik] = fout;       } anders  {         MMeasure.DataValid[ik] = waar;       }     }   }   terug ;
}

nietig Run_MoistureSensors (dwaas In het)   // HauptFunktion zum Betrieb der Bodenfeuchtesensoren
{   byte MinSensValue = 100;   als ((millis() - Moisure_ServiceCall_Handler >= MoisureSens_Poll_Interval) | (In het))   {     Moisure_ServiceCall_Handler = millis();     Get_Moisture_DatainPercent();     voor (int ik = 0; ik < AttachedMoistureSensors; ik++)     {       als (MMeasure.DataValid[ik])       {         als (MMeasure.Procent[ik] != MMeasure.Old_Percent[ik])         {           MMeasure.Old_Percent[ik] = MMeasure.Procent[ik];           als (MMeasure.Procent[ik] < MinSensValue ) {             MinSensValue = MMeasure.Procent[ik];           };           Serie.afdrukken(F("Feuchtigkeitswert Sensor"));           Serie.afdrukken(ik);           Serie.afdrukken(F("in Prozent:"));           Serie.afdrukken(MMeasure.Procent[ik]);           Serie.println(F(" %"));           Update_Blynk_APP(ik, Sens_Calib);    // Aktualisiere Handywerte         }       } anders       {         Update_Blynk_APP(ik, Sens_NOTCalib);    // Aktualisiere Handywerte         Serie.afdrukken(F("Sensor"));         Serie.afdrukken(ik);         Serie.afdrukken(F("nicht kalibiert. Bitte kalibrieren. Rohdatenwert:"));         Serie.println(MMeasure.Procent[Ik]);       }     }     Update_Local_Display();           Lokale bewaker //update plant display (Led)   }
}

Belangrijkste //the lus
Leegte Lus()
{   Run_MoistureSensors(Valse);   Blynk.lopen();   //Execute Blync basisfuncties
} 

 

Deze moeten worden gevolgd voordat de winkel op hoog niveau op onze ESP, parameters, de volgende lijnen / code zijn aangepast aan de behoeften van elk moet gaan:

int-gegevens voor [MaxSensors* *] 0.0,0.0,0.0,0.0,0.0,0.0 = {};

Waarden volgens beschrijving alsjeblieft in deel 1 van de rij aanpassen.

 

# define 300000 MoisureSens_Poll_Interval

Interval tussen twee metingen tijdens vochtige grond milliseconden. De waarde is, op het invloed op hoe vaak de gegevens van mobiele telefoons worden aangepast, en het samen, die een aantasting gegevensstroom voor de operatie per tijdseenheid. Hoe hoger, hoe groter interval. Doe alsjeblieft een waarde dat past bij gegevensstroom of eigen begroting. [VOORBEELD: 300000 ms = 5 minuten interval gegevensoverdracht}

 

De Char [] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
SSID Char [] = "Deine_WLAN_SSID";
char [] = passen "Dein _WLAN _Passwort!";

Alsjeblieft waarden volgens beschrijving in deel 2 van de rij aanpassen.

 

Het in staat zijn De volgende parameters / code termen - van de wederzijdse behoeften zijn aangepast:

 

Sensornaam string [MaxSensors] = {"Fabriek 1", "plant 2", "plant 3", "plant 4", "plant 5", "6 plant"};

De vochtige Sensornaam wat wel blijkt uit de aanvraag als titel.

 

byte StatusBorderPercentValues [* MaxSensors*] [2] = {} {10.50,.

 Voor percentage tweedimensionale Array grenswaarden (verkeerslichten) in alle gevallen per individuele sensor vochtige (1-6). Als invloed op de "stoplicht" heeft weergeven en de weergave van de waarden in de eerste die toepassing (10) de grens tussen tijdelijke opschept status "rode" en "yellow" status. De tweede waarde geeft de grens tussen tijdelijke status "geel" en "groene" status. Voorbeeld: van 51% van de "groene" vochtigheid van 9% van vochtige grond "rood".

 

Als alle parameters, genaamd correct omschreven de kwestie op de serie volgen moet nu als volgt:

Serie kwestie

Tip: In dit voorbeeld zijn, in plaats van max6. Slechts 5 verbonden sensoren

Als de volgende men moet zich aanpassen aan onze HandyApp nog op de hardware en bedreven veranderd product.

Want we krijgen slechts 2000 energiepunten kosteloos verstrekt in onze Blynk HandyAPP, we moeten gebonden aan 6 Sensoren sommige huishoudens. Daarom zijn in de eerste stap die we de doven "Gauge" geïnvesteerd in het tweede deel element.

Blynk Handyapp foto 1

 

We zijn vervanger voor de "Gauge" element met de "mate van H" element

Blynk toepassing element toevoegen

Nu voegen we aan de weergave van de grond de actuele vocht meer positieve energie deel "van het niveau van H" 6 keer in totaal.

Blynk - Widget

Nu onze oppervlakte ongeveer zo moeten uitzien:

Blynk aanvraag - nieuw scherm

Nu moeten we nog drie waarden aanpassen in respectievelijk de kwaliteiten van 6 elementen. Ik toon hier voorbeeldig de instellingen voor de eerste sensor

Blynk instellingen

De belangrijkste aanpassing is bij die gelegenheid heeft de inputvariabelen. Dit moet worden achtereenvolgens gedefinieerd voor elke "H niveau van" element door input voor "V1" Fabriek 1 tot en met "V6" Fabriek voor 6. Trouwens, "V" staat voor "pinnen Virtuelle" en laat de verdeling over de elementen van de aanvraag en de instructies in de code. Bovendien worden wij kiezen als een minimumwaarde 0 en als een maximum waarde 100. Als het derde definiëren we als een lezing "Pushing" tarief één. Met het ontwerp, elke andere kleur type grootte en elke naam die gekozen kan worden, omdat deze parameters worden later door ons programma of op de ESP zijn gedefinieerd.

Nu het eindresultaat, met het activeren van het project moet als volgt over:

Blynk sensordisplay

(De laatste sensor is afgebeeld als gedeactiveerd, want ik heb alleen verbonden 5 sensoren in het voorbeeld. Door middel van 6 sensoren het veld wordt automatisch geactiveerd)

Vind je meer informatie over het Blynk aanvraag en hun gebruik onder in controllers


Ik wil een hoop plezier tijdens het kopiëren en naar de volgende plek.

 

 

 

 

 

Esp-32Projekte für fortgeschritteneSensorenSmart home

9 Reacties

Tobias

Tobias

Hallo Peter,
Da dis ein komplett anderen Anwendungsfall darstellt, würde ich empfehlen hier die Blynk Dokumenation als Basis für den Neuaufbau eines eigenen Sketches zu nutzen.

Gruß
Tobias

Tobias Kuch

Tobias Kuch

Hallo Max,
Grundsätzlich schon, jedoch ist dann auch eine komplette Umprogrammierung der Software erforderlich. Die Software als solches ist nur auf dem ESP32 so ausführbar.
Gruß
Tobias

Max

Max

Hallo und danke für das SUPER Projekt. Ich suche schon lange etwas ähnliches, bei dem ich die Bodenfeuchtigkeit messen kann und damit dann eine automatische Bewässerung steuern kann.
Natürlich kann ich nur Teile aus diesem Projekt verwenden, aber besonders die Handy-App-Anzeige und die Anzahl der Sensoren ist super.
Für meinen Anwendungsfall benötige ich allerdings 8-10 Feuchtigkeitssensoren und zusätzlich noch 4 Eingänge für Füllstandsschalter (Reedkontakt).

Kann man das Projekt mit einer anderen Hardware auf die genannten Sensoren und Eingänge bringen?
Bis Bald
Max

Peter

Peter

Habe den Pflanzenwächter gebaut und es funktioniert alles perfekt. Jetzt habe ich eine ganz andere Sache vor. Wie kann ich den Sketch umändern, damit von zwei Spannungs-und zwei Stromsensoren die Werte in der Blynk-App angezeigt werden?

Tobias Kuch

Tobias Kuch

Hallo Knut,

Die Sensoren werden mit 5 Volt betrieben, der Rest mit 3,3 Volt. Sorry für die verspätete Antwort. Du kannst alle Projekte mit Plänen im Fritzing Format (Inkl. Werteangaben) unter meiner GitHub Seite https://github.com/kuchto herunterladen.
Viele Grüße

Knut Dorendorff

Knut Dorendorff

OK dann hierzu keine Antwort.
Mit wieviel Volt wird was auf dem Board was betrieben? 3,3 oder 5 Volt?

Mit freundlichen Grüßen
Knut Dorendorff

Knut Dorendorff

Knut Dorendorff

Hallo Tobias,
welche Widerständen kommen zwischen Minus und dem ESP32. Da wir sechsmal 47 kΩ und 130 kΩ haben. Oder ist da egal?

Mit freundlichen Grüssen
Knut
Danke schon mal.

Tobias

Tobias

Hallo Martin,

Leider funktioniert das Projekt nicht nativ mit dem ESP8266, da dieser nur einen Analog-Port besitzt, wir aber sechs Ports brauchen, aber auch, weil der Analog Port des ESP8266 eine fixen Eingangsbereich von 0 – 1 Volt hat. Diesen sehe ich i.m.h.o als zu gering für unsere Zwecke an. Du könntest theoretisch jedoch einen externen I2C AD Wandler an des ESP8266 hängen. Jedoch muss der Großteils danach angepasst werden. Insgesamt ist es aber mit sehr viel Aufwand möglich es zu portieren. Auch bringt der externe AD Wandler Extrakosten mit sich.

Martin

Martin

Hallo Tobias,

würde dein Projekt auch mit einem NodeMCU Lua Lolin V3 Modul mit ESP8266 12E funktionieren?

Laat een reactie achter

Alle opmerkingen worden voor publicatie gecontroleerd door een moderator

Aanbevolen blogberichten

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery