Välj land och språk
Språk
Det finns en snabbguide för erfarna Arduino- och sensoranvändare som vill komma igång direkt. För en utförligare guide och lite trevlig läsning fortsätter du efter innehållsförteckningen.
Ladda ned koden från GitHub. Den är skriven i Platform IO. För att kompilera i Arduino IDE kopierar du innehållet i main.cpp som finns i src.
GitHub: GitHub - Mowglli/1.-ESP32-IFTTT
INNEHÅLL
För att bygga projektet behöver du komponenterna nedan. Alla finns hos eBits.
|
Antal |
Komponent |
Länk |
|
1 |
ESP-WROOM-32 |
|
|
1 |
Jordfuktighetssensor med komparator |
|
|
1 |
Temperatur- och luftfuktighetssensor - DHT11 |
|
|
1 |
Kopplingsdäck 165mm x 55mm |
|
|
1 |
120 st. Dupont-kablar, 10cm |
120 st. Dupont-kablar, 10cm eller 20cm långa, 3 typer – ebits.dk |
| Eller | ||
| 1 | Rädda växterna-kit | Rädda växterna-kit |
Nedan går vi igenom sensorinställning och kontroll av avläsningarna i Serial Monitor.

För att läsa värden från DHT11-sensorn inkluderar du ett bibliotek i projektet. Därefter kan event.temperatur och event.humidity sparas i variabler.
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
//DHT11 sensor
#define DHTPIN 23 // Digital pin forbundet til DHT11 sensor
#define DHTTYPE DHT11 // I biblioteket DHT skal vi definere type
DHT_Unified dht(DHTPIN, DHTTYPE);
uint32_t delayMS;
Denna jordfuktighetssensor ansluts till en lämplig ADC-ingång. Sensorutgången måste ligga inom ESP32-ingångens tillåtna spänning; anslut aldrig en 5V-utgång direkt. På klassisk ESP32 bör ADC1 användas med WiFi. I detta 12-bitarsexempel ger analogRead ett råvärde från 0–4095. Formeln nedan ger bara en omvänd skala på 0–100, inte kalibrerad jordfuktighet i procent. Kalibrera torr/våt-referenser i den aktuella jorden och anpassa tröskeln:
//Soil sensor
#define sensorPin 36
int soil_sensor, output_value;
float output_value_pct;
$${Output\_value\_pct=100-((\frac{soil\_sensor}{4095.00})*100)}$$
void sensors(){
float temp;
int hum;
sensors_event_t event;
//print adc udlæsning:
Serial.print(F("ADC-aflæsning(0 - 4095)"));
Serial.println(analogRead(sensorPin));
//Udregn til procent 0% er tør, 100% er vådt
soil_sensor = analogRead(sensorPin);
//output_value = (soil_sensor / 4095.00);
output_value_pct = (100 - ( (soil_sensor/4095.00) * 100 ) );
Serial.print(F("Jorfugtighed: "));
Serial.print(output_value_pct);
Serial.println(F("%"));
dht.temperature().getEvent(&event);
if (isnan(event.temperature)) {
Serial.println(F("Fejl ved aflæsning af temperatur!"));
}
else {
Serial.print(F("Temperatur: "));
Serial.print(event.temperature);
Serial.println(F("°C"));
}
temp = event.temperature;
dht.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
Serial.println(F("Fejl ved aflæsning af Fugtighed!"));
}
else {
Serial.print(F("Fugtighed: "));
Serial.print(event.relative_humidity);
Serial.println(F("%"));
}
hum = event.relative_humidity;
Serial.println("");
if(output_value_pct <= 30 ) // hvis under 30 pct, sendes der besked til telefon
{
IFFT_notifikation(output_value_pct, hum, temp);
}
else
{}
}

Att ställa in WiFi på ESP32 är enkelt och det finns många guider på YouTube. Du använder ett bibliotek och anropar några funktioner. Lösningen nedan mäter hur länge anslutningsförsöket pågått; om det inte lyckats inom 20 sekunder stoppar ESP32 försöket. Du kan lägga till ett omstartskommando här.
Ersätt MITSSID och PASSWORD med ditt nätverksnamn och lösenord.
#include <WiFi.h>
//Wifi info
#define WIFI_NETWORK "SSID"
#define WIFI_PASSWORD "PASSWORD"
#define WIFI_TIMEOUT_MS 20000 //20 ms
Lägg denna funktion utanför void loop och void setup. När den anropas ansluter den till nätverket som anges i steg 1. Efter anslutning skriver den även ut IP-adressen för ESP32 om du behöver den i andra projekt.
void connectToWiFi(){
Serial.print("Connecting to Wifi..");
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_NETWORK, WIFI_PASSWORD);
unsigned long startAttempTime = millis();
while(WiFi.status() !=WL_CONNECTED && millis()- startAttempTime < WIFI_TIMEOUT_MS){
Serial.print(".");
delay(100);
}
if(WiFi.status() !=WL_CONNECTED){
Serial.println("Failed!");
//En genstart kan sættes her
}
else{
Serial.println(" ");
Serial.print("Connected to Wifi with IP: ");
Serial.println(WiFi.localIP());
}
}
Anropa funktionen ovan i void setup(). Anropa även serial.begin(baudrate) så att du kan se om anslutningen lyckades.
void setup() {
//Initialiser serial monitor
Serial.begin(9600);
//Initialiser Wifi
connectToWiFi();
}
Gå till My Applets - IFTTT, och skapa ett konto om du inte redan har ett. Klicka sedan på Create i högra hörnet. Du ser If This och Then That. Klicka på add vid If This.

