#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h> // Make sure to install the ArduinoJson library
const int relayPin = 17; // Relay control pin
const int buttonPin = 22; // Push button pin
const int enablePin = 21; // Enable button pin
const int triggerPin = 18; // Trigger pin for ultrasonic sensor
const int echoPin = 5; // Echo pin for ultrasonic sensor
bool relayState = false; // Initial state of the relay
unsigned long relayOnDuration = 5000; // Duration to keep the relay ON (in milliseconds)
unsigned long relayOnStartTime = 0; // Variable to store the time when the relay was turned ON
bool relayTimerActive = false; // Flag to check if the relay timer is active
void setup() {
Serial.begin(9600);
// Connect to Wi-Fi
WiFi.begin("Wokwi-GUEST", ""); // Replace with your Wi-Fi credentials
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
pinMode(relayPin, OUTPUT); // Set relay pin as OUTPUT
pinMode(buttonPin, INPUT_PULLUP); // Set button pin as INPUT with internal pull-up
pinMode(enablePin, INPUT_PULLUP); // Set enable pin as INPUT with internal pull-up
pinMode(triggerPin, OUTPUT); // Set trigger pin as OUTPUT
pinMode(echoPin, INPUT); // Set echo pin as INPUT
digitalWrite(relayPin, relayState ? HIGH : LOW); // Initialize relay state
}
void sendRelayStateToServer(bool state) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin("https://emslte.arkaautomaations.com/teltonika_test.php"); // Replace with your server URL
http.addHeader("Content-Type", "application/json");
// Create a JSON object
StaticJsonDocument<200> jsonDoc;
jsonDoc["relayState"] = state ? "ON" : "OFF";
// Serialize JSON to string
String jsonString;
serializeJson(jsonDoc, jsonString);
// Send HTTP POST request
int httpResponseCode = http.POST(jsonString);
if (httpResponseCode > 0) {
String response = http.getString();
Serial.println("Response: " + response);
} else {
Serial.print("Error on sending POST: ");
Serial.println(httpResponseCode);
}
http.end(); // Free resources
} else {
Serial.println("WiFi not connected");
}
}
float readUltrasonicDistance() {
// Trigger the ultrasonic sensor
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
// Read the echo pin
long duration = pulseIn(echoPin, HIGH);
float distance = (duration * 0.0343) / 2; // Convert to cm
return distance;
}
void controlRelayBasedOnDistance(float distance) {
const float minHeight = 80.0; // Minimum height in cm
const float maxHeight = 350.0; // Maximum height in cm
if (distance < minHeight) {
if (!relayState) {
relayState = true; // Set relay state to ON
digitalWrite(relayPin, HIGH); // Update relay state
Serial.println("Relay is now: ON (Distance below minimum)");
sendRelayStateToServer(relayState); // Send state to server
}
} else if (distance > maxHeight) {
if (relayState) {
relayState = false; // Set relay state to OFF
digitalWrite(relayPin, LOW); // Update relay state
Serial.println("Relay is now: OFF (Distance above maximum)");
sendRelayStateToServer(relayState); // Send state to server
}
}
}
void loop() {
static bool lastButtonState = HIGH; // Last button state
bool currentButtonState = digitalRead(buttonPin); // Read current button state
// Read distance from ultrasonic sensor
float distance = readUltrasonicDistance();
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(10000);
// Control relay based on distance
controlRelayBasedOnDistance(distance);
}
//