이 튜토리얼에서는 실시간 클록(RTC)과 ESP32 및 OLED 디스플레이 와의 인터페이스 에 대해 알아보겠습니다 .
우리는 ESP32 마이크로컨트롤러를 사용하여 DS3231 RTC 모듈을 통해 정확한 시간을 추적하고 SPI OLED에 표시할 것입니다. ESP32는 단순한 마이크로컨트롤러 그 이상입니다. Wi-Fi 및 블루투스 칩과 39개의 GPIO 핀을 내장하고 있으며 SPI, I2C, UART 등 모든 통신 프로토콜을 지원합니다. ESP32를 처음 사용하시는 분은 먼저 ESP32 시작하기 튜토리얼을 참고하시기 바랍니다.

목차
ESP32용 DS3231 RTC 모듈이란 무엇인가요?
OLED 디스플레이에 대해 알아보기
DS3231 RTC 모듈 기술 사양
DS3231 모듈을 사용한 ESP32 실시간 시계 제작에 필요한 재료
DS3231 RTC 모듈 회로도 및 회로 연결
코드 설명:
기술 개요 및 GitHub 저장소
자주 묻는 질문
결론: ESP32 DS3231 RTC 프로젝트 마스터하기
DS3231 모듈을 활용한 실시간 구현 프로젝트
ESP32용 DS3231 RTC 모듈이란 무엇인가요?
DS3231은 RTC (실시간 시계) 모듈입니다. 대부분의 전자 프로젝트에서 날짜와 시간을 유지하는 데 사용됩니다. 이 모듈은 자체 코인 셀 전원 공급 장치를 사용하여 주 전원이 차단되거나 MCU가 하드 리셋되더라도 날짜와 시간을 유지합니다. 따라서 이 모듈에 날짜와 시간을 한 번 설정하면 항상 정확하게 유지됩니다. DS1307, DS3231 등 다양한 종류의 RTC IC가 있습니다.

ESP32 핀 배치 및 연결 정보를 포함한 DS3231 RTC 모듈
저희는 이전에 아래 프로젝트에서 DS3231 RTC를 아두이노와 함께 사용했습니다 .
아두이노를 이용한 자동 반려동물 사료 공급기
아두이노 데이터 로거
참고: 이 모듈을 처음 사용할 때는 날짜와 시간을 설정해야 합니다. RTC IC DS1307을 사용할 수도 있습니다. 저희는 이전에 아두이노와 함께 DS1307을 사용한 사례를 다룬 적이 있습니다 .
OLED 디스플레이에 대해 알아보기
OLED는 " 유기 발광 다이오드(Organic Light Emitting Diode)" 의 약자입니다 . 대부분의 TV에 사용되는 기술과 동일하지만, TV보다 픽셀 수가 적습니다. 이 멋진 디스플레이 모듈을 사용하면 프로젝트를 더욱 멋지게 만들 수 있어 매우 흥미롭습니다. OLED 디스플레이와 그 종류에 대한 자세한 내용은 여기에서 확인할 수 있습니다 .


