3.28. นาฬิกาเวลาจริง¶
นาฬิกามิลลิวินาทีของไมโครคอนโทรลเลอร์ ซึ่งเป็นตัวที่อยู่เบื้องหลัง time.ticks_ms() และระบบตัวจับเวลา จะนับเวลาที่ผ่านไปตั้งแต่บูต นาฬิกาเวลาจริง (RTC) เป็นฮาร์ดแวร์แยกต่างหากที่ติดตาม เวลาตามนาฬิกาแขวน ได้แก่ ปี เดือน วัน ชั่วโมง นาที วินาที และทำงานต่อเนื่องผ่านการรีเซ็ตและการอัปเดตเฟิร์มแวร์ ในกล้องที่มีแบตเตอรี่สำรองเชื่อมต่อกับแหล่งจ่าย RTC ก็จะรอดพ้นจากการตัดกระแสไฟทั้งหมดด้วย
RTC คือสิ่งที่กล้องที่ติดตั้งใช้งานจริงใช้เพื่อ:
ประทับเวลาในบันทึกและภาพที่บันทึกด้วยวันที่จริง
กำหนดจังหวะงานที่ทำงานต่อเนื่องซึ่งไม่ควรเบี่ยงเบนในช่วงสัปดาห์หรือเดือน
3.28.1. คลาส machine.RTC¶
machine.RTC เป็น singleton ซึ่งมี RTC หนึ่งตัวต่อกล้อง ไม่จำเป็นต้องมี id:
from machine import RTC
rtc = RTC()
วันที่และเวลาปัจจุบันอยู่ใน datetime() การเรียกโดยไม่มีอาร์กิวเมนต์จะคืนค่า tuple 8 ตัว:
>>> rtc.datetime()
(2026, 5, 27, 4, 14, 30, 15, 0)
ฟิลด์ต่างๆ คือ (year, month, day, weekday, hour, minute, second, subseconds) หากต้องการตั้งค่านาฬิกา ให้ส่ง tuple 8 ตัวในรูปแบบเดียวกันกลับไป:
rtc.datetime((2026, 1, 21, 2, 10, 32, 36, 0))
กล้องจะนับต่อจากจุดนั้น เมื่อรีเซ็ตแบบ soft เวลาจะดำเนินต่อไปโดยไม่หยุดชะงัก เมื่อตัดกระแสไฟทั้งหมด RTC จะย้อนกลับไปเป็นเวลาเริ่มต้นเว้นแต่แบตเตอรี่สำรองจะคงพลังงานไว้
3.28.2. เมื่อต้องตั้งค่า RTC¶
RTC ไม่มีวิธีในตัวที่จะรู้ว่าตอนบูตเป็นเวลาอะไร รูปแบบที่พบบ่อยสามแบบในการตั้งค่า ได้แก่:
จากแหล่งเวลาเครือข่าย กล้องที่เชื่อมต่อ WiFi ได้สามารถดึงเวลาด้วย
ntptimeและเขียนลงใน RTC ตอนเริ่มต้นจาก host ผ่าน USB สคริปต์ companion บน laptop ส่งเวลาปัจจุบันเมื่อเชื่อมต่อกล้อง
จากชิป RTC ภายนอกที่มีแบตเตอรี่สำรอง IC RTC เฉพาะ (มักอยู่บน shield พร้อมแบตเตอรี่เหรียญของตัวเอง) รักษาเวลาระยะยาวได้ดีกว่า RTC บนชิป และสามารถอ่านตอนบูตเพื่อตั้งค่า
datetime()
บางแอปพลิเคชันไม่จำเป็นต้องตั้งค่า RTC เลย ลูป duty-cycled "ปลุกทุก 60 วินาทีแล้วบันทึกค่า" ใส่ใจแค่ช่วงเวลาที่ผ่านไป ซึ่ง time.ticks_ms() และรูปแบบการสลีปแบบตั้งเวลาใน โหมดประหยัดพลังงานและโหมดสลีป จัดการได้โดยไม่ต้องอ้างอิงค่านาฬิกาแขวนของ RTC เลย