3.28. Real-time clock

Clock milidetik mikrokontroler -- yang ada di balik time.ticks_ms() dan subsistem timer -- menghitung waktu yang telah berlalu sejak boot. Real-time clock (RTC) adalah hardware terpisah yang melacak waktu dinding -- tahun, bulan, hari, jam, menit, detik -- dan terus berjalan melewati reset dan pembaruan firmware. Pada kamera dengan baterai cadangan yang terhubung ke suplai RTC, ia tetap bertahan meski terjadi kehilangan daya penuh.

RTC adalah yang digunakan kamera yang sudah di-deploy untuk:

  • Memberi stempel waktu pada entri log dan citra tersimpan dengan tanggal nyata.

  • Mengatur tugas yang berjalan lama agar tidak bergeser selama berminggu-minggu atau berbulan-bulan.

3.28.1. Kelas machine.RTC

machine.RTC adalah singleton -- satu RTC per kamera, tidak perlu id:

from machine import RTC

rtc = RTC()

Tanggal dan waktu saat ini ada di datetime(). Memanggilnya tanpa argumen mengembalikan tuple 8 elemen:

>>> rtc.datetime()
(2026, 5, 27, 4, 14, 30, 15, 0)

Bidang-bidangnya adalah (year, month, day, weekday, hour, minute, second, subseconds). Untuk mengatur clock, teruskan tuple 8 elemen dengan bentuk yang sama:

rtc.datetime((2026, 1, 21, 2, 10, 32, 36, 0))

Kamera terus menghitung dari titik tersebut. Pada soft reset, waktu berlanjut tanpa gangguan; pada siklus daya penuh, RTC kembali ke waktu defaultnya kecuali baterai cadangan menjaganya tetap menyala.

3.28.2. Kapan mengatur RTC

RTC tidak memiliki cara bawaan untuk mengetahui waktu apa saat boot. Tiga pola umum mengaturnya:

  • Dari sumber waktu jaringan. Kamera yang terhubung ke WiFi dapat mengambil waktu dengan ntptime dan menulisnya ke RTC saat startup.

  • Dari host melalui USB. Skrip pendamping di laptop mendorong waktu saat ini ketika kamera disambungkan.

  • Dari chip RTC eksternal bertenaga baterai. IC RTC khusus (sering pada shield, dengan sel koin sendiri) menjaga waktu jangka panjang yang lebih baik daripada RTC on-chip dan dapat dibaca saat boot untuk mengisi datetime().

Beberapa aplikasi tidak perlu mengatur RTC sama sekali. Loop duty-cycled "bangun setiap 60 detik dan ambil pembacaan" hanya peduli tentang interval yang telah berlalu, yang ditangani oleh time.ticks_ms() dan pola sleep berwaktu dalam Mode daya rendah dan sleep tanpa pernah mengacu pada nilai waktu-dinding RTC.