ใช้ DS1307 RTC กับ Raspberry Pi

Using the DS1307 RTC with the Raspberry Pi

ที่ โมดูลนาฬิกาเรียลไทม์ DS1307 (RTC) อนุญาตให้ Raspberry Pi ติดตามเวลาแม้ว่าจะถูกขับออกไป คู่มือนี้จะนำคุณผ่านการตั้งค่าไฟล์ โมดูล DS1307 RTC กับ Raspberry Pi โดยใช้ไฟล์ โปรโตคอล I2C.


สิ่งที่คุณต้องการ

  1. Raspberry Pi (รุ่นใด ๆ ที่มีการสนับสนุน GPIO และ I2C เช่น PI 3, PI 4)
  2. โมดูล DS1307 RTC
  3. แบตเตอรี่ CR2032 (สำหรับการรักษาเวลาเมื่อขับเคลื่อน)
  4. เครื่องหั่นขนมปังและสายจัมเปอร์
  5. ติดตั้ง Python บนราสเบอร์รี่ pi

ขั้นตอนที่ 1: เดินสาย DS1307 ไปยัง Raspberry Pi

ที่ DS1307 สื่อสารผ่าน I2Cดังนั้นเราจึงเชื่อมต่อกับหมุด I2C ของ Raspberry Pi

การเชื่อมต่อ (โหมด I2C)

DS1307 PIN Raspberry Pi Pin
VCC 3.3V หรือ 5V (พิน 1 หรือ 2)
gnd พื้นดิน (พิน 6)
SDA SDA (พิน 3, GPIO2)
SCL SCL (PIN 5, GPIO3)

ขั้นตอนที่ 2: เปิดใช้งาน I2C บน Raspberry Pi

  1. เปิดเครื่องมือกำหนดค่า Raspberry Pi:
    sudo raspi-config
    
  2. นำทางไปยัง ตัวเลือกอินเตอร์เฟส> i2c และเปิดใช้งาน
  3. รีบูตราสเบอร์รี่ pi:
    sudo reboot
    
  4. ตรวจสอบว่า ตรวจพบ DS1307 บนรถบัส I2C:
    sudo i2cdetect -y 1
    
    ที่ DS1307 ควรปรากฏตามที่อยู่ 0x68.

ขั้นตอนที่ 3: ติดตั้งไลบรารีที่ต้องการ

  1. อัปเดตรายการแพ็คเกจ Raspberry Pi ของคุณ:
    sudo apt update && sudo apt upgrade -y
    
  2. ติดตั้งเครื่องมือ I2C ที่ต้องการและไลบรารี Python:
    sudo apt install -y i2c-tools python3-smbus python3-pip
    pip3 install adafruit-circuitpython-ds1307
    

ขั้นตอนที่ 4: การตั้งค่าและการอ่านเวลาบน DS1307

รหัส Python เพื่อตั้งค่าวันที่และเวลา

เรียกใช้สคริปต์นี้หนึ่งครั้งเพื่อตั้งค่านาฬิกา 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!")

รหัส Python เพื่ออ่านเวลาจาก DS1307

หลังจากตั้งค่าเวลาให้ใช้สคริปต์นี้เพื่ออ่านวันที่และเวลาปัจจุบัน

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)

ขั้นตอนที่ 5: การซิงค์ DS1307 กับนาฬิการะบบ Raspberry Pi

เพื่อซิงค์ DS1307 เวลา RTC ด้วยเวลาระบบ Raspberry Pi:

  1. อ่านเวลา DS1307 RTC และตั้งค่าเป็นเวลาระบบ:
    sudo hwclock -r
    sudo hwclock -s
    
  2. ตั้งเวลา DS1307 RTC จากเวลาระบบ Raspberry Pi:
    sudo hwclock -w
    

ขั้นตอนที่ 6: แอปพลิเคชันของโมดูล DS1307 RTC

  1. รักษาเวลาบนอุปกรณ์ Raspberry Pi ที่ไม่มีหัว - มีประโยชน์สำหรับ การบันทึกข้อมูล โครงการ.
  2. ระบบอัตโนมัติในบ้าน - ตรวจสอบเหตุการณ์ที่กำหนดเวลาที่ถูกต้องแม้หลังจากการสูญเสียพลังงาน
  3. โครงการ IoT - ใช้ DS1307 สำหรับ ข้อมูลการจับเวลา ในสภาพแวดล้อมที่ตัดการเชื่อมต่อ
  4. สถานีอากาศ - จัดเก็บการประทับเวลาที่แม่นยำสำหรับ บันทึกอุณหภูมิและความชื้น.

การแก้ไขปัญหา

  1. ไม่พบ DS1307 (i2cdetect ไม่แสดง 0x68)

    • ตรวจสอบให้แน่ใจว่า หมุด SDA/SCL มีสายอย่างถูกต้อง
    • ตรวจสอบว่า เปิดใช้งาน I2C โดยใช้ sudo raspi-config.
  2. การอ่านวันที่/เวลาไม่ถูกต้อง

    • วิ่ง sudo hwclock -r เพื่อตรวจสอบนาฬิกาฮาร์ดแวร์
    • รีเซ็ตนาฬิกา RTC โดยใช้ sudo hwclock -w.
  3. เวลา RTC ไม่คงอยู่หลังจากปิดไฟ

    • ตรวจสอบให้แน่ใจว่า แบตเตอรี่ CR2032 ติดตั้งอย่างถูกต้อง
    • เปลี่ยนแบตเตอรี่หากต่ำหรือตาย

บทสรุป

ที่ โมดูล DS1307 RTC จัดเตรียมให้ การติดตามแบบเรียลไทม์ที่แม่นยำ สำหรับโครงการ Raspberry Pi แม้จะถูกขับออกไป โดยทำตามคำแนะนำนี้คุณสามารถรวมฟังก์ชั่น RTC เข้ากับ แอพพลิเคชั่น IoT ระบบอัตโนมัติและการบันทึกข้อมูล. 🚀

แสดงความคิดเห็น

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.