Created
June 30, 2022 13:51
-
-
Save alanmsmxyz/2c41b14ce1736ccb41be8e0a400114dc to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "DHT.h"' | |
#include <ESP8266WiFi.h> | |
#include "ThingSpeak.h" | |
// LOOP CONFIG | |
#define LOOP_DELAY 5000 // equal to 50 | |
// WIFI AUTH | |
#define WIFI_SSID "[REPLACE]" | |
#define WIFI_PASSWORD "[REPLACE]" | |
// THINGSPEAK CONFIG | |
#define TS_WRITE_API_KEY "[REPLACE]" | |
#define TS_CHANNEL_NUMBER "[REPLACE]" | |
#define TS_AIR_TEMPERATURE_FIELD 1 | |
#define TS_AIR_HUMIDITY_FIELD 2 | |
#define TS_SOIL_MOISTURE_FIELD 3 | |
#define TS_PUMP_ON_FIELD 4 | |
#define TS_LAMP_ON_FIELD 5 | |
// SENSOR PIN | |
#define DHT11_PIN D2 | |
#define SOIL_MOISTURE_PIN A0 | |
// ACTUATOR PIN | |
#define PUMP_RELAY_PIN D0 | |
#define LAMP_RELAY_PIN D1 | |
// CALIBRATION DATA | |
#define SOIL_MOISTURE_AIR 6 // equal to 0% humidity | |
#define SOIL_MOISTURE_WATER 497 // equal to 100% humidity | |
// SOIL HUMIDITY THRESHOLD (%) | |
#define MIN_SOIL_MOISTURE 20 | |
#define MAX_SOIL_MOISTURE 60 | |
// AIR TEMPERATURE THRESHOLD (C) | |
#define MIN_AIR_TEMPERATURE 21 | |
#define MAX_AIR_TEMPERATURE 24 | |
// DHT SENSOR INIT | |
DHT dht(DHT11_PIN, DHT11); | |
// WIFI INIT | |
WiFiClient client; | |
// ACTUATOR VARIABLE INIT | |
bool shouldPumpOn; | |
bool shouldLampOn; | |
void setup() { | |
// INIT PIN MODE | |
pinMode(SOIL_MOISTURE_PIN, INPUT); | |
pinMode(PUMP_RELAY_PIN, OUTPUT); | |
pinMode(LAMP_RELAY_PIN, OUTPUT); | |
// INIT ACTUATOR STATE | |
// HIGH = OFF | LOW = ON | |
digitalWrite(PUMP_RELAY_PIN, HIGH); | |
digitalWrite(LAMP_RELAY_PIN, HIGH); | |
// INIT DHT11 SENSOR | |
dht.begin(); | |
// INIT WIFI | |
WiFi.mode(WIFI_STA); | |
// INIT THINGSPEAK | |
ThingSpeak.begin(client); | |
// INIT SERIAL | |
Serial.begin(9600); | |
// INIT ACTUATOR VARIABLES VALUE | |
shouldPumpOn = false; | |
shouldLampOn = false; | |
delay(5000); | |
} | |
void loop() { | |
// VERIFY WIFI CONNECTION | |
if (WiFi.status() != WL_CONNECTED) { | |
Serial.print("Conneting WiFi... "); | |
while (WiFi.status() != WL_CONNECTED) { | |
WiFi.begin(WIFI_SSID, WIFI_PASSWORD); | |
delay(5000); | |
} | |
Serial.println("Connected."); | |
} | |
// READ SENSOR VALUES | |
float airHumidity = dht.readHumidity(); | |
float airTemperature = dht.readTemperature(); | |
int soilMoistureValue = analogRead(SOIL_MOISTURE_PIN); | |
int soilMoisture = map(soilMoistureValue, SOIL_MOISTURE_AIR, SOIL_MOISTURE_WATER, 0, 100); | |
// DETERMINE ACTUATOR VARIABLES VALUE | |
if (airTemperature < MIN_AIR_TEMPERATURE) { | |
shouldLampOn = true; | |
} else if (airTemperature > MAX_AIR_TEMPERATURE) { | |
shouldLampOn = false; | |
} | |
if (soilMoisture < MIN_SOIL_MOISTURE) { | |
shouldPumpOn = true; | |
} else if (soilMoisture > MAX_SOIL_MOISTURE) { | |
shouldPumpOn = false; | |
} | |
// ACTUATE BASED ON ACTUATOR VARIBLES VALUE | |
// HIGH = OFF | LOW = ON | |
if (shouldPumpOn) { | |
digitalWrite(PUMP_RELAY_PIN, LOW); | |
} else { | |
digitalWrite(PUMP_RELAY_PIN, HIGH); | |
} | |
if (shouldLampOn) { | |
digitalWrite(LAMP_RELAY_PIN, LOW); | |
} else { | |
digitalWrite(LAMP_RELAY_PIN, HIGH); | |
} | |
// SEND DATA TO THINGSPEAK | |
ThingSpeak.setField(TS_AIR_TEMPERATURE_FIELD, airTemperature); | |
ThingSpeak.setField(TS_AIR_HUMIDITY_FIELD, airHumidity); | |
ThingSpeak.setField(TS_SOIL_MOISTURE_FIELD, soilMoisture); | |
ThingSpeak.setField(TS_PUMP_ON_FIELD, shouldPumpOn); | |
ThingSpeak.setField(TS_LAMP_ON_FIELD, shouldLampOn); | |
int responseCode = ThingSpeak.writeFields(TS_CHANNEL_NUMBER, TS_WRITE_API_KEY); | |
// LOG TO SERIAL | |
Serial.println("---"); | |
Serial.print("Temperature (C): "); | |
Serial.print(airTemperature); | |
Serial.print(" | Air Humidity (%): "); | |
Serial.print(airHumidity); | |
Serial.print(" | Soil Moisture (%): "); | |
Serial.println(soilMoisture); | |
Serial.print("shouldPumpOn: "); | |
Serial.print(shouldPumpOn); | |
Serial.print(" | shouldLampOn: "); | |
Serial.println(shouldLampOn); | |
if (responseCode == 200) { | |
Serial.println("SUBMITTED TO THINGSPEAK"); | |
} | |
Serial.println("---"); | |
// DELAY FOR NEXT LOOP | |
delay(LOOP_DELAY); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment