RED PLANTERNE MED ESP32 & IFTTT!
0 kommentarer

 

Kan du också lyckas döda ens en kaktus? - så titta här! Detta lilla projekt kan se till att din planta hemma inte vissnar för att du glömmer att vattna den. Projektet består av två sensorer, en som mäter både temperatur och luftfuktighet och en andra sensor som kan mäta markens fuktighet . Genom att koppla en ESP32 till sensorerna och samtidigt koppla den till Wi-Fi kan vi använda ESP32 för att skicka aviseringar till telefonen med hjälp av IFTTT om det nedre gränsvärdet för till exempel markfuktighet har nåtts.

Det kommer en Snabbguide för dig som bara vill komma igång snabbt och har mycket erfarenhet av Arduino och sensorer. Men för er som vill ha en mer detaljerad guide och lite njutbar läsning, läs med efter innehållsförteckningen.

Koden är tillgänglig på GitHub. Det är skrivet i Platform IO, om du vill kompilera i Arduino IDE är det bara att kopiera det i main.cpp som finns i src.

GitHub: GitHub - Mowgli/1.-ESP32-IFTTT

INNEHÅLLSFÖRTECKNING

 

För att göra detta projekt behöver du komponenterna nedan. De kan alla hittas på ebits.

siffra

Komponent

Länk

1

ESP-WROOM-32

ESP-WROOM-32 Utvecklingskort – ebits.se

1

Jordfuktighetssensor med komparator

Jordfuktighetssensor med komparator - ebits.se

1

Temperatur- och luftfuktighetsmätare - DHT11

Temperatur- och luftfuktighetsmätare - DHT11 – ebits.se

1

Fumble board 165mm x 55mm

Fumbleboard 165mm x 55mm – ebits.se

1

120 st Dupont kablar 10cm

120 st Dupont-kablar 10cm eller 20cm längd, 3 typer – ebits.se

TESTNING OCH VALIDERING AV SENSORER

Nedan finns en genomgång av hur man ställer in sensorerna och validerar avläsningarna i den seriella monitorn.

DHT11

För att kunna läsa värden på DHT11 -sensorn måste ett bibliotek ingå i projektet. Efter inkludering kommer det att vara möjligt att helt enkelt lagra händelse.temperatur och händelse.fuktighet i variabler.

 # include <Adafruit_Sensor.h>
 # inkluderar <DHT.h>
 # inkluderar <DHT_U.h>

 //DHT11 sensor
 # define DHTPIN 23 // Digital pin ansluten till DHT11-sensor
 # define DHTTYPE DHT11 // I biblioteket DHT måste vi definiera typ 
DHT_Unified dht(DHTPIN, DHTTYPE);
 uint32_t delayMS;
JORDFUKTSMÄTARE

Att ställa in jordfuktighetsmätaren kräver helt enkelt att du ansluter den till en GPIO där det finns en ADC. Vi använder analog avläsning för att mäta fukten i jorden. ADC:n skriver ut ett värde från 0 - 4095. För att omvandla det till en procentsats kan följande formel med fördel användas:

 //Jordsensor
 # definiera sensorPin 36
 int soil_sensor, output_value;
 float output_value_pct;

$${Output\_value\_pct=100-((\frac{jord\_sensor}{4095.00})*100)}$$

