아두이노 EEPROM |
아두이노 EEPROM: 영구 데이터저장의 기본 개념과 실전 활용법
아두이노운용하는데 있어서 가장 중요한 문제점 하나가 데이터의 영구적인 저장과 관련된 부분일 것입니다.
저 또한 과거에 여러가지 프로젝트를 진행하는데 있어서 자주 사용해야 하는 문자열(String)을 저장해 두고 특정조건에서 해당 문자열을 불러와 원하는 작업을 하고, 작업 카운트를 누적하여 저장해 두고 하는 프로젝트를 진행한 바 있습니다.
이렇게 아두이노 프로젝트에서 데이터를 영구적으로 저장하는 것은 매우 매력적이며 중요합니다. 특히, 아두이노의 전원이 꺼져도 데이터를 유지해야 하는 경우에는 EEPROM(Electrically Erasable Programmable Read-Only Memory)이라는 메모리의 한 종류를 활용하면 매우 유용하기에 과거 경험에 맞추어 이글을 시작으로 총 5회에 걸쳐 아두이노에서 EEPROM을 사용하는 방법과 그 활용 사례에 대해 소개하도록 하겠습니다.
EEPROM의 기본개념
EEPROM은 비휘발성 메모리의 하나이며, 전원이 꺼져도 저장되어 있는 데이터를 유지할 수 있는 ROM의 일종인 메모리입니다. 또한, 아두이노 보드에는 기본적으로 이 EEPROM 메모리가 내장되어 있으며, 데이터 저장 및 읽기에 사용할 수 있습니다. 다만 내장되어 있는 EEPROM 메모리의 용량이 그리 넉넉한 크기가 아니다 보니 많은 량의 데이터를 보관하고 하는 경우에는 외장 EEPROM를 이용하기도 합니다. 예를 들어, ATmega328P 기반의 아두이노 보드에는 1,024바이트 즉 1KB크기의 EEPROM을 제공하고 있습니다.
이러한 내장 메모리의 한계로 외부 EEPROM을(아래 사진) 연결하여 메모리 용량을 확장하여 사용하기도 합니다.
EEPROM |
EEPROM 사용법: 기본 코드 예제
EEPROM을 사용하기 위해서는 먼저 EEPROM.h 라이브러리를 포함해야 합니다. 그런 다음, EEPROM.write()와 EEPROM.read() 함수를 사용하여 데이터를 저장하고 읽을 수 있습니다.
먼저 이 내장 EEPROM에 데이터를 저장하고 읽는 간단한 예제를 보도록 하겠습니다.
#include <EEPROM.h>
void setup() {
// 데이터 'A'를 주소 20에 저장
EEPROM.write(20, 'A');
// 주소 0에서 데이터 읽기
char myChar = EEPROM.read(20);
Serial.begin(9600); // 통신속도 지정
Serial.println(myChar); // 출력: A
}
void loop() {
// 빈 루프
}
위 코드는 'A'라는 문자를 20번지에 저장하고, 이를 다시 읽어 아두이노 개발자 환경인 IDE의 시리얼 모니터에 출력하는 예제입니다.
EEPROM.write(20, 'A'); 와 EEPROM.read(20);이 주요 쓰고 읽는 기능을 담당하는 함수입니다.
실전 활용법: 언제 그리고 왜 사용해야 할까?
- 사용자 설정 저장: 사용자 "설정 값"이나 기타 저장할 필요성이 있는 값들을 저장하여 전원이 꺼진 후에도 그 값을 잃어 버리지 않게 유지할 수 있습니다. 예를 들어, 온도 단위나 위치 설정, 모터 속도나 방향 등을 저장할 수 있습니다.
- 데이터 로깅: 온라인을 통해 즉각 전송할 수 없는 데이터가 있다면 이러한 형태의 데이터들을 임지로 저장할 때 매우 유용합니다. 예를 들어, 날씨 정보를 수집하는 프로젝트에서 데이터를 EEPROM에 저장한 후 나중에 전송할 수 있습니다. 하지만 ESP8266등 WiFi가 내장된 개발자 보드를 이용하면 실시간으로 데이터를 전송 시킬 수 있습니다. 이러한 형태의 IOT 구현은 차후 포스팅하도록 하겠습니다.
- 장치 상태 유지: 전원이 꺼졌다 켜져도 장치의 상태를 유지해야 할 때 유용합니다. 예를 들어, 조명 모드나 볼륨 설정 등을 기억하게 할 수 있습니다.
효율적인 사용을 위한 팁
- 쓰기 횟수 제한: EEPROM은 약 100,000회의 쓰기 사이클 제한이 있으므로, 불필요한 쓰기를 피해야 합니다. 십만회라는게 그리 많은 회수는 아니기에 프로그래밍에 있어 최적화하여 읽기 쓰기 등의 동작을 해야할 필요가 있습니다.
- 데이터 구조 최적화: 구조체를 사용하여 데이터를 효율적으로 관리하고 저장할 수 있습니다. 한정된 자원을 효율적으로 사용하기 위한 적절한 방법이기도 합니다.
결론
아두이노에서 EEPROM을 효과적으로 활용하면, 프로젝트의 기능성을 크게 향상시킬 수 있습니다. 데이터가 전원 사이클 동안에도 유지되므로 사용자 경험을 개선하고 다양한 응용 분야에서 활용할 수 있습니다. 이러한 기능을 잘 이해하고 적용하면 더욱 창의적이고 혁신적인 프로젝트를 개발할 수 있습니다. 이 글이 아두이노 프로젝트에서 EEPROM을 효과적으로 사용하는 데 도움이 되기를 바랍니다. 다음 편에서는 "초보자를 위한 아두이노 EEPROM 읽기 및 쓰기 코드 예제"로 좀 더 깊이 있는 예제로 EEPROM를 다루도록 하겠습니다.
댓글 쓰기