Node MCU v3 esp 12e не дружит с RTC DS1307

osintaras
Offline
Зарегистрирован: 28.12.2017
Приветствую однополчане!
Играюсь с Node MCU v3 esp 12e и в одном проекте возникла необходимость подключить к нему часы реального времени. Приобрел модуль RTC DS1307. 
По мануалу i2c-ноги у Node MCU это D1(GPIO5) и D2(GPIO4). Ну я и подключаю к ним.
Ни одна библиотека эти часы не видит. Ни один скетч - ничего.
И wire (ом) переназначал ноги, и питание давал от другой платы - ничего не помогает.
Подключил часы к ардуино уно китайцу - часы работают. 
Обратно на еспешку кидаю - не видны.
Может кто сталкивался?
Код можно взять любой из любой библиотеки. 
Ну к примеру вот этот 2017-12-27_16-15-02.png из библиотеки RTC by Makuna. 
Вот монитор порта 2017-12-27_16-17-57.png
Если отключить RTC модуль - все тоже самое, те же нереальные данные по времени.
Та же история с любым скетчем.
Сканер i2c устройств часы не видит. Их как будто устройство совсем не подключено.
 
Такая же история с адаптером для SD-карты. Подключаю к пинам D5-D8, использую скетч из библиотеки SD, карта не определяется. Подключаюсь к ардуино уно - все прекрасно работает.
 
 
dimin21590
dimin21590 аватар
Offline
Зарегистрирован: 26.10.2016

У меня была та же проелема я ее решил подключив к ногам D5 D6 и все заработало.

Вот пример:

#include <DS1307.h>
#include <Wire.h>

DS1307  rtc(12,  14); //scl D5  sda D6

Time  t;

void setup()
{
  // Set the clock to run-mode
  rtc.halt(false);
  
  // Setup Serial connection
  Serial.begin(9600);

  // The following lines can be commented out to use the values already stored in the DS1307
  rtc.setDOW(SUNDAY);        // Set Day-of-Week to SUNDAY
  rtc.setTime(12, 0, 0);     // Set the time to 12:00:00 (24hr format)
  rtc.setDate(3, 10, 2010);   // Set the date to October 3th, 2010
}

void loop()
{
  // Get data from the DS1307
  t = rtc.getTime();
  
  // Send date over serial connection
  Serial.print("Today is the ");
  Serial.print(t.date, DEC);
  Serial.print(". day of ");
  Serial.print(rtc.getMonthStr());
  Serial.print(" in the year ");
  Serial.print(t.year, DEC);
  Serial.println(".");
  
  // Send Day-of-Week and time
  Serial.print("It is the ");
  Serial.print(t.dow, DEC);
  Serial.print(". day of the week (counting monday as the 1th), and it has passed ");
  Serial.print(t.hour, DEC);
  Serial.print(" hour(s), ");
  Serial.print(t.min, DEC);
  Serial.print(" minute(s) and ");
  Serial.print(t.sec, DEC);
  Serial.println(" second(s) since midnight.");

  // Send a divider for readability
  Serial.println("  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -");
  
  // Wait one second before repeating :)
  delay (1000);
}

 

osintaras
Offline
Зарегистрирован: 28.12.2017

dimin21590 пишет:

У меня была та же проелема я ее решил подключив к ногам D5 D6 и все заработало.

Вот пример:

#include <DS1307.h>
#include <Wire.h>

DS1307  rtc(12,  14); //scl D5  sda D6

Time  t;

void setup()
{
  // Set the clock to run-mode
  rtc.halt(false);
  
  // Setup Serial connection
  Serial.begin(9600);

  // The following lines can be commented out to use the values already stored in the DS1307
  rtc.setDOW(SUNDAY);        // Set Day-of-Week to SUNDAY
  rtc.setTime(12, 0, 0);     // Set the time to 12:00:00 (24hr format)
  rtc.setDate(3, 10, 2010);   // Set the date to October 3th, 2010
}

void loop()
{
  // Get data from the DS1307
  t = rtc.getTime();
  
  // Send date over serial connection
  Serial.print("Today is the ");
  Serial.print(t.date, DEC);
  Serial.print(". day of ");
  Serial.print(rtc.getMonthStr());
  Serial.print(" in the year ");
  Serial.print(t.year, DEC);
  Serial.println(".");
  
  // Send Day-of-Week and time
  Serial.print("It is the ");
  Serial.print(t.dow, DEC);
  Serial.print(". day of the week (counting monday as the 1th), and it has passed ");
  Serial.print(t.hour, DEC);
  Serial.print(" hour(s), ");
  Serial.print(t.min, DEC);
  Serial.print(" minute(s) and ");
  Serial.print(t.sec, DEC);
  Serial.println(" second(s) since midnight.");

  // Send a divider for readability
  Serial.println("  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -");
  
  // Wait one second before repeating :)
  delay (1000);
}