TOTAL SENSORFUNKTION()
 void sensors(){
 flytande temp; 
int hum;

 sensors_event_t händelse;
 //skriv ut ADC-utgång:
 Seriell . print (F( "ADC-läsning(0 - 4095)" ) );
 Seriell . println ( analogRead (sensorPin));

 //Beräkna till procent 0% är torr, 100% är våt
 soil_sensor = analogRead (sensorPin);
 //output_value = (jordsensor / 4095.00); 
output_value_pct = ( 100 - ((jordsensor/ 4095.00 ) * 100 ));
 Seriell . print (F( "Markfuktighet: " ));
 Seriell . print (output_value_pct);
 Seriell . println (F( "%" ));

 dht.temperature().getEvent(&event);
 if (isnan(händelse.temperatur)) { 
Seriell . println (F( "Fel vid läsning av temperatur!" )) ;
 }
 annat {
 Seriell . print (F( "Temperatur: " ));
 Seriell . print (händelse.temperatur);
 Seriell . println (F( "°C" ));
 }
 temp = händelse.temperatur;

 dht.humidity().getEvent(&event); 
if (isnan(event.relative_humidity)) {
 Seriell . println (F( "Fel vid läsning av fuktighet!" )) ;
 }
 annat {
 Seriell . print (F( "Fuktighet: " ));
 Seriell . print (event.relative_humidity);
 Seriell . println (F( "%" ));
 }
 hum = händelse.relativ_fuktighet; 
Seriell . println ( "" );

 if (output_value_pct <= 30 ) // om under 30 procent skickas meddelandet till telefonen
 {
 IFFT_notification(output_value_pct, hum, temp);
 }
 annat
 {}
 }
UTSKRIFT TILL SERIEÖVERVAKNING

INSTÄLLNING AV WIFI PÅ ESP32

Att sätta upp wifi på ESP32 är ganska enkelt och det finns många guider på youtube. Du använder ett bibliotek och anropar vissa funktioner. Lösningen nedan ser till att tajma hur länge du har försökt upprätta en anslutning, om det inte har lyckats inom 20 sekunder stannar ESP32 . Här är det alltid möjligt att ange ett omstartskommando.

STEG 1 - Bibliotek och definitioner:

Ersätt här MITSID och LÖSENORD med ditt nätverksnamn och kod.

 # include <WiFi.h>
 //Wifi-information
 # definiera WIFI_NETWORK "SSID" 
# definiera WIFI_PASSWORD "LÖSENORD"
 # definiera WIFI_TIMEOUT_MS 20000 //20 ms

STEG 2 - Skapande av anslutningsskapande funktion

Infoga följande funktion utanför void loop och void setup. När denna funktion anropas upprättas en anslutning till nätverket du angav i steg 1. När den har upprättat en anslutning kommer den till och med att skriva ut IP-adressen för ESP32 om den ska användas i andra projekt.

 void connectToWiFi(){ 
Seriell . print ( "Ansluter till Wifi.." ) ;
 WiFi .mode(WIFI_STA);
 Wi-Fi . börja (WIFI_NETWORK, WIFI_PASSWORD);

 unsigned long startAttempTime = millis ();

 while ( WiFi .status() !=WL_CONNECTED && millis ()- startAttempTime < WIFI_TIMEOUT_MS){ 
Seriell . print ( "." );
 fördröjning ( 100 );
 }
 if ( WiFi .status() !=WL_CONNECTED){
 Seriell . println ( "Mislyckades!" );
 //En omstart kan ställas in här
 }
 annat { 
Seriell . println ( " " );
 Seriell . print ( "Ansluten till Wifi med IP: " );
 Seriell . println ( WiFi . localIP ());
 }
 }

STEG 3 - Anrop av funktion

Funktionen ovan anropas in void setup(). Samtidigt anropas serial.begin(baudrate), så att vi där kan läsa om en fo-anslutning har upprättats.

 void setup () { 
//Initiera seriell monitor
 Seriell . börja ( 9600 );
 //Initiera Wifi
 connectToWiFi();
 }

 

INSTÄLLNING AV IFTTT

STEG 1 - Konfigurera IFTTT (om detta)

Gå till Mina applets - IFTTT , skapa ett konto här om du inte redan har ett. Tryck sedan på Skapa i det högra hörnet. Du kommer att presenteras för mig om detta och då. Här trycker du på lägg till bredvid Om då.

Sök sedan efter webhooks och tryck på denna.

Välj sedan Ta emot en webbförfrågan, och ange händelsenamn t.ex. jordsensor. Avsluta med Skapa trigger.

STEG 2 - Konfigurera IFTTT (då det)

Välj sedan Then That och tryck på lägg till. Sök nu efter aviseringar, nere till höger visas

Välj nu Skicka ett meddelande från IFTTT-appen.

 

STEG 3 - Skapande av text med önskade värden

