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
. Схема кодирования меняется — вы делаете периодические запросы к серверу времени и анализируете результаты для получения даты.
Смотрите также:
- Библиотека RTClib: Библиотека, облегчающая взаимодействие с модулями RTC.
- Технические характеристики DS3231: Всё о модуле RTC DS3231.
- Библиотека NTPClient: Для получения времени через интернет.
- Время и дата на Arduino без RTC: Альтернативные методы, если у вас нет RTC.