#include <DHT.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <MPU6050_tockn.h>
#include <WiFi.h> // Include the WiFi library for ESP32
#include "ThingSpeak.h"
// Wi-Fi credentials
const char* ssid = "Wokwi-GUEST"; // Replace with your Wi-Fi network SSID
const char* password = ""; // Replace with your Wi-Fi network password
// ThingSpeak settings
const unsigned long channelID = 2546601; // Replace with your ThingSpeak Channel ID
const char* apiKey = "8OJ0YPPZ8IZE7LFT"; // Replace with your ThingSpeak Write API Key
#define DHTPIN 2 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define ONE_WIRE_BUS 4 // Data pin of DS18B20 sensor (Use a GPIO pin that supports OneWire)
#define PIR_PIN 5 // Digital pin connected to the PIR motion sensor
#define LDR_ANALOG_PIN 34 // Analog pin connected to the LDR sensor
#define LDR_DIGITAL_PIN 16 // Digital pin connected to Pin 2 (D0) of the LDR sensor
DHT dht(DHTPIN, DHTTYPE);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
MPU6050 mpu6050(Wire);
WiFiClient client; // Create a WiFiClient object
void setup() {
Serial.begin(9600);
dht.begin();
sensors.begin();
pinMode(PIR_PIN, INPUT);
pinMode(LDR_DIGITAL_PIN, INPUT); // Set LDR digital pin as input
// Connect to Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
// Print Wi-Fi network information
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// Initialize ThingSpeak
ThingSpeak.begin(client);
}
void loop() {
delay(2000); // Wait for 2 seconds between measurements
// Read temperature and humidity from DHT22
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Read temperature from DS18B20
sensors.requestTemperatures(); // Send the command to get temperature readings
float temperatureDS18B20 = sensors.getTempCByIndex(0); // Get temperature in Celsius
// Read motion status from PIR sensor
int motionStatus = digitalRead(PIR_PIN);
// Read light intensity from LDR sensor (analog pin)
int lightIntensity = analogRead(LDR_ANALOG_PIN);
// Read digital output from LDR sensor
int digitalOutput = digitalRead(LDR_DIGITAL_PIN);
// Read accelerometer data from MPU6050 sensor
mpu6050.update();
float accelerometerX = mpu6050.getAccX();
float accelerometerY = mpu6050.getAccY();
float accelerometerZ = mpu6050.getAccZ();
// Update ThingSpeak with sensor data
ThingSpeak.writeField(channelID, 1, temperature, apiKey);
ThingSpeak.writeField(channelID, 2, humidity, apiKey);
ThingSpeak.writeField(channelID, 3, temperatureDS18B20, apiKey);
ThingSpeak.writeField(channelID, 4, motionStatus, apiKey);
ThingSpeak.writeField(channelID, 5, lightIntensity, apiKey);
ThingSpeak.writeField(channelID, 6, digitalOutput, apiKey);
ThingSpeak.writeField(channelID, 7, accelerometerX, apiKey);
ThingSpeak.writeField(channelID, 8, accelerometerY, apiKey);
ThingSpeak.writeField(channelID, 9, accelerometerZ, apiKey);
// Print sensor data
Serial.print("DHT22 - Humidity: ");
Serial.print(humidity);
Serial.print(" %\tTemperature: ");
Serial.print(temperature);
Serial.println(" *C");
Serial.print("DS18B20 - Temperature: ");
Serial.print(temperatureDS18B20);
Serial.println(" *C");
Serial.print("PIR Motion Sensor - Motion Detected: ");
Serial.println(motionStatus == HIGH ? "Yes" : "No");
Serial.print("LDR Sensor (Analog) - Light Intensity: ");
Serial.println(lightIntensity);
Serial.print("LDR Sensor (Digital) - Output: ");
Serial.println(digitalOutput);
Serial.print("MPU6050 - Accelerometer (X,Y,Z): ");
Serial.print(accelerometerX);
Serial.print(", ");
Serial.print(accelerometerY);
Serial.print(", ");
Serial.println(accelerometerZ);
// Wait for a few seconds before sending the next update
delay(15000); // 15 seconds delay as per ThingSpeak rate limits
}