#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>
#include <DHT.h>
// Network credentials
const char* ssid = "BRISSIE 2.4";
const char* password = "cancun2018";
// Server endpoint (Ngrok URL)
String baseUrl = "https://f001-177-106-246-55.ngrok-free.app/api/v1/infos";
WiFiClient client;
HTTPClient http;
// Sensor and Relay setup
#define DHTPIN_SOIL D2 // DHT22 pin for soil data (Update as per your connection)
#define DHTPIN_AIR D5 // DHT11 pin for air data (Update as per your connection)
#define DHTTYPE_SOIL DHT22 // DHT22 for soil
#define DHTTYPE_AIR DHT11 // DHT11 for air
DHT dhtSoil(DHTPIN_SOIL, DHTTYPE_SOIL);
DHT dhtAir(DHTPIN_AIR, DHTTYPE_AIR);
#define RELAY_PIN D1 // Relay pin (Update as per your connection)
#define LED_CONTROL_PIN D6 // Pin for controlling the LED (pump simulation) (Update as per your connection)
bool isLedOn = false; // LED state
unsigned long previousMillis = 0;
const long interval = 10000; // Interval at which to send data (10 seconds)
void setup() {
Serial.begin(115200);
dhtSoil.begin();
dhtAir.begin();
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // Start with the relay off
pinMode(LED_CONTROL_PIN, OUTPUT);
digitalWrite(LED_CONTROL_PIN, isLedOn ? LOW : HIGH); // Set initial LED state
initWiFi();
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
// Read temperature and humidity from the sensors
float airTemperature = dhtAir.readTemperature();
float airHumidity = dhtAir.readHumidity();
float soilTemperature = dhtSoil.readTemperature();
float soilHumidity = dhtSoil.readHumidity();
if (isnan(airTemperature) || isnan(airHumidity) || isnan(soilTemperature) || isnan(soilHumidity)) {
Serial.println("Failed to read from sensors!");
return;
}
StaticJsonDocument<300> jsonDocument;
jsonDocument["airTemperature"] = airTemperature;
jsonDocument["airHumidity"] = airHumidity;
jsonDocument["soilTemperature"] = soilTemperature;
jsonDocument["soilHumidity"] = soilHumidity;
String jsonString;
serializeJson(jsonDocument, jsonString);
sendDataToServer(jsonString);
// Update LED state based on your conditions
if (soilHumidity < 50) {
digitalWrite(LED_CONTROL_PIN, LOW);
isLedOn = true;
} else if (soilHumidity > 70) {
digitalWrite(LED_CONTROL_PIN, HIGH);
isLedOn = false;
}
}
}
void initWiFi() {
delay(10);
Serial.println("Connecting to: " + String(ssid));
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println();
Serial.print("Connected to Network " + String(ssid) + " | IP Address: ");
Serial.println(WiFi.localIP());
}
void sendDataToServer(const String & data) {
http.begin(client, baseUrl);
http.addHeader("Content-Type", "application/json");
int httpCode = http.POST(data);
if (httpCode > 0) {
Serial.printf("HTTP Response code: %d\n", httpCode);
if(httpCode == HTTP_CODE_OK) {
String response = http.getString();
Serial.println("Server Response: " + response);
}
} else {
Serial.printf("HTTP Request failed: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}