متوسط⏱ 15 دقیقه مطالعه

ساعت داخلی ESP32 با هر بار قطع برق یا ریست‌شدن، به زمان صفر بازمی‌گردد (مگر با NTP از اینترنت تنظیم شود). برای پروژه‌هایی که به تاریخ و ساعت دقیق حتی بدون اینترنت نیاز دارند (مثل دیتالاگر یا زنگ هوشمند)، از یک ماژول RTC سخت‌افزاری مثل DS3231 استفاده می‌کنیم که با باتری سکه‌ای، زمان را همیشه نگه می‌دارد. در Arduino، کتابخانهٔ محبوب RTClib (ساختهٔ Adafruit) کار با این ماژول را بسیار ساده می‌کند.

اتصال ماژول ساعت واقعی DS3231 با I2C

خواندن و تنظیم زمان با DS3231

مشابه نمایشگر OLED (درس ۹)، ماژول RTC هم از I2C استفاده می‌کند. از Library Manager، کتابخانهٔ «RTClib» (نوشتهٔ Adafruit) را نصب کنید.

CPP
#include <Wire.h>
#include <RTClib.h>

RTC_DS3231 rtc;

void setup() {
  Serial.begin(115200);
  Wire.begin(21, 22);

  if (!rtc.begin()) {
    Serial.println("ماژول RTC یافت نشد!");
    return;
  }

  // تنظیم زمان (فقط یک‌بار لازم است، یا با زمان کامپایل کد):
  // rtc.adjust(DateTime(2026, 7, 19, 14, 30, 0));
}

void loop() {
  DateTime now = rtc.now();
  Serial.print(now.year());
  Serial.print('/');
  Serial.print(now.month());
  Serial.print('/');
  Serial.print(now.day());
  Serial.print("  ");
  Serial.print(now.hour());
  Serial.print(':');
  Serial.println(now.minute());
  delay(1000);
}
ℹ️ اطلاعات

اگر به ماژول RTC سخت‌افزاری دسترسی ندارید، می‌توانید زمان را با کتابخانهٔ استاندارد time.h و تابع configTime() از طریق پروتکل NTP و اتصال Wi-Fi (درس ۱۱) نیز همگام‌سازی کنید؛ اما در آن حالت با قطع برق و بدون اینترنت، زمان از دست می‌رود.

🧩

در حال حاضر قطعهٔ DS3231 آمادهٔ Arduino با نمونهٔ عمومی در کتابخانهٔ Wokwi موجود نیست؛ می‌توانید از قطعهٔ RTC موجود در کتابخانهٔ Wokwi برای ساخت مدار خودتان استفاده کنید (مشابه سیم‌کشی I2C در تصویر بالا).

ساخت پروژهٔ خالی Arduino/ESP32 در Wokwi ↗
🛠️ کارگاه عملی

کارگاه عملی: یک برنامه بنویسید که هر ساعت (با کمک RTC) یک پیام «چک سلامت سیستم» در سریال چاپ کند.

❓ مزیت اصلی استفاده از ماژول RTC سخت‌افزاری مثل DS3231 نسبت به NTP چیست؟
طراحی و توسعه: امین شیخ نجدیglcd.ir | نسخهٔ افزونه: 1.21.0