The Alpha Geek – Geeking Out

Project #11: ESP32 Feather – DS3231 Precision RTC – Mk03

Adafruit HUZZAH32 ESP32 Feather

——

——

ESP32 Feather - DS3231 Precision RTC

——

ESP32 Feather - DS3231 Precision RTC

——

ESP32 Feather - DS3231 Precision RTC

——

ESP32 Feather - DS3231 Precision RTC

——

Adafruit DS3231 Precision RTC FeatherWing

A Feather board without ambition is a Feather board without FeatherWings! This is the DS3231 Precision RTC FeatherWing: it adds an extremely accurate I2C-integrated Real Time Clock (RTC) with a Temperature Compensated Crystal Oscillator to any Feather main board. This RTC is the most precise you can get in a small, low power package. Most RTCs use an external 32kHz timing crystal that is used to keep time with low current draw.

With a CR1220 12mm lithium battery plugged into the top of the FeatherWing, you can get years of precision timekeeping, even when main power is lost. Great for datalogging and clocks, or anything where you need to really know the time.

DonLuc1908Mk03

1 x Adafruit HUZZAH32 ESP32 Feather
1 x Adafruit SHARP Memory Display
1 x Adafruit DS3231 Precision RTC FeatherWing
1 x CR1220 12mm Lithium Battery
1 x LED Green
1 x Push Button
1 x 100 Ohm
1 x 10K Ohm
14 x Jumper Wires 3″ M/M
2 x Jumper Wires 6″ M/M
1 x Full-Size Breadboard
1 x SparkFun Cerberus USB Cable

Adafruit HUZZAH32 ESP32 Feather

LG1 – Digital 21
PB1 – Digital 17
SCK – Digital 13
MOS – Digital 12
SSD – Digital 27
SDA – Digital 23
SCL – Digital 22
GND – GND
VIN – +3.3V

DL1908Mk03p.ino

// ***** Don Luc Electronics *****
// Software Version Information
// Project #11: HUZZAH32 ESP32 Feather - DS3231 Precision RTC - Mk03
// 08-03
// DonLuc1908Mk03p.ino 08-03
// Adafruit HUZZAH32 ESP32 Feather Board
// SHARP Display
// LED Green
// Push Button
// DS3231 Precision RTC 

// include Library Code
#include <Adafruit_SharpMem.h>
#include <Adafruit_GFX.h>
#include <RTClib.h>
#include <Wire.h>

// SHARP Memory Display
// any pins can be used
#define SHARP_SCK  13
#define SHARP_MOSI 12
#define SHARP_SS   27
// Set the size of the display here, e.g. 144x168!
Adafruit_SharpMem display(SHARP_SCK, SHARP_MOSI, SHARP_SS, 144, 168);
// The currently-available SHARP Memory Display (144x168 pixels)
// requires > 4K of microcontroller RAM; it WILL NOT WORK on Arduino Uno
// or other <4K "classic" devices!
#define BLACK 0
#define WHITE 1
int minorHalfSize; // 1/2 of lesser of display width or height

// LED Green
int iLEDGreen =  21;                 // LED Green
int stateLEDGreen = LOW;             // stateLEDGreen 

// Button
int iBut1 = 17;                      // Button 1
int ButState1;                       // Variable for reading the button status
int previous = LOW;                  // previous
long lTime = 0;                      // lTime
long debounce = 500;                 // debounce

// DS3231 Precision RTC 
RTC_DS3231 RTC;
String sDate;
String sTime;

void loop() {
  
  // Read the state of the button value
  ButState1 = digitalRead(iBut1);
  
  // Check if the button is pressed
  if (ButState1 == HIGH && previous == LOW && millis() - lTime > debounce) 
  {

     if(stateLEDGreen == HIGH)
     {
      
        // stateLEDGreen = LOW
        stateLEDGreen = LOW;
        // DS3231 Precision RTC 
        timeRTC();
        // SHARP Memory Display Off
        isDisplayOff();

             
     } else 
     {

        // stateLEDGreen = HIGH
        stateLEDGreen = HIGH;
        // DS3231 Precision RTC 
        timeRTC(); 
        // SHARP Memory Display On
        isDisplayOn();
            
    }
    lTime = millis();

  } 

  // iLEDGreen
  digitalWrite(iLEDGreen, stateLEDGreen);
  previous == ButState1;  
 
}

getDisplay.ino

// SHARP Memory Display On
void isDisplayOn() {

    // Clear Display
    display.clearDisplay();
    // text display date, time, LED on
    display.setRotation(4);
    display.setTextSize(2);
    display.setTextColor(BLACK);
    display.setCursor(10,10);
    display.println( sDate );
    display.setCursor(10,30);
    display.println( sTime );
    display.setTextSize(3);
    display.setCursor(10,55);
    display.println("LED On");
    display.refresh();

}
// SHARP Memory Display Off
void isDisplayOff() {

    // Clear Display
    display.clearDisplay();
    // text display date, time, LED off
    display.setRotation(4);
    display.setTextSize(2);
    display.setTextColor(BLACK);
    display.setCursor(10,10);
    display.println( sDate );
    display.setCursor(10,30);
    display.println( sTime );
    display.setTextSize(3);    
    display.setCursor(10,55);
    display.println("LED Off");
    display.refresh();

}

getRTCDS3231.ino

// DS3231 Precision RTC 
void setupRTC() {

  // DS3231 Precision RTC   
  RTC.begin();
  if (! RTC.begin()) {
    while (1);
  }
  
  DateTime now = RTC.now();

  if (RTC.lostPower()) {
    // Following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
  
}
// timeRTC
void timeRTC() {

    // DS3231 Precision RTC 
    sDate = "";
    sTime = "";
    
    DateTime now = RTC.now();

    // sData
    sDate += String(now.year(), DEC);
    sDate += "/";
    sDate += String(now.month(), DEC);
    sDate += "/";
    sDate += String(now.day(), DEC);
    
    // sTime
    sTime += String(now.hour(), DEC);
    sTime += ":";
    sTime += String(now.minute(), DEC);
    sTime += ":";
    sTime += String(now.second(), DEC);

}

setup.ino

// Setup
void setup() {

  // SHARP Display start & clear the display
  display.begin();
  display.clearDisplay();

  // Button 1
  // Initialize the button as an input
  pinMode(iBut1, INPUT);
  
  // Initialize the LED Green
  pinMode(iLEDGreen, OUTPUT);

  // DS3231 Precision RTC 
  setupRTC();

  // stateLEDGreen = LOW
  stateLEDGreen = LOW;
  // DS3231 Precision RTC 
  timeRTC();
  // SHARP Memory Display Off
  isDisplayOff();  
    
}

Follow Us

Web: https://www.donluc.com/
Web: http://neosteamlabs.com/
Web: http://www.jlpconsultants.com/
YouTube: https://www.youtube.com/channel/UC5eRjrGn1CqkkGfZy0jxEdA
Facebook: https://www.facebook.com/neosteam.labs.9/
Instagram: https://www.instagram.com/neosteamlabs/
Pinterest: https://www.pinterest.com/NeoSteamLabs/
Twitter: https://twitter.com/labs_steam
Etsy: https://www.etsy.com/shop/NeoSteamLabs

Don Luc

Leave a Reply

Your email address will not be published. Required fields are marked *

Categories
Archives