#include "DHT.h"
#include <WiFi.h>
#include <ThingSpeak.h>
#define DHTPIN 4 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22 // DHT 11
#define PIR_PIN 19 // GPIO19 pin connected to OUTPUT pin of the PIR sensor
DHT dht(DHTPIN, DHTTYPE);
int pinStateCurrent = LOW; // current state of pin
int pinStatePrevious = LOW; // previous state of pin
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char *thingSpeakApiKey = "APWMC9JZ10A3IKUV";
const unsigned long channelId = 1;
WiFiClient client;
void setup() {
Serial.begin(9600);
Serial.println(F("DHT11 and PIR test!"));
dht.begin();
pinMode(PIR_PIN, INPUT);
connectToWiFi();
ThingSpeak.begin(client);
}
void loop() {
// DHT11 sensor readings
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT11 sensor!"));
} else {
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.print(t);
Serial.print(F("°C"));
// PIR sensor readings
pinStatePrevious = pinStateCurrent;
pinStateCurrent = digitalRead(PIR_PIN);
if (pinStatePrevious == LOW && pinStateCurrent == HIGH) {
Serial.println(F(" Motion detected!"));
sendDataToThingSpeak(t, h, 1); // 1 indicates motion detected
} else if (pinStatePrevious == HIGH && pinStateCurrent == LOW) {
Serial.println(F(" Motion stopped!"));
sendDataToThingSpeak(t, h, 0); // 0 indicates no motion
} else {
Serial.println(); // Print a newline for better readability
}
}
delay(2000); // Adjust delay as needed
}
void sendDataToThingSpeak(float temperature, float humidity, int motionStatus) {
ThingSpeak.setField(1, temperature);
ThingSpeak.setField(2, humidity);
ThingSpeak.setField(3, motionStatus);
int status = ThingSpeak.writeFields(channelId, thingSpeakApiKey);
if (status == 200) {
Serial.println(F("Data sent to ThingSpeak successfully!"));
} else {
Serial.print(F("Error sending data to ThingSpeak. Status code: "));
Serial.println(status);
}
}
void connectToWiFi() {
Serial.print(F("Connecting to WiFi..."));
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(F("."));
}
Serial.println(F("\nConnected to WiFi"));
}