#include <WiFi.h> // Include WiFi library to connect to the internet
#include <WiFiClient.h> // Include WiFi client library for communication
#include <ThingSpeak.h> // Include ThingSpeak library to send data to the cloud
// Wi-Fi credentials (network name and password)
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// ThingSpeak channel details
unsigned long myChannelNumber = 2914414; //channel number
const char* myWriteAPIKey = "7D4F9BCU4N6V41PT"; //API key
WiFiClient client; // Create a WiFi client for ThingSpeak
// Define pins for the ultrasonic sensor
const int trigPin = 18;
const int echoPin = 19;
// Variables for distance calculation
long duration;
float cm;
void setup() {
Serial.begin(115200); // Start the serial monitor for debugging output
pinMode(trigPin, OUTPUT); // Set trig pin as output
pinMode(echoPin, INPUT); // Set echo pin as input
// Connect to Wi-Fi network
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("\nConnected to WiFi");
ThingSpeak.begin(client); // Initialize ThingSpeak connection
}
void loop() {
// Send an ultrasonic pulse
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Measure how long it takes for the echo to return
duration = pulseIn(echoPin, HIGH);
// Convert time to distance in cm
cm = duration * 0.034 / 2;
// Print the measured distance (water level) to the serial monitor
Serial.print("Water Level (cm): ");
Serial.println(cm);
// Send the water level data to ThingSpeak (Field 1)
ThingSpeak.setField(1, cm);
int response = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
// Check if data was sent successfully
if (response == 200) {
Serial.println("✅ Data sent to ThingSpeak!");
} else {
Serial.print("❌ Error sending data. Code: ");
Serial.println(response);
}
delay(20000); // Wait for 20 seconds before measuring and sending again
}