#include <WiFi.h>
#include <DHTesp.h>
#include <ThingSpeak.h>
WiFiClient client; // WiFi client for ThingSpeak
long myChannelNumber = 2654388; // ThingSpeak channel number
const char *myWriteAPIKey = "D68LUWV0AU05DZ1V"; // ThingSpeak write API key
char ssid[] = "Wokwi-GUEST"; // WiFi SSID
char pass[] = ""; // WiFi password
DHTesp dhtSensor; // DHT sensor object
TempAndHumidity data;
int soil = 34; // Soil moisture sensor pin
void setup() {
ThingSpeak.begin(client); // Initialize ThingSpeak
Serial.begin(115200);
// Initialize DHT sensor
dhtSensor.setup(21, DHTesp::DHT22);
pinMode(soil, INPUT);
// Connect to WiFi
WiFi.mode(WIFI_STA);
connectToWiFi();
}
void loop() {
// Check WiFi connection status
if (WiFi.status() != WL_CONNECTED) {
connectToWiFi(); // Reconnect if WiFi is disconnected
}
// Read soil moisture
int soilMoistureValue = analogRead(soil);
float soilMoisturePercent = map(soilMoistureValue, 0, 4095, 0, 100);
// Read temperature and humidity
data = dhtSensor.getTempAndHumidity();
int humidity = int(data.humidity); // Convert float to integer for sending to ThingSpeak
int temperature = int(data.temperature);
// Display sensor values on Serial Monitor
Serial.print("Soil Moisture: ");
Serial.print(soilMoisturePercent);
Serial.println("%");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println("°C");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println("%");
// Send data to ThingSpeak
ThingSpeak.setField(1, humidity); // Field 1: Humidity
ThingSpeak.setField(2, temperature); // Field 2: Temperature
ThingSpeak.setField(3, soilMoisturePercent); // Field 3: Soil Moisture
// Write fields to ThingSpeak
int statusCode = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
// Check for successful channel update
if (statusCode == 200) {
Serial.println("Channel update successful.");
} else {
Serial.print("Problem Writing data. HTTP error code: ");
Serial.println(statusCode);
}
delay(20000); // Wait for 20 seconds before the next reading
}
void connectToWiFi() {
Serial.println("Connecting to WiFi...");
WiFi.begin(ssid, pass); // Start WiFi connection
while (WiFi.status() != WL_CONNECTED) {
delay(5000);
Serial.print(".");
}
Serial.println("\nConnected to WiFi");
}