DS3231 RTC не работает с ESP32

Я использую ESP-32-WROOM-32 с модулем RTC DS3231. Я подключил SDA & Выводы SCL RTC DS3231 с выводами ESP32 D22 и D23. Кроме того, VCC RTC подключен к 3V3 ESP32, а GND RTC также подключен к GND ESP32. К модулю RTC также подключена батарея.

Ниже приведен код:

#include <Wire.h> // для I2C с модулем RTC
#include "RTClib.h" //чтобы показать время

RTC_DS3231 rtc;


void Scanner ()
{
  Serial.println ();
  Serial.println ("I2C scanner. Scanning ...");
  byte count = 0;

  Wire.begin(22,23);
  for (byte i = 8; i < 120; i++)
  {
    Wire.beginTransmission (i);          // Начало передачи I2C Адрес (i)
    if (Wire.endTransmission () == 0)  // Получение 0 = успех (ответ ACK)
    {
      Serial.print ("Found address: ");
      Serial.print (i, DEC);
      Serial.print (" (0x");
      Serial.print (i, HEX);     // PCF8574 7-битный адрес
      Serial.println (")");
      count++;
    }
  }
  Serial.print ("Found ");      
  Serial.print (count, DEC);        // количество устройств
  Serial.println (" device(s).");
}
void setup()
{
    // поместите сюда свой код установки для однократного запуска:
    Wire.begin(22,23);
    //Провод.begin();
    Serial.begin(115200);
         while(!Serial);

       /////////////////////////////////////

    /////////////////////////////////////////////////////////////////////////////////

    while (!rtc.begin())
    {
        Serial.println("Couldn't find RTC");
        Scanner();
        //Serial.println(DS3231_REG_STATUS);
        // пока (1)
        // {
        // Serial.println("Не удалось найти RTC");
        //
        // }

        ;
    }
    Serial.println("Finally");
    // В функции настройки мы вызовем функцию rtc.adjust(DateTime(__DATE__, __TIME__)) которая установит время в соответствии со временем нашего ПК.
    rtc.adjust(DateTime(__DATE__, __TIME__));
}
void loop()
{
    
    DateTime curr_time_obj = rtc.now();
    int day = curr_time_obj.day();
    int month = curr_time_obj.month();
    int year = curr_time_obj.year();
    int week_day = curr_time_obj.dayOfTheWeek();
    int sec = curr_time_obj.second();
    int hr = curr_time_obj.hour();
    int minute = curr_time_obj.minute();

    Serial.print("hour is ");
    Serial.println(hr);
    Serial.print("min is ");
    Serial.println(minute);
    Serial.print("secs is ");
    Serial.println(sec);
    Serial.println("############################");
    delay(5000);
}


Ниже приводится вывод:

Некоторые изображения схемы можно найти здесь: https://drive.google.com /drive/folders/1fhM7o_aZCGh88OBDcypVLqhKhizhXnNd?usp=sharing

Буду признателен за любую помощь в решении этой проблемы. Спасибо

, 👍1

Обсуждение

Адрес I²C DS3231 — 0x68, а не 0x57. Вы уверены, что у вас именно этот чип?, @Mat

Да, на чипе написано DS3231M, если быть точным., @Excalibur

Пожалуйста, укажите точный модуль, который вы используете. По фотографиям невозможно понять, что это такое., @Majenko

https://robu.in/product/ds3231-rtc-module-precision-real-time-lock-i2c-at24c32/?gclid=CjwKCAjwhOyJBhA4EiwAEcJdceN-yJB_Uxzz_EervOkpZRWXgECrQZJ_zWbnB5o3OxVbhG_Ki_f69RoCQKIQA vD_BwE @Маженко, @Excalibur

Этот модуль содержит как RTC *и* EEPROM. Устройство 0x57 выглядит как EEPROM. Схемы модуля нет, но есть два набора контактов I2C. *Может* случиться так, что два чипа подключены отдельно, и вам нужно выбрать правильные контакты I2C, для которого чип вы хотите использовать. Попробуйте переключиться на другие контакты SCL/SDA., @Majenko

@Majko У меня есть этот модуль, и я использую RTC через 6-контактный разъем, @Juraj

Я использую этот модуль с библиотекой DS3231 Эндрю Викерта. это в менеджере библиотеки, @Juraj


1 ответ


1

Предупреждение

Эти модули обычно поставляются с резистором сопротивлением 200 Ом, припаянным рядом со стабилитроном IN4148, как вы можете видеть на изображении ниже.

Устранение проблемы с модулем ds3231 Резистор и диод образуют простую схему зарядки, предназначенную для использования с аккумуляторными батареями LIR2032.

Имейте в виду, что некоторые модули DS3231 поставляются с неперезаряжаемой батареей CR2032. В этом случае необходимо снять резистор, поскольку попытка зарядить неперезаряжаемую батарею может привести к серьезному повреждению.

Блокировка

,

Я решил проблему с перезагрузкой, извлекая резистор сопротивлением 200 Ом., @juan orozco

Эта батарея не будет заряжаться с помощью системы 3V3, такой как устройства ESP. Диод должен изолировать его, поэтому вам не нужно ничего делать. Если вы питаете его от напряжения 5 В, вам необходимо заменить его на неперезаряжаемую батарею., @Gil