소프트웨어

ESP-IDF RTC DS3231(vscode)

pogop4321 2023. 8. 5. 11:48

#esp32 윈도우 vscode 환경
#선행(필수) ESP-IDF 윈도우 개발환경 세팅(VSCODE)
#선행(필수) ESP-IDF 외부 폴더에서 예제 파일 실행(VSCODE)


DS3231 모듈은 I2C 통신을 하는 RTC입니다.

로컬 환경에서 시간 정보가 필요할 때 사용됩니다.

CR2032가 들어가는 큰 모델과,

CR1025가 들어가는 작은 모델이 있습니다.

 

DS3231이 시계 모드로 사용될 때는 약 3µA 의 전력을 소모합니다.

CR2032 용량은 약 200mAh

CR1025 용량은 약 30mAh

 

  • CR2032를 사용할 경우 200,000/3 = 66,666시간/24시간/365일 = 7.6년
  • CR1025를 사용할 경우 30,000/3 = 10,000시간/24시간/365일 = 1.1년

 

ESP32로부터 전원을 공급 받고 있을 때는 배터리의 전력을 소비하지 않기 때문에,

위의 수명은 전원 연결이 없을 때의 예상 수명입니다.

이 글은 CR1025를 사용한 DS3231 모듈의 시간 확인 예제입니다.

 

1.결선

 

 

2.ESP-IDF Sample project 생성

 

ESP-IDF 외부 폴더에 예제 파일 실행 (vscode)

#esp32 윈도우 vscode 환경 #선행(필수) ESP-IDF 윈도우 개발환경 세팅(VSCODE) 1) VSCODE에서 'F1' ESP-IDF: New Project 엔터 *실행 안 되면 VSCODE 파일 - 폴더열기 경로 C:\Espressif\frameworks\esp-idf-v5.0.1\examples\get-started

pthaus.tistory.com

 

 

3.components 설치

링크에서 아래 세 component를 다운 받습니다.

  • ds3231
  • esp_idf_lib_helpers
  • i2cdev

또는 아래 파일을 다운 받아줍니다. 

components.zip
0.02MB

 

 

프로젝트 폴더 안에 components 폴더를 만들고

다운 받은 세 components를 복사합니다.

 

 

4.예제 코드

main.c

#include <stdio.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <ds3231.h>
#include <string.h>

void ds3231_test(void *pvParameters)
{
    i2c_dev_t dev;
    memset(&dev, 0, sizeof(i2c_dev_t));

    ESP_ERROR_CHECK(ds3231_init_desc(&dev, 0, 21, 22));

    struct tm time = {
        .tm_year = 123, // (2023 - 1900)
        .tm_mon  = 11,
        .tm_mday = 15,
        .tm_hour = 0,
        .tm_min  = 50,
        .tm_sec  = 10
    };
    ESP_ERROR_CHECK(ds3231_set_time(&dev, &time));

    while (1)
    {

        vTaskDelay(pdMS_TO_TICKS(2000));

        if (ds3231_get_time(&dev, &time) != ESP_OK)
        {
            printf("Could not get time\n");
            continue;
        }

        printf("%04d-%02d-%02d %02d:%02d:%02d \n", time.tm_year + 1900, time.tm_mon + 1,
            time.tm_mday, time.tm_hour, time.tm_min, time.tm_sec);
    }
}

void app_main()
{
    ESP_ERROR_CHECK(i2cdev_init());
    xTaskCreate(ds3231_test, "ds3231_test", configMINIMAL_STACK_SIZE * 3, NULL, 5, NULL);
}

 

idf.py flash monitor

2초에 한 번씩 시간을 읽어와 출력하는 예제입니다.