#include <Arduino.h>
#include <WiFi.h>
#include "DHT.h"
// ------------------- Pin Definitions -------------------
#define DHTPIN 4 // DHT11 data pin
#define DHTTYPE DHT11
#define LDR_PIN 34 // LDR analog pin
#define LED_PIN 10 // Optional indicator
// ------------------- Wi-Fi / ThingSpeak -------------------
String SSID = "Wokwi-GUEST";
String PASSWORD = "";
String SERVER_IP = "api.thingspeak.com";
String API_KEY = "DJS2GKXB9K02BWZG";
// ------------------- Globals -------------------
DHT dht(DHTPIN, DHTTYPE);
WiFiServer server(80);
float g_temperature = 0;
float g_humidity = 0;
int g_LDR = 0;
// ------------------- Setup -------------------
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
dht.begin();
setupWiFi();
server.begin(); // Optional web server
}
// ------------------- Main Loop -------------------
void loop() {
digitalWrite(LED_PIN, LOW); // Indicate reading
// Read DHT11
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("DHT read error!");
temperature = 0;
humidity = 0;
}
// Read LDR
int ldrValue = analogRead(LDR_PIN);
// Save globals
g_temperature = temperature;
g_humidity = humidity;
g_LDR = ldrValue;
// Send to ThingSpeak
sendToThingSpeak(temperature, humidity, ldrValue);
digitalWrite(LED_PIN, HIGH);
// Handle optional web server
handleWebServer();
delay(5000); // Adjust reading interval
}
// ------------------- Wi-Fi Setup -------------------
void setupWiFi() {
Serial.print("Connecting to Wi-Fi...");
WiFi.begin(SSID.c_str(), PASSWORD.c_str());
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWi-Fi connected!");
Serial.print("ESP32 IP Address: "); Serial.println(WiFi.localIP());
}
// ------------------- ThingSpeak -------------------
void sendToThingSpeak(float temp, float hum, int ldr) {
WiFiClient client;
if (!client.connect(SERVER_IP.c_str(), 80)) {
Serial.println("Connection to ThingSpeak failed");
return;
}
String url = "/update?api_key=" + API_KEY;
url += "&field1=" + String(temp, 1);
url += "&field2=" + String(hum, 1);
url += "&field3=" + String(ldr);
client.print("GET " + url + " HTTP/1.1\r\nHost: " + SERVER_IP + "\r\nConnection: close\r\n\r\n");
Serial.println("Data sent to ThingSpeak:");
Serial.println(url);
client.stop();
}
// ------------------- Web Server -------------------
void handleWebServer() {
WiFiClient client = server.available();
if (!client) return;
String request = client.readStringUntil('\r');
client.flush();
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<h1>ESP32 Sensor Data</h1>");
client.print("Temperature: "); client.print(g_temperature); client.println(" °C<br>");
client.print("Humidity: "); client.print(g_humidity); client.println(" %<br>");
client.print("LDR Value: "); client.print(g_LDR); client.println("<br>");
client.println("</html>");
client.stop();
}