#include <DHTesp.h>
#include <ThingSpeak.h>
#include <WiFi.h>
WiFiClient client;
long myChannelNumber = 2629584;
const char * myWriteAPIKey = "5ZNFTPSKNSMDPNL1";
int statusCode;
char ssid[] = "Abc";
char pass[] = "123456789";
DHTesp dht;
TempAndHumidity data;
int r = 25;
int o = 26;
int g = 27;
int trig = 17;
int echo = 16;
int buzzer = 4;
void setup() {
ThingSpeak.begin(client);
pinMode(r, OUTPUT);
pinMode(o, OUTPUT);
pinMode(g, OUTPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(buzzer, OUTPUT);
Serial.begin(115200);
Serial.println("Hello, ESP32!");
dht.setup(18, DHTesp::DHT22);
WiFi.mode(WIFI_STA);
connectToWiFi();
}
void loop() {
if (WiFi.status() != WL_CONNECTED) {
connectToWiFi();
}
data = dht.getTempAndHumidity();
float distanceValue = distance();
ThingSpeak.setField(1, data.temperature);
ThingSpeak.setField(2, data.humidity);
ThingSpeak.setField(3, distanceValue);
statusCode = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (statusCode == 200) {
Serial.println("Channel update successful.");
} else {
Serial.print("Problem Writing data. HTTP error code: ");
Serial.println(statusCode);
}
Serial.print("Temperature: ");
Serial.println(data.temperature);
Serial.print("Humidity: ");
Serial.println(data.humidity);
Serial.print("Distance: ");
Serial.println(distanceValue);
delay(10000); // Adjusted delay to reduce frequency of updates
}
void connectToWiFi() {
Serial.println("Attempting to connect to WiFi...");
WiFi.begin(ssid, pass);
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 30) { // Limit attempts to prevent infinite loop
delay(500);
Serial.print(".");
attempts++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("Connected to WiFi!");
} else {
Serial.println("Failed to connect to WiFi.");
}
}
int distance() {
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
float duration = pulseIn(echo, HIGH);
float distance = (duration * 0.0344) / 2; // 0.0344 cm/us is the speed of sound divided by 2
return distance;
}