NTP를 사용하지 않고 ESP32 내부 RTC를 사용하는 방법
안녕하세요 여러분, 이 블로그에서는 ESP32의 내부 RTC를 사용하는 방법을 안내합니다. 이제 PCB의 크기를 증가시킬 뿐만 아니라 BOM 비용도 증가시키는 외부 RTC 칩에 의존할 필요가 없습니다. 이 기술을 사용하면 외부 RTC나 NTP 서버를 사용하지 않고도 RTC 기반 애플리케이션을 쉽게 구현할 수 있습니다.
이 프로젝트의 가장 큰 장점은 ESP32 보드와 USB 케이블 하나만 있으면 프로그래밍할 수 있다는 것입니다. 이 ESP32 RTC는 오프라인에서도 작동할 수 있습니다.
이 가이드는 ESP32 아두이노 코어를 사용하는 아두이노 프레임워크를 기반으로 합니다. ESp32의 내부 RTC 기능을 사용하려면 Arduino용 ESP32Time 라이브러리를 설치해야 합니다.
설치 방법은 스케치 >> 라이브러리 포함 >> 라이브러리 관리 섹션에서 할 수 있습니다.
이제 ESP32Time을 검색하고 설치 버튼을 클릭하여 아래 라이브러리를 fbiego로 설치합니다. 설치하는 데 몇 초 정도 걸립니다.
소스 코드 :
ESP32Time 라이브러리를 사용하여 ESP32 마이크로 컨트롤러에서 시간을 설정하고 검색하는 방법의 예제입니다. 설정 함수의 첫 줄은 시간을 2021년 1월 17일 15:24:30으로 설정하고 있으며, 다양한 형식으로 시간과 날짜를 검색하는 방법에 대한 몇 가지 예제가 있습니다. 이 코드에는 NTP를 사용하여 시간을 설정하는 방법과 구조체 tm으로 시간을 검색하는 방법에 대한 주석 처리된 예시도 포함되어 있습니다. 이 코드에는 사용할 시간 오프셋을 설정하는 옵션도 있습니다. 루프 함수에서는 지정된 형식으로 매 초마다 시간이 직렬 모니터에 인쇄됩니다.
/*
MIT License
Copyright (c) 2021 Felix Biego
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#include <ESP32Time.h>
//ESP32Time rtc;
ESP32Time rtc(3600); // offset in seconds GMT+1
void setup() {
Serial.begin(115200);
rtc.setTime(30, 24, 15, 17, 1, 2021); // 17th Jan 2021 15:24:30
//rtc.setTime(1609459200); // 1st Jan 2021 00:00:00
//rtc.offset = 7200; // change offset value
/*---------set with NTP---------------*/
// configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
// struct tm timeinfo;
// if (getLocalTime(&timeinfo)){
// rtc.setTimeStruct(timeinfo);
// }
}
void loop() {
// Serial.println(rtc.getTime()); // (String) 15:24:38
// Serial.println(rtc.getDate()); // (String) Sun, Jan 17 2021
// Serial.println(rtc.getDate(true)); // (String) Sunday, January 17 2021
// Serial.println(rtc.getDateTime()); // (String) Sun, Jan 17 2021 15:24:38
// Serial.println(rtc.getDateTime(true)); // (String) Sunday, January 17 2021 15:24:38
// Serial.println(rtc.getTimeDate()); // (String) 15:24:38 Sun, Jan 17 2021
// Serial.println(rtc.getTimeDate(true)); // (String) 15:24:38 Sunday, January 17 2021
//
// Serial.println(rtc.getMicros()); // (long) 723546
// Serial.println(rtc.getMillis()); // (long) 723
// Serial.println(rtc.getEpoch()); // (long) 1609459200
// Serial.println(rtc.getSecond()); // (int) 38 (0-59)
// Serial.println(rtc.getMinute()); // (int) 24 (0-59)
// Serial.println(rtc.getHour()); // (int) 3 (1-12)
// Serial.println(rtc.getHour(true)); // (int) 15 (0-23)
// Serial.println(rtc.getAmPm()); // (String) pm
// Serial.println(rtc.getAmPm(true)); // (String) PM
// Serial.println(rtc.getDay()); // (int) 17 (1-31)
// Serial.println(rtc.getDayofWeek()); // (int) 0 (0-6)
// Serial.println(rtc.getDayofYear()); // (int) 16 (0-365)
// Serial.println(rtc.getMonth()); // (int) 0 (0-11)
// Serial.println(rtc.getYear()); // (int) 2021
// Serial.println(rtc.getLocalEpoch()); // (long) 1609459200 epoch without offset
Serial.println(rtc.getTime("%A, %B %d %Y %H:%M:%S")); // (String) returns time with specified format
// formating options http://www.cplusplus.com/reference/ctime/strftime/
struct tm timeinfo = rtc.getTimeStruct();
//Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S"); // (tm struct) Sunday, January 17 2021 07:24:38
delay(1000);
}
OUTPUT
위 단계를 완료하면 아래와 같은 출력을 확인할 수 있습니다.
'ESP32' 카테고리의 다른 글
esp32 AT command 사용법 정리 (1) | 2024.10.28 |
---|---|
Arduino IDE로 ESP32를 프로그래밍하는 방법 (7) | 2024.10.28 |
MQTT란 무엇이며 어떻게 작동하는가 (8) | 2024.10.26 |
ESP32 실시간 클록 모듈(DS1302) RTC 모듈 (8) | 2024.10.24 |
ESP32 Arduino: 타이머 인터럽트 (6) | 2024.10.24 |
ESP32 타이머 및 타이머 인터럽트 (4) | 2024.10.24 |
ESP32: Bluetooth를 사용하여 WiFi 연결 설정 (7) | 2024.10.23 |
Android와 함께하는 ESP32 블루투스 (2) | 2024.10.23 |
더욱 좋은 정보를 제공하겠습니다.~ ^^