DS1307 โมดูลนาฬิกาเวลาจริง (RTC) ช่วยให้ Raspberry Pi สามารถติดตามเวลาได้แม้ขณะปิดเครื่องอยู่ คู่มือนี้จะแนะนำคุณตลอดขั้นตอนการตั้งค่า โมดูล RTC DS1307 กับ Raspberry Pi โดยใช้ โปรโตคอล I2C.
สิ่งที่คุณต้องมี
- Raspberry Pi (รุ่นใดก็ได้ที่รองรับ GPIO และ I2C เช่น Pi 3, Pi 4)
- โมดูล RTC DS1307
- แบตเตอรี่ CR2032 (สำหรับคงเวลาเมื่อปิดเครื่อง)
- เบรดบอร์ดและสายจัมเปอร์
- ติดตั้ง Python แล้ว บน Raspberry Pi
ขั้นตอนที่ 1: การเดินสายไฟของ DS1307 ไปยัง Raspberry Pi
DS1307 สื่อสารผ่าน I2C, ดังนั้นเราจึงเชื่อมต่อมันเข้ากับขา I2C ของ Raspberry Pi.
การเชื่อมต่อ (โหมด I2C)
| DS1307 ปักหมุด | พิน Raspberry Pi |
|---|---|
| VCC | 3.3V หรือ 5V (ขา 1 หรือ 2) |
| GND | กราวด์ (ขา 6) |
| SDA | SDA (ขา 3, GPIO2) |
| SCL | SCL (ขา 5, GPIO3) |
ขั้นตอนที่ 2: เปิดใช้งาน I2C บน Raspberry Pi
- เปิดเครื่องมือกำหนดค่า Raspberry Pi:
sudo raspi-config - ไปที่ ตัวเลือกอินเทอร์เฟซ > I2C และเปิดใช้งาน
- รีบูต Raspberry Pi:
sudo reboot - ตรวจสอบว่า DS1307 ถูกตรวจพบ บนบัส I2C:
เดอะ DS1307 ควรปรากฏที่ที่อยู่sudo i2cdetect -y 10x68.
ขั้นตอนที่ 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
# เริ่มต้นบัส I2C และ DS1307
i2c = busio.I2C(board.SCL, board.SDA)
rtc = adafruit_ds1307.DS1307(i2c)
# ตั้งวันที่และเวลา (ปี, เดือน, วัน, ชั่วโมง, นาที, วินาที, วันในสัปดาห์, DST)
rtc.datetime = time.struct_time((2025, 1, 1, 12, 0, 0, 0, -1, -1))
print("ตั้งวันที่และเวลา RTC แล้ว!")
โค้ด Python เพื่ออ่านเวลาจาก DS1307
หลังจากตั้งค่าเวลาแล้ว ให้ใช้สคริปต์นี้เพื่ออ่านวันที่และเวลาปัจจุบัน
import time
import board
import busio
import adafruit_ds1307
# เริ่มต้นบัส I2C และ 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 แบบ Headless – มีประโยชน์สำหรับ การบันทึกข้อมูล โครงการ.
- ระบบอัตโนมัติภายในบ้าน – รับรองความถูกต้องของเหตุการณ์ตามกำหนดการแม้หลังจากไฟดับ
- โครงการ 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, ระบบอัตโนมัติ และการบันทึกข้อมูล. 🚀