Спасибо, не пробовал, но проблема решилась! Взял 5v с другой ардуины и все заработало! При этом землю оставил на node mcu. Видимо тока не хватает на node mcu для питания часов. Вероятно его не хватит и для питания других устройств. Не работал SD-кардридер. Попробовал его подключить к выводу 5v или 3.3Vв на другой ардуине, оставив землю на node mcu - не заработало... Устройство вовсе не запускается...

dimin21590
dimin21590 аватар
Offline
Зарегистрирован: 26.10.2016

Тот код которий я скидал то там модуль работал от 3.3в и все ок. Так что советую вам попробовать.

osintaras
Offline
Зарегистрирован: 28.12.2017

Как называется библиотека DS1307? Видимо у меня не установлена - выдает ошибку.

dimin21590
dimin21590 аватар
Offline
Зарегистрирован: 26.10.2016

https://drive.google.com/open?id=1w7Nx7d4SWASqlyQfGCkenCvpH8F1tW9A

вот я залил свою версию

osintaras
Offline
Зарегистрирован: 28.12.2017

Поставил, не работает. Кинул 5В питание - тоже не работает. Со старым скетчем (библиотека RTC by Makuna) и пинами D1 и D2 работает и от 3В и от 5В...

dimin21590
dimin21590 аватар
Offline
Зарегистрирован: 26.10.2016

Очень странно так как у меня под тем скетчем все работает уже как месяца 2 в режиме 24/7 без каких либо нареканий.
Может у вас другая версия ds1307? Можна фото?

osintaras
Offline
Зарегистрирован: 28.12.2017
osintaras
Offline
Зарегистрирован: 28.12.2017

Пины перепутал в вашем скетче. В начале нужно было задать sda, а потом scl. Сменил - заработало.

dimin21590
dimin21590 аватар
Offline
Зарегистрирован: 26.10.2016

Ну вот какраз об етом хотел написать. )

Xomyc
Offline
Зарегистрирован: 10.04.2020

Народ, ссылки уже все битые. Пытаюсь подключить микросхему (не модуль готовый) по типичной схеме. На ардуино все работает, ту же фигня полная. Подключаю в D1, D2, питаю 5 вольт от отдельного БП. Скетч взял сверху, оставил вывод только даты. ВОт чего выдает.

Да ещще дату другу дал.

rtc.setTime(13, 39, 0);     // Set the time to 12:00:00 (24hr format)
  rtc.setDate(1, 1, 2021);   // Set the date to October 3th, 2010

85 xxxxxxxxx 2165.
15 May 2105.
0 xxxxxxxxx 2080.
40 xxxxxxxxx 2122.
85 xxxxxxxxx 2085.
75 xxxxxxxxx 2075.
50 xxxxxxxxx 2051.
33 xxxxxxxxx 2085.

 

Xomyc
Offline
Зарегистрирован: 10.04.2020

Народ, скачал последнюю библиотеку DS1307.h взял оттуда пример и часы пошли! Вот пример:

/*
  DS1307 RTC (Real-Time-Clock) Example

  Uno       A4 (SDA), A5 (SCL)
  Mega      20 (SDA), 21 (SCL)
  Leonardo   2 (SDA),  3 (SCL)
 */

#include <Wire.h>
#include <DS1307.h>


DS1307 rtc;


void setup()
{
  //init Serial port
  Serial.begin(9600);
  while(!Serial); //wait for serial port to connect - needed for Leonardo only

  //init RTC
  Serial.println("Init RTC...");
  rtc.begin();

  //only set the date+time one time
   rtc.set(0, 0, 8, 03, 01, 2021); //08:00:00 24.12.2014 //sec, min, hour, day, month, year

  //stop/pause RTC
  // rtc.stop();

  //start RTC
  rtc.start();
}


void loop()
{
  uint8_t sec, min, hour, day, month;
  uint16_t year;

  //get time from RTC
  rtc.get(&sec, &min, &hour, &day, &month, &year);

  //serial output
  Serial.print("\nTime: ");
  Serial.print(hour, DEC);
  Serial.print(":");
  Serial.print(min, DEC);
  Serial.print(":");
  Serial.print(sec, DEC);

  Serial.print("\nDate: ");
  Serial.print(day, DEC);
  Serial.print(".");
  Serial.print(month, DEC);
  Serial.print(".");
  Serial.print(year, DEC);

  //wait a second
  delay(1000);
}

Но после этого беру строки из примера, вставляю в свой скетч и время снова не идет и выдает 165:165:85.

Нашел некую странность. К ESP8266 у меня подключена светодиодная матрица. Она висит на D4.  В сктче я написал просто 4. И все работает. Но у esp8266 пишется если GPIO2, то 2, это как раз D4. Так вот у меня еще на D6 и D5 висит bme датчик. Я нашел как им управлять и вписал Wire.begin(D6, D5). Тут все нормально работает, ног если для матрицы я запишу не 4, а D4 или 2 от GPIO2, то матрица не работает. Вот я думаю может как-то и часы из-за этого билибержу кажут. Ведь если я их одни вешаю, то они работают.

В сообществе esp8266 разработчиков я вопрос задал, но как-то тихо там.