#include <DHTesp.h>
#include <WiFi.h>
#include <ThingSpeak.h>
// DHT declaration
DHTesp dhtSensor;
TempAndHumidity data;
const int dhtpin = 15;
// Ultrasonic declaration
const int echo = 4;
const int trig = 2;
float distance;
float duration;
// PIR declaration
const int pirpin = 14;
// WiFi declaration
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
WiFiClient client;
// Thingspeak declaration
unsigned long myChannelNumber = 2264423;
const char *myWriteAPIKey = "H4YOHLR8HLDIOR2Y";
int statusCode;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
// Ultrasonic setup
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
// DHT setup
dhtSensor.setup(dhtpin, DHTesp::DHT22);
// PIR setup
pinMode(pirpin, INPUT_PULLUP);
// WiFi setup
WiFi.mode(WIFI_STA);
// Thingspeak setup
ThingSpeak.begin(client);
delay(1000);
}
// Ultrasonic function
float getdistance() {
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
duration = pulseIn(echo, HIGH);
return duration * 0.034 / 2;
}
void loop() {
// Check PIR sensor
int motion = digitalRead(pirpin);
Serial.println(motion == HIGH ? "Motion detected!" : "Motion not detected!");
// WiFi connection
if (WiFi.status() != WL_CONNECTED) {
Serial.print("Attempting to connect...");
while (WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, pass);
Serial.print(".");
delay(5000);
}
Serial.println("\nConnected");
}
// Read DHT sensor
data = dhtSensor.getTempAndHumidity();
// Read distance
distance = getdistance();
Serial.println("Humi:" + String(data.temperature));
Serial.println("Temp:" + String(data.humidity));
Serial.println("Distance:" + String(distance));
Serial.println("<-------------------->");
// Data uploading to ThingSpeak
ThingSpeak.setField(1, data.temperature);
ThingSpeak.setField(2, data.humidity);
ThingSpeak.setField(3, distance);
ThingSpeak.setField(4, motion);
statusCode = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (statusCode == 200) {
Serial.println("Channel update successful");
} else {
Serial.println("Problem Writing data: HTTP error code:" + String(statusCode));
}
delay(15000);
}