#include <LiquidCrystal_I2C.h>
#include <DHTesp.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#define LED_PIN 32
#define PIR_PIN 26
#define DHT_PIN 18
String serverURL = "https://postman-echo.com/post";
DHTesp dhtSensor;
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
Serial.begin(115200);
Serial.println("Sensor is collecting data...");
// config LED and PIR Sensor output
pinMode(LED_PIN, OUTPUT);
pinMode(PIR_PIN, OUTPUT);
// setup sensor
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
// setup lcd screen
lcd.init();
lcd.backlight();
// config wifi
Serial.println(("Connecting to WiFi..."));
WiFi.begin("Wokwi-GUEST", "", 6);
if (WiFi.status() != WL_CONNECTED) {
Serial.println(".");
delay(100);
}
Serial.println("Connected!");
}
unsigned long sensor_timer = 0;
unsigned long get_timer = 0;
void loop() {
float dtemp, dhum;
String shum, stemp;
// millis() instead of delay() for non-blocking
if (millis() > sensor_timer + 2000) {
sensor_timer = millis(); // set new update interval
TempAndHumidity data = dhtSensor.getTempAndHumidity();
dtemp = data.temperature;
dhum = data.humidity;
stemp = String(dtemp);
shum = String(dhum);
// print and log temperature
lcd.setCursor(0, 0);
lcd.print("TEMP: " + stemp + "C");
Serial.println("Temperature: " + stemp);
// print and log humidity
lcd.setCursor(0, 1);
lcd.print("HUM: " + shum + "%");
Serial.println("Humidity: " + shum);
Serial.println("---");
// packing json object
DynamicJsonDocument doc(1024);
String jsonstr;
JsonObject root = doc.to<JsonObject>();
root["temperature"] = stemp;
root["humidity"] = shum;
serializeJson(doc, jsonstr);
String serverRequest = jsonstr;
if (millis() > get_timer + 10000) { // send request every 10 seconds
get_timer = millis();
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(serverURL); // Send HTTP POST request
http.addHeader("Content-Type", "application/form-json");
int httpResponseCode = http.POST(serverRequest);
if (httpResponseCode > 0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
String payload = http.getString();
Serial.println(payload);
} else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
http.end();
} else {
Serial.println("WiFi Disconnected");
}
}
}
// motion sensor
int pir_val = digitalRead(PIR_PIN);
if (pir_val == 1) {
// log if detect motion
Serial.println("Motion Detected");
digitalWrite(LED_PIN, HIGH);
delay(50);
digitalWrite(LED_PIN, LOW);
}
}