คลาส RTC -- นาฬิกาเวลาจริง

คลาส RTC ควบคุมอุปกรณ์ต่อพ่วงนาฬิกาเวลาจริงบนชิป MCU ซึ่งรักษาเวลานาฬิกาผนังข้ามการรีเซ็ต

บน STM32 OpenMV Cams machine.RTC และ pyb.RTC อ้างอิงถึงออบเจ็กต์พื้นฐานเดียวกัน

ตัวอย่างการใช้งาน:

import machine

rtc = machine.RTC()
rtc.datetime((2026, 1, 21, 2, 10, 32, 36, 0))
print(rtc.datetime())

ตัวสร้าง

class machine.RTC(id: int = 0)

คืนค่า singleton RTC id ถูกยอมรับเพื่อความเข้ากันได้ข้ามพอร์ต แต่เฉพาะ 0 เท่านั้นที่ใช้ได้บนพอร์ตที่ OpenMV รองรับ (กล้องแต่ละตัวมี RTC หนึ่งตัว)

เมธอดด้านล่างถูกจัดกลุ่มตามพอร์ต OpenMV ที่เปิดเผย

เมธอดที่ใช้ได้บนพอร์ต OpenMV ทั้งหมด

datetime(datetimetuple: tuple | None = None, /) tuple | None

รับหรือตั้งค่าวันที่และเวลาปัจจุบัน

หากไม่มีอาร์กิวเมนต์ คืนค่าปัจจุบันเป็น 8-tuple (year, month, day, weekday, hour, minute, second, subseconds)

หากมีอาร์กิวเมนต์ 8-tuple หนึ่งตัว ตั้งค่า RTC เป็นค่านั้น

weekday คือ 1 = วันจันทร์ ถึง 7 = วันอาทิตย์บน STM32 และ 0 = วันจันทร์ ถึง 6 = วันอาทิตย์บน mimxrt subseconds คือส่วนเศษของวินาทีในหน่วย 1/256 วินาทีบน STM32; บน mimxrt และ alif เป็น 0 เสมอ

STM32 + mimxrt เท่านั้น

init(datetime: tuple) None

เริ่มต้น RTC

บนพอร์ต mimxrt (OpenMV Cam RT1062) datetime จำเป็นและใช้ 8-tuple (year, month, day, weekday, hour, minute, second, subseconds)

บน STM32 OpenMV cams init() ไม่รับอาร์กิวเมนต์: มันจะ (เริ่มต้นใหม่) อุปกรณ์ต่อพ่วง RTC โดยไม่เปลี่ยนแปลงวันที่/เวลาปัจจุบัน

calibration(value: int | None = None, /) int | None

รับหรือตั้งค่า offset การปรับเทียบของ RTC (ใช้เพื่อชดเชยข้อผิดพลาดความถี่คริสตัล)

ช่วงที่ยอมรับและหน่วยของ value ขึ้นอยู่กับฮาร์ดแวร์ -- ค่าถูกเขียนโดยตรงลงใน RTC trim register ของ MCU ดูคู่มืออ้างอิง STM32 / i.MX RT ที่เกี่ยวข้องสำหรับการเข้ารหัสที่แน่นอน

STM32 เท่านั้น

info() int

คืนค่าสถานะการเริ่มต้น RTC ที่แพ็คเป็นจำนวนเต็ม 32 บิต

16 บิตต่ำให้จำนวนมิลลิวินาทีที่ RTC ใช้ในการเริ่มต้นเมื่อบูตล่าสุด บิต 0x10000 ถูกตั้งค่าเมื่อออสซิลเลเตอร์ LSE (low-speed external) ล้มเหลวและ RTC ถอยกลับไปใช้ LSI (internal RC) บิต 0x20000 ถูกตั้งค่าเมื่อ RTC ถูกเริ่มต้นใหม่เมื่อบูต (แทนที่จะต่อเนื่องจากการเปิดเครื่องก่อนหน้า)

wakeup(timeout_ms: int | None, callback: Callable[[RTC], None] | None = None, /) None

กำหนดการอินเทอร์รัปต์ wakeup แบบเป็นรอบ

timeout_ms คือช่วงเวลาในมิลลิวินาที RTC จะทำงานทุกๆ timeout_ms และสามารถปลุก MCU จาก machine.lightsleep() / machine.deepsleep() ได้ ส่ง None เพื่อปิดใช้งานตัวจับเวลา wakeup

callback จะถูกเรียกจาก wakeup IRQ; ส่ง None เพื่อไม่ติดตั้งคอลแบ็ก (wakeup จะยังคงทำงานและปลุก MCU)

mimxrt + alif เท่านั้น

alarm(id: int, time: int | tuple, *, repeat: bool = False) None

ตั้งค่า RTC alarm id เลือกช่อง alarm (ใช้ ALARM0) time เป็นจำนวนเต็มมิลลิวินาทีในอนาคต หรือ datetime tuple ส่ง repeat=True เพื่อตั้งค่าใหม่โดยอัตโนมัติหลังจากแต่ละครั้งที่ทำงาน (ใช้ได้เฉพาะเมื่อ time เป็นจำนวนมิลลิวินาที)

บน alif รองรับเฉพาะรูปแบบจำนวนมิลลิวินาทีเท่านั้น

mimxrt เท่านั้น

alarm_left(alarm_id: int = 0, /) int

คืนค่าจำนวนมิลลิวินาทีที่เหลือก่อนที่ alarm ที่ระบุโดย alarm_id จะทำงาน

alarm_cancel(alarm_id: int = 0, /) None

ยกเลิก alarm ที่ตั้งค่าไว้ก่อนหน้า

cancel(alarm_id: int = 0, /) None

นามแฝงที่เลิกใช้แล้วสำหรับ alarm_cancel() เก็บไว้เพื่อความเข้ากันได้ย้อนหลัง กำหนดให้ลบใน MicroPython 2.0

irq(*, trigger: int = ALARM0, handler: Callable[[RTC], None] | None = None, wake: int = 0, hard: bool = False) None

ลงทะเบียนคอลแบ็กสำหรับ RTC alarm

trigger ต้องเป็น ALARM0 -- แหล่ง IRQ เดียวที่รองรับ handler จะถูกเรียกด้วยอินสแตนซ์ RTC เมื่อ alarm ทำงาน hard=True ลงทะเบียนตัวจัดการอินเทอร์รัปต์แบบ hard (ไม่จัดสรร heap ในคอลแบ็ก) wake ถูกยอมรับเพื่อความเข้ากันได้ข้ามพอร์ตแต่ไม่มีผล

ค่าคงที่

ALARM0: int

ตัวระบุสำหรับช่อง alarm เดียวของ RTC ส่งไปยัง alarm(), alarm_left(), alarm_cancel() และอาร์กิวเมนต์ trigger ของ irq() ใช้ได้เฉพาะพอร์ต mimxrt เท่านั้น