흑백 7핀 SSD1306 0.96인치 OLED 디스플레이 DS3231 모듈 기반 ESP32 실시간 클록 회로도
본 튜토리얼에서는 흑백 7핀 SSD1306 0.96인치 OLED 디스플레이를 사용합니다 . 이 디스플레이를 선택한 이유는 SPI 3선 모드, SPI 4선 모드, IIC 모드 등 세 가지 통신 프로토콜을 지원하기 때문입니다. 이 튜토리얼에서는 가장 빠른 통신 모드이자 기본 설정인 SPI 4선 모드에서 모듈을 사용하는 방법을 다룹니다.
아래 표는 DS3231 모듈의 핀 배열 및 기능에 대한 설명 입니다 .
| 핀 번호 | 핀 이름 | 다른 이름 | 용법 |
| 1 | 지상 | 지면 | 모듈의 접지 핀 |
| 2 | Vdd | Vcc, 5V | 전원 핀 (3-5V 허용) |
| 3 | SCK | D0, SCL, CLK | 클럭 핀 역할을 합니다. I2C와 SPI 모두에 사용됩니다. |
| 4 | SDA | 디1,모시 | 모듈의 데이터 핀입니다. IIC와 SPI 모두에 사용됩니다. |
| 5 | RES | RST, 리셋 | 모듈을 재설정합니다(SPI 통신 중 유용). |
| 6 | DC | A0 | 데이터 명령 핀. SPI 프로토콜에 사용됩니다. |
| 7 | CS | 칩 선택 | SPI 프로토콜에서 둘 이상의 모듈을 사용할 때 유용합니다. |
이 튜토리얼에서는 모듈을 4선 SPI 모드로 작동시키는 방법만 간단히 살펴보겠습니다. 나머지 내용은 다른 튜토리얼에서 다루도록 하겠습니다.
아두이노 커뮤니티에서는 이미 이러한 작업을 훨씬 간단하게 만들어주는 다양한 라이브러리를 제공하고 있습니다. 저는 몇 가지 라이브러리를 사용해 본 결과, Adafruit_SSD1306 라이브러리가 사용하기 매우 쉽고 다양한 그래픽 옵션을 제공한다는 것을 알게 되어 이 튜토리얼에서도 해당 라이브러리를 사용하겠습니다. 하지만 프로젝트에 메모리나 속도 제약이 있다면, 더 빠르고 프로그램 메모리 사용량도 적은 U8g 라이브러리를 사용해 보세요.
또한, 저희는 OLED를 라즈베리 파이 및 아두이노와 도 연결했습니다 .
DS3231 RTC 모듈 기술 사양
ESP32 기반의 DS3231 RTC 모듈은 실시간 시계 프로젝트에 다음과 같은 주요 사양을 제공합니다.
- 작동 전압: 3.3V ~ 5V (ESP32 호환)
- 통신 프로토콜: I2C (SCL/SDA 핀)
- 백업 전원: CR2032 코인형 배터리
- 정확도: ±2ppm (연간 약 ±1분 오차)
- 온도 범위: -40°C ~ +85°C
- 소비 전류: 1.5µA (배터리 백업 모드)
우리는 ESP32 마이크로컨트롤러를 사용하여 DS3231 RTC 모듈을 통해 정확한 시간을 추적하고 SPI OLED에 표시할 것입니다.
DS3231 모듈을 사용한 ESP32 실시간 시계 제작에 필요한 재료
ESP32
DS3231 RTC 모듈
7핀 128×64 OLED 디스플레이 모듈(SSD1306)
수-암 와이어
브레드보드
DS3231 RTC 모듈 회로도 및 회로 연결
RTC3231을 ESP 보드에 연결하는 회로도는 아래와 같습니다.

