본문 바로가기

ESP32

ESP32 내부 RTC를 사용하는 방법

반응형

 

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

 

위 단계를 완료하면 아래와 같은 출력을 확인할 수 있습니다. 

 

 

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