Du har nu möjlighet att skriva en text som skickas till din telefon. Det är möjligt att skriva ut triggernamnet, tre olika värden du kan skicka med och när aviseringen skickades.

Nedan är inställningen jag använder

 

STEG 4 - Nyckel och api

För att göra en HTTP-förfrågan behöver vi en unik nyckel och en länk dit vi skickar triggern och de önskade värdena. Du hittar den under dokumentationen för webhooks. bilden nedan visar den unika nyckeln och api. Här är det även möjligt att testa den med din telefon genom att trycka på Testa

STEG 4 - Bibliotek och definitioner:

At String key = "key". Måste du ange nyckeln som du fick i steg 3. Eventets namn är upp till dig.

 # include <HTTPClient.h>
 //IFFT-inställning
 String nyckel = "nyckel" ; //nyckel
 String event_name= "jordfuktighetspost" ;

STEG 5 - Skapande av funktion för kommunikation till webhooks:

 void IFFT_notification( flytvärde1 , int värde2, flytvärde3 ){
 HTTPClient http;
 http. börja ( "https://maker.ifttt.com/trigger/" +event_name+ "/with/key/" +key+ "?value1=" +value1+ "&value2=" +value2+ "&value3=" +value3+ "" );
 http.GET();
 http. än (); 
Seriell . print ( "Meddelande skickat!" );
 }

STEG 6 - Anrop av funktion

Här kollar jag vad värdet är på markfuktigheten, om den är <= 30 anropas funktionen IFFT_notification() där de nödvändiga värdena skickas till IFTTT.

 if (output_value_pct <= 30 ) //om under eller lika med 30 meddelande skickas
 {
 IFFT_notification(output_value_pct, hum, temp);
 }
 annat 
{}

Kompilera nu programmet och testa

TESTA

Testet nedan utförs genom att ta markfuktighetssensorn från marken för att säkerställa att luftfuktigheten sjunker under 30 %, vilket är det intervall som den normalt utlöser. Aviseringen kommer kort därefter på telefonen.

 

SNABB GUIDE

Komponenter du behöver för projektet:

siffra

Komponent

Länk

1

ESP-WROOM-32

ESP-WROOM-32 Utvecklingskort – ebits.se

1

Jordfuktighetssensor med komparator

Jordfuktighetssensor med komparator - ebits.se

1

Temperatur- och luftfuktighetsmätare - DHT11

Temperatur- och luftfuktighetsmätare - DHT11 – ebits.se

1

Fumble board 165mm x 55mm

Fumbleboard 165mm x 55mm – ebits.se

1

120 st Dupont kablar 10cm

120 st Dupont-kablar 10cm eller 20cm längd, 3 typer – ebits.se

Koda

Koden kan laddas ner från GitHub. Det är skrivet i Platform IO, om du vill kompilera i Arduino IDE är det bara att kopiera det i main.cpp som finns i src.

GitHub: GitHub - Mowgli/1.-ESP32-IFTTT

 # include <Adafruit_Sensor.h>
 # inkluderar <DHT.h> 
# inkluderar <DHT_U.h>

 //DHT11 sensor
 # define DHTPIN 23 // Digital pin ansluten till DHT11-sensor
 # define DHTTYPE DHT11 // I biblioteket DHT måste vi definiera typ
 DHT_Unified dht (DHTPIN, DHTTYPE) ;
 uint32_t delayMS;

 //Jordsensor 
# definiera sensorPin 36
 int soil_sensor, output_value;
 float output_value_pct;

