#include <WiFi.h>
#include <ThingSpeak.h>
// Pin configuration
const int trigPin = 5;
const int echoPin = 18;
const int ledPin = 15;
// Wi-Fi credentials
const char* ssid = "Wokwi-GUEST"; // <- Set this to your hotspot name
const char* pass = ""; // <- Set this to your hotspot password
// ThingSpeak settings
WiFiClient client;
unsigned long myChannelNumber = 3038309;
const char* myWriteAPIKey = "7OGOA0K820DZPV2R";
float distance = 0.0;
void connectToWiFi() {
Serial.print("Connecting to Wi-Fi");
WiFi.begin(ssid, pass);
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 20) {
delay(500);
Serial.print(".");
attempts++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\n✅ Wi-Fi Connected");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
} else {
Serial.println("\n❌ Wi-Fi Connection Failed. Restarting...");
delay(3000);
ESP.restart();
}
}
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
WiFi.mode(WIFI_STA);
connectToWiFi();
ThingSpeak.begin(client);
}
void loop() {
// Measure distance
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
Serial.print("📏 Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Control LED
if (distance < 100) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
// Upload to ThingSpeak
if (WiFi.status() == WL_CONNECTED) {
ThingSpeak.setField(1, distance);
int statusCode = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (statusCode == 200) {
Serial.println("✅ ThingSpeak Update Successful");
} else {
Serial.print("⚠️ ThingSpeak Update Failed. Code: ");
Serial.println(statusCode);
}
} else {
Serial.println("⚠️ Wi-Fi not connected. Skipping ThingSpeak update.");
}
delay(20000);
}