Подключение часов DS3231 к ESP32
Модуль часов реального времени
DS3231 с ESP32 соединяется по I2C: SDA — GPIO21, SCL — GPIO22, питание 3,3 В. Часы ведут время сами, а батарейка на плате сохраняет его при отключении питания.
Схема подключения часов DS3231 к ESP32
| DS3231 | ESP32 |
|---|---|
| SCL | GPIO22 |
| SDA | GPIO21 |
| VCC | 3V3 |
| GND | GND |
Схема из примера «Часы: поставить время и читать».
Выводы DS3231
| Вывод | Назначение |
|---|---|
| SCL | тактовая линия I2C |
| SDA | линия данных I2C |
| SQW | выход меандра или сигнал будильника (прерывание); для часов не нужен |
| VCC | питание 3,3–5 В |
| GND | общий провод |
Код для ESP32
#include <RTClib.h>
RTC_DS3231 rtc;
void setup() {
Serial.begin(115200);
delay(200);
if (!rtc.begin()) {
Serial.println("часы не отвечают: проверьте SDA, SCL и питание");
while (true) delay(1000);
}
// Признак «часы стояли» микросхема поднимает, когда пропадало
// питание. Ставить время каждый запуск нельзя: тогда часы всегда
// будут показывать время последней прошивки, а не текущее.
if (rtc.lostPower()) {
Serial.println("часы стояли — ставлю время сборки");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
DateTime now = rtc.now();
Serial.printf("%04d-%02d-%02d %02d:%02d:%02d\n",
now.year(), now.month(), now.day(),
now.hour(), now.minute(), now.second());
delay(1000);
}
Скетч можно править и запускать в симуляторе без платы и установки среды.
Что учесть на ESP32
- Адрес 0x68 тот же, что у MPU6050 (с выводом AD0 на землю): две такие микросхемы на одной шине конфликтуют.
- ESP32 умеет получать время по сети (NTP), но DS3231 нужен там, где Wi‑Fi нет, и как резерв при потере связи.
В железе
На популярном модуле ZS-042 стоит цепь зарядки батарейки (резистор 200 Ом и диод). Для обычной CR2032 это вредно: её нельзя заряжать. Либо выпаивают резистор, либо ставят аккумулятор LIR2032.
Частые ошибки при подключении к ESP32
- Установить в модуль с цепью подзарядки батарейку CR2032, не рассчитанную на заряд: у части дешёвых модулей эта цепь есть, и батарейка может вздуться. Ставьте тип, указанный для модуля, или удалите резистор подзарядки.
- Ждать, что время сохранится без батарейки: при отключении питания DS3231 без неё теряет время.
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)))в каждомsetup()— часы при каждом старте сбрасываются на время сборки. Устанавливайте время один раз или по флагуrtc.lostPower().- Тот же адрес 0x68, что у MPU6050: два таких модуля на одной шине конфликтуют. У MPU6050 переключите адрес на 0x69 (вывод AD0 к питанию).
- Обычная CR2032 на модуле с зарядкой — батарейка вздувается.
- Время хранится без часового пояса: храните UTC и переводите при выводе, иначе переход на летнее время (где он есть) ломает расчёты.
Ещё по теме
Другие детали для ESP32
HC-SR04DHT22 (AM2302)BME280SSD1306 OLED 0,96″LCD 1602 с I2CMAX7219TM1637MPU6050 (GY-521)Модуль релеWS2812B (NeoPixel)KY-040Клавиатура 4×4HX711ФоторезисторМодуль microSDRGB-светодиодСервопривод SG9074HC595ИК-приёмник (VS1838B)TFT ST7735 1,8″Шаговый двигательКнопкаПотенциометрПьезопищалкаСветодиодDS18B20Ползунковый переключательHC-SR501TTP223Датчик влажности почвыMQ-2LM35Джойстик KY-023DHT11HTU21DSN65HVD230