Gambar 1. Tampilan DS3231
Secara internal perangkat NodeMCU V1.0 tidak memiliki RTC yang tetap mencatat perubahan waktu ketika dalam keadaan OFF. Jika proyek anda membutuhkan suatu pencatatan waktu yang akurat, suatu RTC eksternal dapat dipertimbangkan, walaupun sebenarnya anda dapat melakukan sinkronisasi waktu ke suatu server Network Time Protocol (NTP) setiap board NodeMCU diaktifkan, tetapi jika jaringan WIFI anda terganggu, maka sistem anda tidak dapat mengupdate waktu, dan juga hal yang perlu penjadi pertimbangan adalah sinkronisasi melalui WIFI membutuhkan power yang besar.
Gambar 2. Pin pada DS3231
Untuk menggunakan DS3231, anda perlu menghubungkan pin VCC ke sumber tegangan, dan GND ke ground pada board NodeMCU. Pin SCL (Serial Clock) dan SDA (Serial Data) dihubungkan ke pin SCL dan SDA board anda dengan rangkaian sebagai berikut:
Gambar 3. Interface antara DS3231 dengan board NodeMCU V1.0
Pada board NodeMCU V1.0, pin SCL dihubungkan ke pin D1 (GPIO 5), dan pin SDA dihubungkan ke pin D2 (GPIO 4), dan berikut ini adalah tabel pin board NodeMCU V1.0 dan pemanfaatannya.
Gambar 4. Pin pada NodeMCU V1.0 dan Pemanfaatannya
Langkah-langkah:
- Hubungkan pin GND dari DS3231 ke GND pada board NodeMCU
- Hubungkan pin VCC dari DS3231 ke 3V3 pada board NodeMCU
- Hubungkan pin SCL dari DS3231 ke pin D1 pada board NodeMCU
- Hubungkan pin SDA dari DS3231 ke pin D2 pada board NodeMCU
- Instalasi RTC by Makuna by Michael C. Miller (Sketch->Include Library->Manage Library), dan pastikan (Tested on esp8266)
Gambar 5. Tampilan Library Manager
- Lakukan koding berikut ini:
#include <RtcDS3231.h> //RTC library
#include <stdio.h>
RtcDS3231 rtcObject;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
delay(1000);
rtcObject.Begin(); //Starts I2C
RtcDateTime currentTime = RtcDateTime(16,10,25,17,33,0); //manually define date and time object
rtcObject.SetDateTime(currentTime); //configure the RTC with object
}
void loop() {
// put your main code here, to run repeatedly:
RtcDateTime currentTime = rtcObject.GetDateTime(); //get the time from the RTC
char str[15]; //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.print("RTC: ");
Serial.println(str);
delay(1000);
}
Arduino: 1.8.9 (Windows 8), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200"
BalasHapussketch_oct22a:5:1: error: invalid use of template-name 'RtcDS3231' without an argument list
RtcDS3231 rtcObject;
^
C:\Users\ASUS\AppData\Local\Temp\arduino_modified_sketch_226315\sketch_oct22a.ino: In function 'void setup()':
sketch_oct22a:11:3: error: 'rtcObject' was not declared in this scope
rtcObject.Begin(); //Starts I2C
^
C:\Users\ASUS\AppData\Local\Temp\arduino_modified_sketch_226315\sketch_oct22a.ino: In function 'void loop()':
sketch_oct22a:18:29: error: 'rtcObject' was not declared in this scope
RtcDateTime currentTime = rtcObject.GetDateTime(); //get the time from the RTC
^
Multiple libraries were found for "Wire.h"
Used: C:\Users\ASUS\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\Wire
Not used: C:\Program Files (x86)\Arduino\libraries\Wire-master
exit status 1
invalid use of template-name 'RtcDS3231' without an argument list
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.