#include <WiFi.h>
#include <HTTPClient.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const String url_on = "https://www.virtualsmarthome.xyz/url_routine_trigger/activate.php?trigger=7ee844d4-10e5-430a-ba6b-8a9283f08659&token=3b6691f8-8457-42cc-843a-eba368071f44&response=json";
const String url_off = "https://www.virtualsmarthome.xyz/url_routine_trigger/activate.php?trigger=491016c8-dab8-4d41-87de-1a3ce752393a&token=7a00fed8-5963-48d7-8e22-a4df558c9768&response=json";
#define ECHO_PIN 12
#define TRIG_PIN 13
#define LED_PIN 2
bool lastMotionState = false;
unsigned long lastChange = 0;
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print("OK! IP=");
Serial.println(WiFi.localIP());
pinMode(LED_PIN, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void loop() {
float distance = readDistanceCM();
bool isNearby=lastMotionState;
if (distance < 98.0)
isNearby = true;
else
if (distance > 102.0)
isNearby = false;
unsigned long actualMillis = millis();
if (actualMillis - lastChange < 250) return; // debounce motionsensor state transitions
if (isNearby != lastMotionState) { // if state has changed
digitalWrite(LED_PIN, isNearby);
Serial.printf("Presence %s\r\n", isNearby?"detected":"not detected");
lastMotionState = isNearby; // update last known state
lastChange = actualMillis;
HTTPClient http;
if (isNearby)
http.begin(url_on);
else
http.begin(url_off); // update debounce time
int httpResponseCode = http.GET();
}
delay(100);
}