Sensorfunktion

 void sensors(){
 flytande temp;
 int hum;

 sensors_event_t händelse;
 //skriv ut ADC-utgång:
 Seriell . print (F( "ADC-läsning(0 - 4095)" ) ); 
Seriell . println ( analogRead (sensorPin));

 //Beräkna till procent 0% är torr, 100% är våt
 soil_sensor = analogRead (sensorPin);
 //output_value = (jordsensor / 4095.00);
 output_value_pct = ( 100 - ((jordsensor/ 4095.00 ) * 100 ));
 Seriell . print (F( "Markfuktighet: " )); 
Seriell . print (output_value_pct);
 Seriell . println (F( "%" ));

 dht.temperature().getEvent(&event);
 if (isnan(händelse.temperatur)) {
 Seriell . println (F( "Fel vid läsning av temperatur!" )) ;
 }
 annat {
 Seriell . print (F( "Temperatur: " )); 
Seriell . print (händelse.temperatur);
 Seriell . println (F( "°C" ));
 }
 temp = händelse.temperatur;

 dht.humidity().getEvent(&event);
 if (isnan(event.relative_humidity)) {
 Seriell . println (F( "Fel vid läsning av fuktighet!" )) ;
 }
 annat { 
Seriell . print (F( "Fuktighet: " ));
 Seriell . print (event.relative_humidity);
 Seriell . println (F( "%" ));
 }
 hum = händelse.relativ_fuktighet;
 Seriell . println ( "" );
 
if (output_value_pct <= 30 ) // om under 30 procent skickas meddelandet till telefonen
 {
 IFFT_notification(output_value_pct, hum, temp);
 }
 annat
 {}

 }

Wifi funktion

Funktionen har en inbyggd timer som slutar försöka skapa om det har gått mer än 20 sekunder. I if-satsen är det möjligt att ange en åtgärd om en omstart etc. önskas. Ekv.

 # include <WiFi.h>
 //Wifi-information
 # definiera WIFI_NETWORK "SSID" 
# definiera WIFI_PASSWORD "LÖSENORD"
 # definiera WIFI_TIMEOUT_MS 20000 //20 ms 
 void connectToWiFi(){
 Seriell . print ( "Ansluter till Wifi.." ) ;
 WiFi .mode(WIFI_STA);
 Wi-Fi . börja (WIFI_NETWORK, WIFI_PASSWORD);
 
unsigned long startAttempTime = millis ();

 while ( WiFi .status() !=WL_CONNECTED && millis ()- startAttempTime < WIFI_TIMEOUT_MS){
 Seriell . print ( "." );
 fördröjning ( 100 );
 }
 if ( WiFi .status() !=WL_CONNECTED){ 
Seriell . println ( "Mislyckades!" );
 //En omstart kan ställas in här
 }
 annat {
 Seriell . println ( " " );
 Seriell . print ( "Ansluten till Wifi med IP: " ); 
Seriell . println ( WiFi . localIP ());
 }
 }

IFTTT-inställning

På IFTTT.com måste webhooks och aviseringar användas. se till att du kommer ihåg utlösarens namn och hur många värden du skriver ut. I dokumentationen måste du använda den unika nyckeln och länken.

 # include <HTTPClient.h>
 //IFFT-inställning
 String nyckel = "nyckel" ; //nyckel 
String event_name= "jordfuktighetspost" ; 
 void IFFT_notification (float value1,int value2,float value3){
 HTTPClient http;
 http .begin ( "https://maker.ifttt.com/trigger/" +event_name+ "/with/key/" +key+ "?value1=" +value1+ "&value2=" +value2+ "&value3=" +value3+ "" );
 http .GET (); 
http .end ();
 Serial .print ( "Meddelande skickat!" );
 }

TESTA

Testet nedan utförs genom att ta markfuktighetssensorn från marken för att säkerställa att luftfuktigheten sjunker under 30 %, vilket är det intervall som den normalt utlöser. Aviseringen kommer kort därefter på telefonen.

 

Skriv en kommentar!

Relevanta produkter

TS101 digital loddekolbeTS101 digital loddekolbe i hånd
TS101 digital lödkolv med USB C-försörjning
Erbjudande prisFrån 1 107 kr
15 i lager
TS80P USB-C Loddekolbe kitTS80P Loddekolbe
TS80P USB-C mini Lödpenna sats
Erbjudande prisFrån 1 265 kr
2 i lager
bruge Loddekolbe Renser til at rengøre loddekolbespidsenLoddekolbe Renser
Lyxigt rengöringsmedel för lödkolv
Erbjudande pris141 kr
9 i lager