Rabu, 26 Oktober 2016

Menambahkan RTC DS3231 pada board NodeMCU V1.0 (Arduino IDE)

DS3231 merupakan suatu I2C RTC murah yang memiliki tingkat akurasi yang tinggi dengan suatu integrated temperature compensated crystal oscillator (TCXO) dan crystal. Alat ini bekerja dengna suatu input baterai, dan menjaga akurasi dari waktu ketika sumber daya utama dari peralatan utama terputus.


 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:
  1. Hubungkan pin GND dari DS3231 ke GND pada board NodeMCU
  2. Hubungkan pin VCC dari DS3231 ke 3V3 pada board NodeMCU
  3. Hubungkan pin SCL dari DS3231 ke pin D1 pada board NodeMCU
  4. Hubungkan pin SDA dari DS3231 ke pin D2 pada board NodeMCU
  5. Instalasi RTC by Makuna by Michael C. Miller (Sketch->Include Library->Manage Library), dan pastikan (Tested on esp8266)

Gambar 5. Tampilan Library Manager
  1. Lakukan koding berikut ini:
#include <Wire.h>         //I2C library
#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);
}
 Gambar 6. Hasil Run Aplikasi


Salam,
Hendra.

1 komentar:

  1. 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"

    sketch_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.

    BalasHapus