Сначала несколько слов о источнике этой проблемы. Собрал схему: NodeMCU CP2102, модуль часов реального времени DS3231 и цветной дисплей 1.44' SPI 128*128. Поскольку и часах и в экране для управления используются контакты протокола I2c - D1, D2 CP2102, то для избежания конфликта - переназначил контакты управления экраном, а часы подключил к D1, D2. Скетч в такой форме работает, но криво: для работы схемы приходится по несколько раз запускать модуль NodeMCU CP2102 (снимать/подавать питание).
Решил с помощью библиотеки SoftwareWire.h организовать управление часами с других пинов, а за экраном оставить D1, D2, с которыми модуль экрана работает стабильно.
Воспользовался инструкцией с github :
#include <Wire.h>
#include <RtcDS3231.h>
RtcDS3231<TwoWire> Rtc(Wire);
Если вы хотите использовать библиотеку SoftwareWire, вы можете заменить это и она будет работать.
#include <SoftwareWire.h>
#include <RtcDS3231.h>
SoftwareWire myWire(SDA, SCL); // replace with the pins you use
RtcDS3231<SoftwareWire> Rtc(myWire);
Сделал все по этой инструкции, но при компиляции скетча - ошибка: 'rtcObject' was not declared in this scope в строке: RtcDateTime currentTime = rtcObject.GetDateTime();
Скетч под спойлером:
Как задекларировать в этом скетче rtcObject?
Решил с помощью библиотеки SoftwareWire.h организовать управление часами с других пинов, а за экраном оставить D1, D2, с которыми модуль экрана работает стабильно.
Воспользовался инструкцией с github :
#include <Wire.h>
#include <RtcDS3231.h>
RtcDS3231<TwoWire> Rtc(Wire);
Если вы хотите использовать библиотеку SoftwareWire, вы можете заменить это и она будет работать.
#include <SoftwareWire.h>
#include <RtcDS3231.h>
SoftwareWire myWire(SDA, SCL); // replace with the pins you use
RtcDS3231<SoftwareWire> Rtc(myWire);
Сделал все по этой инструкции, но при компиляции скетча - ошибка: 'rtcObject' was not declared in this scope в строке: RtcDateTime currentTime = rtcObject.GetDateTime();
Скетч под спойлером:
//#include <Wire.h> //I2C library
//#include <RtcDS3231.h> //RTC library
//RtcDS3231<TwoWire> rtcObject(Wire); //Uncomment for version 2.0.0 of the rtc library
#include <SoftwareWire.h>
#include <RtcDS3231.h>
SoftwareWire myWire(0, 2); // replace with the pins you use
RtcDS3231<SoftwareWire> Rtc(myWire);
void setup() {
Serial.begin(115200); //Starts serial connection
rtcObject.Begin(); //Starts I2C
RtcDateTime currentTime = RtcDateTime(18, 06, 25, 11, 49, 0); //define date and time object
rtcObject.SetDateTime(currentTime); //configure the RTC with object
}
void loop() {
RtcDateTime currentTime = rtcObject.GetDateTime(); //get the time from the RTC
char str[20]; //declare a string as an array of chars
sprintf(str, "%d/%d/%d %d:%d:%d", //%d allows to print an integer to the string
currentTime.Year(), //get year method
currentTime.Month(), //get month method
currentTime.Day(), //get day method
currentTime.Hour(), //get hour method
currentTime.Minute(), //get minute method
currentTime.Second() //get second method
);
Serial.println(str); //print the string to the serial port
delay(5000); //5 seconds delay
}
//#include <RtcDS3231.h> //RTC library
//RtcDS3231<TwoWire> rtcObject(Wire); //Uncomment for version 2.0.0 of the rtc library
#include <SoftwareWire.h>
#include <RtcDS3231.h>
SoftwareWire myWire(0, 2); // replace with the pins you use
RtcDS3231<SoftwareWire> Rtc(myWire);
void setup() {
Serial.begin(115200); //Starts serial connection
rtcObject.Begin(); //Starts I2C
RtcDateTime currentTime = RtcDateTime(18, 06, 25, 11, 49, 0); //define date and time object
rtcObject.SetDateTime(currentTime); //configure the RTC with object
}
void loop() {
RtcDateTime currentTime = rtcObject.GetDateTime(); //get the time from the RTC
char str[20]; //declare a string as an array of chars
sprintf(str, "%d/%d/%d %d:%d:%d", //%d allows to print an integer to the string
currentTime.Year(), //get year method
currentTime.Month(), //get month method
currentTime.Day(), //get day method
currentTime.Hour(), //get hour method
currentTime.Minute(), //get minute method
currentTime.Second() //get second method
);
Serial.println(str); //print the string to the serial port
delay(5000); //5 seconds delay
}
Как задекларировать в этом скетче rtcObject?
Последнее редактирование: