Получение текущей даты

Arduino:
Получение текущей даты

Как это сделать:

Давайте сделаем наш Arduino умён в плане даты. Мы будем использовать модуль RTC, такой как DS3231, который является точным и имеет резервный аккумулятор.

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

RTC_DS3231 rtc;

void setup() {
  Serial.begin(9600);

  if (!rtc.begin()) {
    Serial.println("Не удалось найти RTC");
    while (1);
  }

  if (rtc.lostPower()) {
    Serial.println("RTC потеряло питание, давайте установим время!");
    // следующая строка устанавливает в RTC дату и время компиляции этого скетча
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
}

void loop() {
  DateTime now = rtc.now();

  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  
  delay(3000); // ждём 3 секунды перед обновлением даты
}

Пример вывода:

2023/4/5

Подробнее:

Исторический контекст? Ранние компьютеры не нуждались в знании даты. Это стало важным только с появлением систем ведения журналов и многопользовательских систем. В наши дни это уже просто необходимость.

Альтернативы RTC включают использование Протокола сетевого времени (NTP) при подключении к интернету или модулей GPS, которые предоставляют точные сведения о времени и дате.

Детали реализации имеют значение. Не все модули RTC созданы равными. Некоторые, как DS1307, менее точны и могут больше отклоняться со временем. Библиотеки типа RTClib.h абстрагируют различия между модулями, облегчая вашу жизнь.

Использование NTP через WiFi требует другого подхода. Вам понадобится ESP8266 или ESP32 с доступом в интернет и включение библиотек типа WiFi.h и NTPClient.h. Схема кодирования меняется — вы делаете периодические запросы к серверу времени и анализируете результаты для получения даты.

Смотрите также: