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 เลย