PyPCF8523/examples/simple_test.py
2025-11-10 18:05:25 +01:00

76 lines
2.3 KiB
Python

#!/usr/bin/env python3
"""Simple test example for PyPCF8523 RTC driver.
This example demonstrates basic usage of the PCF8523 RTC:
- Reading the current time
- Setting the time
- Checking power loss status
Hardware setup:
- Connect PCF8523 to Raspberry Pi I2C bus 1
- VCC -> 3.3V, GND -> GND, SDA -> GPIO2, SCL -> GPIO3
"""
import time
from pypcf8523 import PCF8523
# Days of the week for display
DAYS = ("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")
def main():
# Initialize the RTC on I2C bus 1
print("Initializing PCF8523 RTC...")
rtc = PCF8523(i2c_bus=1)
# Check if the RTC lost power
if rtc.lost_power:
print("WARNING: RTC lost power. Setting time to system time...")
# Set the RTC to the current system time
# In a real application, you might want to sync with NTP first
current_time = time.localtime()
rtc.datetime = current_time
print(f"Time set to: {time.strftime('%Y-%m-%d %H:%M:%S', current_time)}")
else:
print("RTC power OK")
# To manually set the time, uncomment and modify this section:
# ================================================================
# import time
# # Set to a specific time: 2025-11-09 15:30:00 (Saturday)
# set_time = time.struct_time((2025, 11, 9, 15, 30, 0, 5, -1, -1))
# rtc.datetime = set_time
# print(f"Time manually set to: {time.strftime('%Y-%m-%d %H:%M:%S', set_time)}")
# ================================================================
print("\nReading time from RTC (Press Ctrl+C to stop):")
print("-" * 50)
try:
while True:
# Read the current time from the RTC
current = rtc.datetime
# Format and display the time
day_name = DAYS[current.tm_wday]
time_str = (f"{day_name} "
f"{current.tm_year}/{current.tm_mon:02d}/{current.tm_mday:02d} "
f"{current.tm_hour:02d}:{current.tm_min:02d}:{current.tm_sec:02d}")
print(time_str)
# Wait one second before next read
time.sleep(1.0)
except KeyboardInterrupt:
print("\n\nTest stopped by user")
finally:
# Clean up
rtc.close()
print("RTC connection closed")
if __name__ == "__main__":
main()