#define BLYNK_TEMPLATE_ID "TMPL3cBID8qbJ"
#define BLYNK_TEMPLATE_NAME "Servomotor"
#define BLYNK_AUTH_TOKEN "Qj6bPKwkNHbuIEtCe6ZsUnuVQuBQmfEQ"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <ESP32Servo.h>
// WiFi credentials
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Pin Definitions
#define PIN_TRIG 19
#define PIN_ECHO 4
const int servoPin = 5;
Servo servo;
// Blynk control variables
int mode = 0; // 0 = Auto (Ultrasonic), 1 = Manual (Slider)
int servoAngle = 0; // Angle from slider
// Blynk Virtual Pin V0 - Slider for angle
BLYNK_WRITE(V0) {
servoAngle = param.asInt();
}
// Blynk Virtual Pin V1 - Switch for mode
BLYNK_WRITE(V1) {
mode = param.asInt();
Serial.print("Mode: ");
Serial.println(mode ? "Manual" : "Automatic");
}
void setup() {
Serial.begin(115200);
// Connect to WiFi
Serial.print("Connecting to WiFi");
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected ✅");
// Connect to Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
// Pin setup
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
servo.attach(servoPin, 500, 2400); // for ESP32
}
void loop() {
Blynk.run();
if (mode == 1) {
// Manual mode
servo.write(servoAngle);
Serial.print("Manual Angle from Blynk: ");
Serial.println(servoAngle);
} else {
// Automatic mode using ultrasonic sensor
digitalWrite(PIN_TRIG, LOW);
delayMicroseconds(2);
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
long duration = pulseIn(PIN_ECHO, HIGH, 30000); // timeout: 30ms
float distance_cm = (duration > 0) ? duration * 0.0343 / 2 : 0;
int angle = map(constrain(distance_cm, 0, 400), 0, 400, 0, 180);
servo.write(angle);
Serial.print("Auto Distance: ");
Serial.print(distance_cm);
Serial.print(" cm → Servo Angle: ");
Serial.println(angle);
}
delay(500);
}