5.12 APP Besturing Slimme Boerderij
Let op: Laat geen water uit plastic bakken overlopen tijdens experimenten. Morsen van water op andere sensoren kan kortsluiting veroorzaken of modules buiten werking stellen. Als batterijen nat worden, kan er zelfs een explosie optreden. Wees extra voorzichtig! Voor jongere gebruikers, gelieve onder toezicht van uw ouders te werken. Gebruik batterijen voor de stroomvoorziening in plaats van alleen USB.
Open de 5.12.1APP-Smart-Farm code met Arduino IDE.
#include <Arduino.h>
#ifdef ESP32
#include <WiFi.h>
#elif defined(ESP8266)
#include <ESP8266WiFi.h>
#endif
#include <dht11.h>
#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>
//Weer te geven
#define DHT11PIN 17 //Pin temperatuur- en vochtigheidssensor
#define RAINWATERPIN 35 //Pin stoom sensor
#define LIGHTPIN 34 //Pin fotoweerstand
#define WATERLEVELPIN 33 //Pin waterniveausensor
#define SOILHUMIDITYPIN 32 //Pin bodemvochtigheidssensor
//Te bedienen
#define LEDPIN 27 //LED pin
#define RELAYPIN 25 //Relais pin (om waterpomp te bedienen)
#define SERVOPIN 26 //Servo pin
#define FANPIN1 19 //Ventilator IN+ pin
#define FANPIN2 18 //Ventilator IN- pin
#define BUZZERPIN 16 //Buzzer pin
const char* ssid = "your_SSID";
const char* pwd = "your_PASSWORD";
//Initialiseer LCD1602, 0x27 is I2C adres
LiquidCrystal_I2C lcd(0x27, 16, 2);
WiFiServer server(80); //Initialiseer wifi server
dht11 DHT11; //Initialiseer temperatuur- en vochtigheidssensor
Servo myservo; // maak servo object aan om een servo te bedienen
// 16 servo objecten kunnen worden aangemaakt op de ESP32
//Definieer variabele als gedetecteerde waarden
String request;
String dataBuffer;
int Temperature; //Temperatuur
int Humidity; //Vochtigheid
int SoilHumidity; //Bodemvochtigheid
int Light; //Helderheid
int WaterLevel; //Waterniveau
int Rainwater; //Regenval
void setup() {
Serial.begin(9600);
//Verbinden met wifi
WiFi.begin(ssid, pwd);
//Bepaal of verbonden
Serial.println("Verbinden met WiFi...");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
delay(1000);
//Seriële monitor print wifi naam en IP-adres
Serial.println("Verbonden met WiFi");
Serial.print("WiFi NAAM:");
Serial.println(ssid);
Serial.print("IP:");
Serial.println(WiFi.localIP());
//Initialiseer LCD
lcd.init();
// Schakel de (optionele) achtergrondverlichting uit/aan
lcd.backlight();
//lcd.noBacklight();
lcd.clear();
//Stel de positie van de cursor in
lcd.setCursor(0, 0);
//LCD prints
lcd.print("IP:");
//Stel de positie van de cursor in
lcd.setCursor(0, 1);
//LCD prints
lcd.print(WiFi.localIP());
//stel pinmodi in
pinMode(LEDPIN, OUTPUT);
pinMode(RAINWATERPIN, INPUT);
pinMode(LIGHTPIN, INPUT);
pinMode(SOILHUMIDITYPIN, INPUT);
pinMode(WATERLEVELPIN, INPUT);
pinMode(RELAYPIN, OUTPUT);
pinMode(FANPIN1, OUTPUT);
pinMode(FANPIN2, OUTPUT);
pinMode(BUZZERPIN, OUTPUT);
delay(1000);
// koppelt de servo op pin 26 aan het servo object
myservo.attach(SERVOPIN);
myservo.write(160);
//Start server
server.begin();
// Configureer LEDC kanaal
ledcAttachChannel(BUZZERPIN, 1000, 8, 4);
}
c
void loop() {
//Controleren of een client is verbonden met de webserver
//Wanneer de client is verbonden met de server, retourneert "server.available()" een WiFiClient-object voor communicatie aan clientzijde.
WiFiClient client = server.available();
if (client) {
Serial.println("Nieuwe client verbonden");
while (client.connected()) {
//Bepalen of de server gegevens verzendt
if (client.available()) {
request = client.readStringUntil('s');
Serial.print("Ontvangen bericht: ");
Serial.println(request);
}
//Alle sensorgegevens verkrijgen
getSensorsData();
//Alle gegevens in "dataBuffer" plaatsen
dataBuffer = "";
dataBuffer += String(Temperature, HEX);
dataBuffer += String(Humidity, HEX);
dataBuffer += dataHandle(SoilHumidity);
dataBuffer += dataHandle(Light);
dataBuffer += dataHandle(WaterLevel);
dataBuffer += dataHandle(Rainwater);
//Gegevens naar server verzenden, doorsturen naar APP
client.print(dataBuffer);
delay(500);
//LED
if (request == "a") {
digitalWrite(LEDPIN, HIGH);
} else if (request == "A") {
digitalWrite(LEDPIN, LOW);
}
//Irrigatie
else if (request == "b") {
digitalWrite(RELAYPIN, HIGH);
delay(400); //Irrigatievertraging
digitalWrite(RELAYPIN, LOW);
delay(650);
}
//Ventilator
else if (request == "c") {
delay(800);
digitalWrite(FANPIN1, HIGH);
digitalWrite(FANPIN2, LOW);
delay(200);
} else if (request == "C") {
digitalWrite(FANPIN1, LOW);
digitalWrite(FANPIN2, LOW);
}
//Voerdoos
else if (request == "d") {
//Servo draait naar 80°, open voerdoos
myservo.write(80);
delay(500);
} else if (request == "D") {
//Servo draait naar 160°, sluit voerdoos
myservo.write(160);
}
//Buzzer
else if (request == "e") {
ledcWriteTone(BUZZERPIN, 262);
delay(800);
ledcWriteTone(BUZZERPIN, 0);
delay(100);
}
request = "";
}
Serial.println("Client ontkoppeld");
}
}
void getSensorsData() {
//Gegevens verkrijgen
int chk = DHT11.read(DHT11PIN);
//Stoom sensor
Rainwater = analogRead(RAINWATERPIN);
//Fotoweerstand
Light = analogRead(LIGHTPIN);
//Bodemvochtigheidssensor
SoilHumidity = analogRead(SOILHUMIDITYPIN) * 1.8;
//Waterniveausensor
WaterLevel = analogRead(WATERLEVELPIN) * 1.8;
//Temperatuur
Temperature = DHT11.temperature;
//Vochtigheid
Humidity = DHT11.humidity;
}
//Gegevens omzetten naar percentage
String dataHandle(int data) {
// Analoge waarden omzetten naar percentage
int percentage = (data / 4095.0) * 100;
// Als het omgerekende percentage groter is dan 100, uitvoer 100.
percentage = percentage > 100 ? 100 : percentage;
// Zes karakters slaan hexadecimale strings op, één karakter is als terminator
char hexString[3];
// Hexadecimale waarden omzetten naar 6-cijferige hexadecimale strings, voorloopnullen toevoegen: 0 is 00, 1 is 01...
sprintf(hexString, "%02X", percentage);
return hexString;
}
Wijzig your_SSID in de code naar de naam van je wifi, en your_PASSWORD naar het wifi-wachtwoord. Upload vervolgens de code.
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
Kies het ESP32 Dev Module bord en de COM poort, en upload de code.

Download APP
Voor Android:
Methode 1: Zoek “IOT Farm” in Google Play en download het.

Voor iOS:
Zoek IOT farm in de APP Store en tik om te downloaden.

De startpagina van de APP

APP Functiebeschrijving
Nadat u de code heeft geüpload, verbindt u de telefoon met dezelfde WIFI als de ESP32. U hoeft alleen het IP-adres in de rechterbovenhoek in te voeren om verbinding te maken. Opmerking: Vereist 2.4 GHz WIFI, geen 5G.

Geeft de temperatuurwaarde van de boerderij in realtime weer.

Geeft de luchtvochtigheidswaarde van de boerderij in realtime weer.

Geeft de bodemvochtigheidswaarde van de boerderij in realtime weer.

Geeft de zonlichtintensiteit van de boerderij in realtime weer.

Geeft het waterpeil van de boerderij in realtime weer.

Geeft de analoge regenvalwaarde van de boerderij in realtime weer.

Bedien LED.

Regel irrigatie via waterpomp.

Bedien de ventilator om de temperatuur aan te passen.

Bedien de servo om de voerbak te openen of te sluiten.

Bedien de zoemer om geluid te maken.
