Använda DS1307 RTC med Raspberry Pi

Using the DS1307 RTC with the Raspberry Pi

De DS1307 realtidsklocka (RTC) -modul Tillåter Raspberry Pi att hålla reda på tid även när den är avstängd. Den här guiden kommer att leda dig genom att ställa in DS1307 RTC -modul med Raspberry Pi med I2C -protokollet.


Vad du behöver

  1. Hallon (Varje modell med GPIO och I2C -stöd, t.ex. PI 3, PI 4)
  2. DS1307 RTC -modul
  3. CR2032 -batteri (för att upprätthålla tiden när den är avstängd)
  4. Breadboard och jumpertrådar
  5. Python installerad på Raspberry Pi

Steg 1: Kopplar DS1307 till Raspberry Pi

De DS1307 kommunicerar via I2C, så vi ansluter den till Raspberry Pi's i2C -stift.

Anslutningar (I2C -läge)

DS1307 -stift Hallon pi
Vcc 3.3V eller 5V (stift 1 eller 2)
Gard Mark (stift 6)
SDA SDA (stift 3, GPIO2)
SCL SCL (stift 5, GPIO3)

Steg 2: Aktivera i2c på Raspberry Pi

  1. Öppna Raspberry PI -konfigurationsverktyget:
    sudo raspi-config
    
  2. Navigera till Gränssnittsalternativ> i2c och aktivera det.
  3. Starta om Raspberry Pi:
    sudo reboot
    
  4. Verifiera att DS1307 upptäcks på i2c -bussen:
    sudo i2cdetect -y 1
    
    De DS1307 ska visas på adressen 0x68.

Steg 3: Installera obligatoriska bibliotek

  1. Uppdatera din Raspberry Pis paketlista:
    sudo apt update && sudo apt upgrade -y
    
  2. Installera nödvändiga I2C -verktyg och Python -bibliotek:
    sudo apt install -y i2c-tools python3-smbus python3-pip
    pip3 install adafruit-circuitpython-ds1307
    

Steg 4: Inställning och läsningstid på DS1307

Python -kod för att ställa in datum och tid

Kör detta skript en gång för att ställa in RTC -klockan.

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!")

Python -kod för att läsa tid från DS1307

När du har ställt in tiden, använd det här skriptet för att läsa det aktuella datumet och tiden.

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)

Steg 5: Synkronisering av DS1307 med Raspberry PI -systemklockan

För att synkronisera DS1307 RTC -tid Med Raspberry Pi -systemet:

  1. Läs DS1307 RTC -tiden och ställ in det som systemtid:
    sudo hwclock -r
    sudo hwclock -s
    
  2. Ställ in DS1307 RTC -tiden från Raspberry PI -systemet:
    sudo hwclock -w
    

Steg 6: Tillämpningar av DS1307 RTC -modulen

  1. Att hålla tiden på huvudlösa Raspberry Pi -enheter - Användbar för dataloggning projekt.
  2. Hemautomationssystem - Säkerställa exakta schemalagda händelser även efter kraftförlust.
  3. IoT -projekt - Använd DS1307 för tidsstämpeldata i frånkopplade miljöer.
  4. Väderstationer - Förvara exakta tidsstämplar för Temperatur- och fuktighetsregister.

Felsökning

  1. DS1307 inte upptäckt (i2cdetect visar inte 0x68)

    • Se till SDA/SCL -stift är korrekt kopplade.
    • Verifiera att I2c är aktiverad användning sudo raspi-config.
  2. Felaktiga datum/tidsavläsningar

    • Sikt sudo hwclock -r För att kontrollera hårdvaruklockan.
    • Återställ RTC -klockan med sudo hwclock -w.
  3. RTC -tid som inte fortsätter efter avstängning

    • Se till CR2032 -batteri är korrekt installerad.
    • Byt batteriet om det är lågt eller dött.

Slutsats

De DS1307 RTC -modul tillhandahåller Exakt realtidsspårning För Raspberry PI -projekt, även när de är avstängda. Genom att följa den här guiden kan du integrera RTC -funktionalitet i IoT, automatisering och dataloggningsapplikationer. 🚀

Lämna en kommentar

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.