Sök efter webhooks och välj det.



Välj nu Then That och klicka på add. Sök nu efter aviseringar, så visas alternativet längst ned till höger


Nu kan du skriva texten som skickas till telefonen. Den kan innehålla triggernamnet, tre olika värden som du skickar och tidpunkten då aviseringen skickades.


För att göra en HTTP-förfrågan behöver vi en unik nyckel och en länk dit triggern och önskade värden skickas. De finns i dokumentationen för Webhooks. Bilden nedan visar den unika nyckeln och API:et. Du kan också testa med telefonen genom att klicka på Test

Vid String key = "nøgle" anger du nyckeln från steg 3. Välj själv händelsenamnet.
#include <HTTPClient.h>
//IFFT setup
String key = "key"; //nøgle
String event_name= "soil_moisture_email";
void IFFT_notifikation(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("Notifikation sendt!");
}
Här kontrollerar jag jordfuktighetsvärdet. Om det är <= 30 anropas IFFT_notifikation(), som skickar de nödvändiga värdena till IFTTT.
if(output_value_pct <= 30) //hvis under eller lig med 30 sendes notifikation
{
IFFT_notifikation(output_value_pct, hum, temp);
}
else
{}
Kompilera nu programmet och testa det
Testet nedan gjordes genom att lyfta jordfuktighetssensorn ur jorden så att avläsningen hamnar under triggergränsen på 30%. Aviseringen kommer till telefonen strax efteråt.
Komponenter som behövs för projektet:
|
Antal |
Komponent |
Länk |
|
1 |
ESP-WROOM-32 |
|
|
1 |
Jordfuktighetssensor med komparator |
|
|
1 |
Temperatur- och luftfuktighetssensor - DHT11 |
|
|
1 |
Kopplingsdäck 165mm x 55mm |
|
|
1 |
120 st. Dupont-kablar, 10cm |
120 st. Dupont-kablar, 10cm eller 20cm långa, 3 typer – ebits.dk |
Ladda ned koden från GitHub. Den är skriven i Platform IO. För att kompilera i Arduino IDE kopierar du innehållet i main.cpp som finns i src.
GitHub: GitHub - Mowglli/1.-ESP32-IFTTT
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
//DHT11 sensor
#define DHTPIN 23 // Digital pin forbundet til DHT11 sensor
#define DHTTYPE DHT11 // I biblioteket DHT skal vi definere type
DHT_Unified dht(DHTPIN, DHTTYPE);
uint32_t delayMS;
//Soil sensor
#define sensorPin 36
int soil_sensor, output_value;
float output_value_pct;
void sensors(){
float temp;
int hum;
sensors_event_t event;
//print adc udlæsning:
Serial.print(F("ADC-aflæsning(0 - 4095)"));
Serial.println(analogRead(sensorPin));
//Udregn til procent 0% er tør, 100% er vådt
soil_sensor = analogRead(sensorPin);
//output_value = (soil_sensor / 4095.00);
output_value_pct = (100 - ( (soil_sensor/4095.00) * 100 ) );
Serial.print(F("Jorfugtighed: "));
Serial.print(output_value_pct);
Serial.println(F("%"));
dht.temperature().getEvent(&event);
if (isnan(event.temperature)) {
Serial.println(F("Fejl ved aflæsning af temperatur!"));
}
else {
Serial.print(F("Temperatur: "));
Serial.print(event.temperature);
Serial.println(F("°C"));
}
temp = event.temperature;
dht.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
Serial.println(F("Fejl ved aflæsning af Fugtighed!"));
}
else {
Serial.print(F("Fugtighed: "));
Serial.print(event.relative_humidity);
Serial.println(F("%"));
}
hum = event.relative_humidity;
Serial.println("");
if(output_value_pct <= 30 ) // hvis under 30 pct, sendes der besked til telefon
{
IFFT_notifikation(output_value_pct, hum, temp);
}
else
{}
}
Funktionen har en timer som stoppar anslutningsförsök efter 20 sekunder. Du kan lägga till en åtgärd i den if-satsen, exempelvis omstart.
#include <WiFi.h>
//Wifi info
#define WIFI_NETWORK "SSID"
#define WIFI_PASSWORD "PASSWORD"
#define WIFI_TIMEOUT_MS 20000 //20 ms
void connectToWiFi(){
Serial.print("Connecting to Wifi..");
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_NETWORK, WIFI_PASSWORD);
unsigned long startAttempTime = millis();
while(WiFi.status() !=WL_CONNECTED && millis()- startAttempTime < WIFI_TIMEOUT_MS){
Serial.print(".");
delay(100);
}
if(WiFi.status() !=WL_CONNECTED){
Serial.println("Failed!");
//En genstart kan sættes her
}
else{
Serial.println(" ");
Serial.print("Connected to Wifi with IP: ");
Serial.println(WiFi.localIP());
}
}
På IFTTT.com använder du Webhooks och aviseringar. Kom ihåg triggernamnet och hur många värden du skickar. Du behöver den unika nyckeln och länken från dokumentationen.
#include <HTTPClient.h>
//IFFT setup
String key = "key"; //nøgle
String event_name= "soil_moisture_email";
void IFFT_notifikation(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("Notifikation sendt!");
}
Testet nedan gjordes genom att lyfta jordfuktighetssensorn ur jorden så att avläsningen hamnar under triggergränsen på 30%. Aviseringen kommer till telefonen strax efteråt.
Språk