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
ntptimedan 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.