Node MCU v3 esp 12e не дружит с RTC DS1307
- Войдите на сайт для отправки комментариев
Чт, 28/12/2017 - 18:55
Приветствую однополчане!
Играюсь с 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 модуль - все тоже самое, те же нереальные данные по времени.
Та же история с любым скетчем.
Ну к примеру вот этот 2017-12-27_16-15-02.png из библиотеки RTC by Makuna.
Вот монитор порта 2017-12-27_16-17-57.png
Если отключить RTC модуль - все тоже самое, те же нереальные данные по времени.
Та же история с любым скетчем.
Сканер i2c устройств часы не видит. Их как будто устройство совсем не подключено.
Такая же история с адаптером для SD-карты. Подключаю к пинам D5-D8, использую скетч из библиотеки SD, карта не определяется. Подключаюсь к ардуино уно - все прекрасно работает.
У меня была та же проелема я ее решил подключив к ногам 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); }У меня была та же проелема я ее решил подключив к ногам 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 - не заработало... Устройство вовсе не запускается...
Тот код которий я скидал то там модуль работал от 3.3в и все ок. Так что советую вам попробовать.
Как называется библиотека DS1307? Видимо у меня не установлена - выдает ошибку.
https://drive.google.com/open?id=1w7Nx7d4SWASqlyQfGCkenCvpH8F1tW9A
вот я залил свою версию
Поставил, не работает. Кинул 5В питание - тоже не работает. Со старым скетчем (библиотека RTC by Makuna) и пинами D1 и D2 работает и от 3В и от 5В...
Очень странно так как у меня под тем скетчем все работает уже как месяца 2 в режиме 24/7 без каких либо нареканий.
Может у вас другая версия ds1307? Можна фото?
https://yadi.sk/i/788Zb13B3RGcYJ
https://yadi.sk/i/0hkvjoUD3RGcYp
Пины перепутал в вашем скетче. В начале нужно было задать sda, а потом scl. Сменил - заработало.
Ну вот какраз об етом хотел написать. )
Народ, ссылки уже все битые. Пытаюсь подключить микросхему (не модуль готовый) по типичной схеме. На ардуино все работает, ту же фигня полная. Подключаю в D1, D2, питаю 5 вольт от отдельного БП. Скетч взял сверху, оставил вывод только даты. ВОт чего выдает.
Да ещще дату другу дал.
85 xxxxxxxxx 2165.
15 May 2105.
0 xxxxxxxxx 2080.
40 xxxxxxxxx 2122.
85 xxxxxxxxx 2085.
75 xxxxxxxxx 2075.
50 xxxxxxxxx 2051.
33 xxxxxxxxx 2085.
Народ, скачал последнюю библиотеку 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 разработчиков я вопрос задал, но как-то тихо там.