Za pomocą DS1307 RTC z Raspberry Pi

Using the DS1307 RTC with the Raspberry Pi

Moduł Zegar w czasie rzeczywistym DS1307 (RTC) Pozwala Raspberry Pi śledzić czas, nawet gdy jest wyłączony. Ten przewodnik poprowadzi Cię przez konfigurowanie Moduł RTC DS1307 z Raspberry Pi za pomocą Protokół I2C.


Czego będziesz potrzebować

  1. Raspberry Pi (Każdy model z obsługą GPIO i I2C, np. PI 3, PI 4)
  2. Moduł RTC DS1307
  3. Bateria CR2032 (do utrzymania czasu po wyłączeniu)
  4. Druty chleba i skoczków
  5. Zainstalowany Python na Raspberry Pi

Krok 1: Okablowanie DS1307 do Raspberry Pi

. DS1307 komunikuje się przez I2C, więc łączymy go z pinami I2C Raspberry Pi.

Połączenia (tryb I2C)

DS1307 PIN Pin Raspberry Pi
VCC 3,3 V lub 5 V (pin 1 lub 2)
GND Uziemienie (pin 6)
SDA SDA (pin 3, GPIO2)
Scl SCL (pin 5, GPIO3)

Krok 2: Włącz I2C na Raspberry Pi

  1. Otwórz narzędzie konfiguracyjne Raspberry Pi:
    sudo raspi-config
    
  2. Przejść do Opcje interfejsu> i2c i włącz to.
  3. Uruchom ponownie Raspberry Pi:
    sudo reboot
    
  4. Sprawdź, czy DS1307 jest wykrywany W autobusie I2C:
    sudo i2cdetect -y 1
    
    . DS1307 powinien pojawić się pod adresem 0x68.

Krok 3: Zainstaluj wymagane biblioteki

  1. Zaktualizuj listę pakietów Raspberry Pi:
    sudo apt update && sudo apt upgrade -y
    
  2. Zainstaluj wymagane narzędzia I2C i biblioteki Python:
    sudo apt install -y i2c-tools python3-smbus python3-pip
    pip3 install adafruit-circuitpython-ds1307
    

Krok 4: Czas ustawienia i czytania na DS1307

Kod Pythona, aby ustawić datę i godzinę

Uruchom ten skrypt raz, aby ustawić zegar RTC.

import time
import board
import busio
import adafruit_ds1307

# Initialize I2C bus and DS1307
i2c = busio.I2C(board.SCL, board.SDA)
rtc = adafruit_ds1307.DS1307(i2c)

# Set the date and time (Year, Month, Day, Hour, Minute, Second, Weekday, DST)
rtc.datetime = time.struct_time((2025, 1, 1, 12, 0, 0, 0, -1, -1))

print("RTC Date and Time Set!")

Kod Pythona do odczytania czasu z DS1307

Po ustawieniu czasu użyj tego skryptu, aby odczytać bieżącą datę i godzinę.

import time
import board
import busio
import adafruit_ds1307

# Initialize I2C bus and DS1307
i2c = busio.I2C(board.SCL, board.SDA)
rtc = adafruit_ds1307.DS1307(i2c)

while True:
    current_time = rtc.datetime
    print(f"Date: {current_time.tm_year}-{current_time.tm_mon:02d}-{current_time.tm_mday:02d}")
    print(f"Time: {current_time.tm_hour:02d}:{current_time.tm_min:02d}:{current_time.tm_sec:02d}")
    time.sleep(1)

Krok 5: Synchronizacja DS1307 z zegar systemu Raspberry Pi

Zsynchronizować DS1307 RTC Czas Z czasem systemu Raspberry Pi:

  1. Przeczytaj czas RTC DS1307 i ustaw go jako czas systemu:
    sudo hwclock -r
    sudo hwclock -s
    
  2. Ustaw czas RTC DS1307 od czasu systemu Raspberry Pi:
    sudo hwclock -w
    

Krok 6: Zastosowania modułu RTC DS1307

  1. Trzymanie czasu na bezgłowych urządzeniach Raspberry Pi - Przydatny dla rejestrowanie danych projektowanie.
  2. Domowe systemy automatyzacji - Zapewnij dokładne zaplanowane zdarzenia nawet po utraty mocy.
  3. Projekty IoT - Użyj DS1307 dla Dane dotyczące znaczników czasu w rozłączonych środowiskach.
  4. Stacje pogodowe - przechowuj dokładne znaczniki czasu dla Rekordy temperatury i wilgotności.

Rozwiązywanie problemów

  1. DS1307 nie wykryty (i2cdetect nie pokazuje 0x68)

    • Upewnij się SDA/SCL PINS są prawidłowo podłączone.
    • Sprawdź to I2C jest włączony używając sudo raspi-config.
  2. Nieprawidłowe odczyty daty/godziny

    • Uruchomić sudo hwclock -r Aby sprawdzić zegar sprzętowy.
    • Zresetuj zegar RTC za pomocą sudo hwclock -w.
  3. RTC czas nie utrzymywał się po zasilaniu

    • Upewnij się Bateria CR2032 jest instalowany poprawnie.
    • Wymień baterię, jeśli jest niska lub martwa.

Wniosek

. Moduł RTC DS1307 zapewnia Dokładne śledzenie w czasie rzeczywistym W przypadku projektów Raspberry Pi, nawet po wyłączeniu. Postępując zgodnie z tym przewodnikiem, możesz zintegrować funkcjonalność RTC z Aplikacje IoT, automatyzacja i rejestrowanie danych. 🚀

Zostaw komentarz

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.