ESP32 DS3231 RTC 배선도
RTC DS3231 IC는 I2C 통신 모드를 사용합니다. 이 IC에는 SCL, SDA, Vcc, GND 핀이 있습니다. ESP32와 RTC 모듈 의 연결 방법은 아래와 같습니다.
RTC의 SCL은 ESP32의 SCL, 즉 D22 핀에 연결됩니다.
RTC의 SDA -> ESP3,2의 SDA, 즉 D21 핀
RTC의 접지 -> ESP32의 접지
RTC의 Vcc -> ESP32의 Vcc
여기서는 SPI 모드를 사용하여 128x64 OLED 디스플레이 모듈(SSD1306)을 ESP32에 연결합니다. 따라서 7개의 핀이 사용됩니다. ESP32와의 연결은 다음과 같습니다.
OLED의 CS(칩 선택) 핀 -> ESP32의 D5 핀
OLED의 DC 핀 -> ESP32의 D4 핀
OLED의 RES 핀 -> ESP32의 D2 핀
OLED의 SDA 핀 -> ESP32의 MOSI, 즉 D23 핀
OLED의 SCK 핀 -> ESP32의 D18 핀(즉, SCK 핀)
OLED의 Vdd -> ESP32의 Vcc
OLED 접지 -> ESP32 접지
DS3231 모듈을 사용한 ESP32 실시간 시계
코드 설명:
ESP32용 전체 코드는 이 글의 끝부분에 나와 있습니다. 여기서는 코드의 몇 가지 중요한 부분을 설명하겠습니다.
코드에서 사용할 몇 가지 라이브러리가 필요하며, 아래 링크에서 다운로드할 수 있습니다.
1. Adafruit_SSD1306 : https://github.com/adafruit/Adafruit_SSD1306
2. SPI : https://github.com/PaulStoffregen/SPI
3. Adafruit_GFX : https://github.com/adafruit/Adafruit-GFX-Library
4. RTClib : https://github.com/adafruit/RTClib
그래서 우리는 모든 도서관을 포함시켰습니다.
#include <SPI.h> // for OLED display
#include <Wire.h> // for I2C with RTC module
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h> // for display graphics
#include "RTClib.h" //to show time
다음으로 OLED의 모든 핀을 정의합니다. RTC 모듈의 핀은 WIRE 라이브러리에 이미 정의되어 있으므로 따로 정의할 필요가 없습니다.
#define OLED_MOSI 23
#define OLED_CLK 18
#define OLED_DC 4
#define OLED_CS 5
#define OLED_RESET 2
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
설정 함수 에서는 rtc.Adjust(DateTime(__DATE__, __TIME__)) 함수를 호출하여 PC 시간에 맞춰 시간을 설정합니다.
void setup()
{
Serial.begin(9600);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
rtc.adjust(DateTime(__DATE__, __TIME__));
그 후 OLED에 표시하기 위한 디스플레이 함수를 호출합니다.
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();
display.setTextColor(WHITE);
//display.startscrollright(0x00, 0x0F); // You can uncomment this line to scroll your text on oled
display.setTextSize(2);
display.setCursor(0,5);
display.print(" Clock "); //This will Display Clock on OLED for 3 seconds
display.display();
delay(3000);
}
마지막으로, 루프 함수 내에서 미리 정의된 DateTime 변수 에 시간을 저장 하고 setTextSize, setCursor 등의 표시 함수를 사용하여 시간을 표시합니다. 필요에 따라 이러한 함수를 설정하고 display.println 함수를 사용하여 OLED에 표시하세요 .
void loop()
{
DateTime now = rtc.now();
display.clearDisplay();
display.setTextSize(2);
display.setCursor(75,0);
display.println(now.second(), DEC);
자, 이렇게 ESP32를 이용해 OLED에 시간을 표시할 수 있습니다. ESP는 IoT 기능에 특화되어 있기 때문에 이를 활용해 인터넷에 시간을 게시할 수도 있습니다. 다음 글에서는 RTC 모듈 없이 ESP에 인터넷 시간을 표시하는 방법을 알려드리겠습니다.
기술 개요 및 GitHub 저장소
이 섹션에서는 프로젝트 구성 요소, 기능 및 작동 논리에 대한 개요를 제공합니다. 중요한 기술적 세부 사항과 회로 동작뿐만 아니라 다양한 모듈 간의 상호 작용을 보여줍니다. GitHub를 통해 시스템의 데이터 흐름과 코드 구조를 확인할 수 있습니다.
자주 묻는 질문
⇥ I2C를 사용하여 DS3231 RTC 모듈을 ESP32와 연결하는 방법은 무엇입니까?
Vcc를 3.3V/5V에, SDA를 GPIO21에, SCL을 GPIO22에, GND를 GND에 연결하십시오.
⇥ ESP32와 DS3231 RTC를 사용하는 프로젝트에서 어떤 I2C 라이브러리가 사용되나요?
Adafruit의 RTClib 라이브러리가 사용됩니다.
⇥ ESP32를 사용하여 16x2 LCD에 실시간 시계 데이터를 표시하는 방법은 무엇일까요?
I2C LCD, I2C 연결 및 LiquidCrystal_I2C 라이브러리를 사용하여 시간을 출력해 보세요.
⇥ 정전 시 DS3231 모듈은 어떻게 시간을 유지합니까?
내부 배터리(CR2032) 백업을 통해 시간을 유지합니다.
결론: ESP32 DS3231 RTC 프로젝트 마스터하기
이 종합적인 튜토리얼에서는 DS3231 모듈을 사용하여 ESP32 실시간 시계(RTC)를 성공적으로 구축하는 데 필요한 모든 것을 다룹니다. DS3231 RTC 모듈의 회로도, ESP32 DS3231 RTC의 전체 배선도, 그리고 올바른 핀 구성에 대해 자세히 살펴보았습니다. DS3231 RTC 모듈과 ESP32의 조합은 배터리 백업 기능을 통해 정확한 시간 유지를 제공하므로, 정밀한 시간 관리가 필요한 IoT 프로젝트, 데이터 로거 및 자동화 시스템에 매우 적합합니다.
전체 프로젝트 코드
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "RTClib.h"
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
#define OLED_MOSI 23
#define OLED_CLK 18
#define OLED_DC 4
#define OLED_CS 5
#define OLED_RESET 2
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
void setup()
{
Serial.begin(9600);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
rtc.adjust(DateTime(__DATE__, __TIME__));
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();
display.setTextColor(WHITE);
//display.startscrollright(0x00, 0x0F);
display.setTextSize(2);
display.setCursor(0,5);
display.print(" Clock ");
display.display();
delay(3000);
}
void loop()
{
DateTime now = rtc.now();
display.clearDisplay();
display.setTextSize(2);
display.setCursor(75,0);
display.println(now.second(), DEC);
display.setTextSize(2);
display.setCursor(25,0);
display.println(":");
display.setTextSize(2);
display.setCursor(65,0);
display.println(":");
display.setTextSize(2);
display.setCursor(40,0);
display.println(now.minute(), DEC);
display.setTextSize(2);
display.setCursor(0,0);
display.println(now.hour(), DEC);
display.setTextSize(1);
display.setCursor(0,15);
display.println(now.day(), DEC);
display.print(daysOfTheWeek[now.dayOfTheWeek()]);
display.setTextSize(1);
display.setCursor(25,15);
display.println("-");
display.setTextSize(1);
display.setCursor(40,15);
display.println(now.month(), DEC);
display.setTextSize(1);
display.setCursor(55,15);
display.println("-");
display.setTextSize(1);
display.setCursor(70,15);
display.println(now.year(), DEC);
display.display();
}
원문 튜토리얼은 이 링크를 확인하시고, 다른 유용한 튜토리얼도 확인하세요.
PIC 마이크로컨트롤러와 RTC 모듈(DS3231) 인터페이스 연결: 디지털 시계
RTC 모듈(DS3231)과 MSP430의 인터페이스: 디지털 시계
'ESP32' 카테고리의 다른 글
| ESP32 CrowPanel 3.5인치 디스플레이 디지털 시계 (0) | 2026.01.01 |
|---|---|
| ESP32 3.5inch TFT-LCD 개발 환경 설정 - 문서로 제공할 것 (0) | 2026.01.01 |
| ESP32 4G/5G 및 GPS 인터페이스 (0) | 2026.01.01 |
| ESP32 및 ESP8266을 이용한 MicroPython 프로그래밍 (0) | 2025.12.29 |
| ESP32와 OLED 디스플레이를 이용한 인터넷 시계 (0) | 2025.12.26 |
| ESP-IDF Programming Guide (0) | 2025.12.24 |
| ESP32 타이머 구조와 타이머 인터럽트 실행 방법 (4) | 2025.12.24 |
| ESP32 타이머 및 타이머 인터럽트 (0) | 2025.12.24 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
캐어랩