from machine import I2C, Pin, PWM
from ds1307 import DS1307 # Make sure this library is uploaded to your ESP32
import time
# Initialize I2C for RTC
i2c = I2C(1, scl=Pin(22), sda=Pin(21))
rtc = DS1307(i2c)
# Initialize Servo
servo = PWM(Pin(26), freq=50) # Servo is connected to Pin 5
def set_servo_angle(angle):
"""Set servo angle (0 to 180 degrees)."""
duty = int((angle / 180) * 102 + 26) # Map angle to duty cycle (26 to 128)
servo.duty(duty)
# Set RTC date and time (if needed)
rtc.datetime((2024, 11, 19, 0, 15, 30, 0, 0)) # (Year, Month, Day, Weekday, Hour, Min, Sec, Subsec)
print("RTC Initialized. Current Time:", rtc.datetime())
# Main Loop
while True:
current_time = rtc.datetime()
seconds = current_time[6] # Get seconds from RTC datetime
print(f"Current Time: {current_time}")
if seconds % 5 == 0: # Activate servo every 5 seconds
print("Activating servo...")
set_servo_angle(90) # Move servo to 90 degrees
time.sleep(1) # Keep it active for 1 second
set_servo_angle(0) # Move servo back to 0 degrees
time.sleep(0.5) # Check time every 0.5 seconds