ESP-IDF RTC DS3231(vscode)
#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 폴더를 만들고
다운 받은 세 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초에 한 번씩 시간을 읽어와 출력하는 예제입니다.