ที่ โมดูลนาฬิกาเรียลไทม์ DS1307 (RTC) อนุญาตให้ Raspberry Pi ติดตามเวลาแม้ว่าจะถูกขับออกไป คู่มือนี้จะนำคุณผ่านการตั้งค่าไฟล์ โมดูล DS1307 RTC กับ Raspberry Pi โดยใช้ไฟล์ โปรโตคอล I2C.
สิ่งที่คุณต้องการ
- Raspberry Pi (รุ่นใด ๆ ที่มีการสนับสนุน GPIO และ I2C เช่น PI 3, PI 4)
- โมดูล DS1307 RTC
- แบตเตอรี่ CR2032 (สำหรับการรักษาเวลาเมื่อขับเคลื่อน)
- เครื่องหั่นขนมปังและสายจัมเปอร์
- ติดตั้ง 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
- เปิดเครื่องมือกำหนดค่า Raspberry Pi:
sudo raspi-config
- นำทางไปยัง ตัวเลือกอินเตอร์เฟส> i2c และเปิดใช้งาน
- รีบูตราสเบอร์รี่ pi:
sudo reboot
- ตรวจสอบว่า ตรวจพบ DS1307 บนรถบัส I2C:
ที่ DS1307 ควรปรากฏตามที่อยู่sudo i2cdetect -y 1
0x68
.
ขั้นตอนที่ 3: ติดตั้งไลบรารีที่ต้องการ
- อัปเดตรายการแพ็คเกจ Raspberry Pi ของคุณ:
sudo apt update && sudo apt upgrade -y
- ติดตั้งเครื่องมือ 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:
-
อ่านเวลา DS1307 RTC และตั้งค่าเป็นเวลาระบบ:
sudo hwclock -r sudo hwclock -s
-
ตั้งเวลา DS1307 RTC จากเวลาระบบ Raspberry Pi:
sudo hwclock -w
ขั้นตอนที่ 6: แอปพลิเคชันของโมดูล DS1307 RTC
- รักษาเวลาบนอุปกรณ์ Raspberry Pi ที่ไม่มีหัว - มีประโยชน์สำหรับ การบันทึกข้อมูล โครงการ.
- ระบบอัตโนมัติในบ้าน - ตรวจสอบเหตุการณ์ที่กำหนดเวลาที่ถูกต้องแม้หลังจากการสูญเสียพลังงาน
- โครงการ IoT - ใช้ DS1307 สำหรับ ข้อมูลการจับเวลา ในสภาพแวดล้อมที่ตัดการเชื่อมต่อ
- สถานีอากาศ - จัดเก็บการประทับเวลาที่แม่นยำสำหรับ บันทึกอุณหภูมิและความชื้น.
การแก้ไขปัญหา
-
ไม่พบ DS1307 (
i2cdetect
ไม่แสดง0x68
)- ตรวจสอบให้แน่ใจว่า หมุด SDA/SCL มีสายอย่างถูกต้อง
- ตรวจสอบว่า เปิดใช้งาน I2C โดยใช้
sudo raspi-config
.
-
การอ่านวันที่/เวลาไม่ถูกต้อง
- วิ่ง
sudo hwclock -r
เพื่อตรวจสอบนาฬิกาฮาร์ดแวร์ - รีเซ็ตนาฬิกา RTC โดยใช้
sudo hwclock -w
.
- วิ่ง
-
เวลา RTC ไม่คงอยู่หลังจากปิดไฟ
- ตรวจสอบให้แน่ใจว่า แบตเตอรี่ CR2032 ติดตั้งอย่างถูกต้อง
- เปลี่ยนแบตเตอรี่หากต่ำหรือตาย
บทสรุป
ที่ โมดูล DS1307 RTC จัดเตรียมให้ การติดตามแบบเรียลไทม์ที่แม่นยำ สำหรับโครงการ Raspberry Pi แม้จะถูกขับออกไป โดยทำตามคำแนะนำนี้คุณสามารถรวมฟังก์ชั่น RTC เข้ากับ แอพพลิเคชั่น IoT ระบบอัตโนมัติและการบันทึกข้อมูล. 🚀