class RTC -- ساعة الوقت الحقيقي

تتحكم الفئة RTC في طرفية ساعة الوقت الحقيقي المدمجة في وحدة المعالجة الدقيقة، والتي تحفظ وقت الساعة الجدارية عبر عمليات إعادة الضبط.

على كاميرات OpenMV Cam المعتمدة على STM32، تشير machine.RTC وpyb.RTC إلى الكائن الأساسي نفسه.

مثال على الاستخدام:

import machine

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

البانيات (Constructors)

class machine.RTC(id: int = 0)

تُرجع نسخة RTC المفردة. يُقبل id للتوافق بين المنافذ لكن 0 فقط صالح على المنافذ التي يدعمها OpenMV (كل كاميرا لها RTC واحد).

الدوال أدناه مجمّعة حسب منافذ OpenMV التي تكشف عنها.

الدوال المتوفرة في جميع منافذ OpenMV

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

الحصول على التاريخ والوقت الحاليين أو ضبطهما.

بدون وسيطة، تُرجع القيمة الحالية كصف من 8 عناصر (year, month, day, weekday, hour, minute, second, subseconds).

مع وسيطة واحدة من صف ذي 8 عناصر، تضبط 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 عناصر (year, month, day, weekday, hour, minute, second, subseconds).

على كاميرات OpenMV Cam المعتمدة على STM32 لا تأخذ init() أي وسيطة: فهي تعيد تشغيل طرفية RTC، تاركةً التاريخ / الوقت الحالي دون مساس.

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

الحصول على إزاحة معايرة RTC أو ضبطها (تُستخدم للتعويض عن خطأ تردد البلورة).

النطاق المقبول ووحدات value خاصة بالعتاد -- تُكتب القيمة مباشرة في سجل ضبط RTC في وحدة المعالجة الدقيقة. راجع دليل مرجع STM32 / i.MX RT ذي الصلة لمعرفة الترميز الدقيق.

STM32 فقط

info() int

تُرجع حالة بدء تشغيل RTC المعبّأة كعدد صحيح من 32 بت.

تعطي الـ 16 بت المنخفضة عدد المللي ثانية التي استغرقتها RTC للبدء عند آخر إقلاع. تُضبط البتة 0x10000 عندما يفشل مذبذب LSE (الخارجي منخفض السرعة) وترتد RTC إلى LSI (الـ RC الداخلي). تُضبط البتة 0x20000 عندما تُهيأ RTC حديثاً عند الإقلاع (بدلاً من الاستمرار من التشغيل السابق).

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

جدولة مقاطعة إيقاظ دورية.

timeout_ms هو الفترة بالمللي ثانية. تنطلق RTC كل timeout_ms ويمكنها إيقاظ وحدة المعالجة الدقيقة من machine.lightsleep() / machine.deepsleep(). مرّر None لتعطيل مؤقت الإيقاظ.

يُستدعى callback من مقاطعة الإيقاظ؛ مرّر None لعدم تثبيت أي دالة رد نداء (سينطلق الإيقاظ ويوقظ وحدة المعالجة الدقيقة مع ذلك).

mimxrt + alif فقط

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

تسليح منبه RTC. يختار id قناة المنبه (استخدم ALARM0). time هو إما عدد صحيح من المللي ثانية في المستقبل، أو صف datetime. مرّر repeat=True لإعادة التسليح تلقائياً بعد كل انطلاق (صالح فقط عندما يكون time عدداً من المللي ثانية).

على alif يُدعم فقط شكل عدد المللي ثانية.

mimxrt فقط

alarm_left(alarm_id: int = 0, /) int

تُرجع عدد المللي ثانية المتبقية قبل انطلاق المنبه المحدد بـ alarm_id.

alarm_cancel(alarm_id: int = 0, /) None

إلغاء منبه مُسلّح سابقاً.

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.

يجب أن يكون trigger هو ALARM0 -- مصدر المقاطعة الوحيد المدعوم. يُستدعى handler مع نسخة RTC عند انطلاق المنبه. hard=True يسجّل معالج مقاطعة عتادية (دون تخصيص ذاكرة في الكومة داخل دالة رد النداء). يُقبل wake للتوافق بين المنافذ لكن ليس له تأثير.

الثوابت

ALARM0: int

معرّف قناة المنبه الوحيدة لـ RTC. مرّره إلى alarm() وalarm_left() وalarm_cancel() ووسيطة trigger في irq(). منفذ mimxrt فقط.