반응형
🔧 아두이노 UART 디버깅 콘솔 확장 – 설정값 EEPROM에 저장하기
UART 디버깅 콘솔에서 명령어를 통해 설정값을 바꾸는 것만으로는 부족합니다. 왜냐하면 전원을 껐다 켜면 값이 초기화되기 때문입니다. 실전에서는 반드시 설정을 저장하고 유지하는 구조가 필요합니다.
이번 글에서는 사용자가 설정한 값을 EEPROM에 저장하고 불러오는 기능을 UART 명령어 기반으로 구현해 보겠습니다. 목표는 시스템 재시작 후에도 설정이 그대로 유지되는 지속 가능한 설정 시스템을 만드는 것입니다.
✅ 1. 구현할 기능 요약
- SET SPEED 100 → 현재 속도 설정
- SAVE → 현재 속도 EEPROM에 저장
- LOAD → EEPROM에서 속도 불러오기
📦 2. 필요한 라이브러리
#include <EEPROM.h> // 내장 EEPROM 라이브러리 사용
이 라이브러리는 아두이노 IDE에서 기본 포함되어 있어 별도 설치 없이 사용 가능합니다.
💻 3. 전체 예제 코드 (주석 포함)
#include <EEPROM.h>
char buffer[64];
int index = 0;
int speedValue = 0; // 현재 속도 값 (설정값)
const int addr = 0; // EEPROM 주소 0번에 저장
void setup() {
Serial.begin(9600);
Serial.println("EEPROM 콘솔 시작");
loadSpeed(); // 부팅 시 EEPROM에서 불러오기
}
void loop() {
while (Serial.available()) {
char c = Serial.read();
if (c == '\n') {
buffer[index] = '\0';
parseCommand(buffer);
index = 0;
} else {
buffer[index++] = c;
}
}
}
void parseCommand(char* cmd) {
char* token = strtok(cmd, " ");
if (!token) return;
if (strcmp(token, "SET") == 0) {
char* key = strtok(NULL, " ");
char* val = strtok(NULL, " ");
if (key && val && strcmp(key, "SPEED") == 0) {
speedValue = atoi(val);
Serial.print("속도 설정됨: ");
Serial.println(speedValue);
}
} else if (strcmp(token, "SAVE") == 0) {
EEPROM.put(addr, speedValue);
Serial.println("EEPROM 저장 완료");
} else if (strcmp(token, "LOAD") == 0) {
loadSpeed();
Serial.print("EEPROM 로드됨, 속도: ");
Serial.println(speedValue);
} else {
Serial.println("알 수 없는 명령");
}
}
void loadSpeed() {
EEPROM.get(addr, speedValue);
}
📌 EEPROM.put()은 구조체 형태도 저장할 수 있어 다양한 설정 확장에 적합합니다.
중간광고자리
🧪 4. 테스트 방법 요약
- 시리얼 모니터 실행 (속도 9600bps)
- SET SPEED 80 입력 → 속도 설정됨 출력 확인
- SAVE 입력 → EEPROM 저장 완료 출력 확인
- 보드 리셋 후 LOAD 입력 → EEPROM에서 저장된 속도 불러오기 확인
이 과정을 통해 설정값이 꺼졌다 켜져도 유지되는 구조가 확인됩니다.
⚙️ 5. 확장 활용 가능성
- 속도뿐만 아니라 다음과 같은 설정에도 응용할 수 있습니다:
- PID 제어값 저장 (KP, KI, KD)
- 사용자 모드 / 기능 활성화 여부
- 장치 고유 ID
- 사용자의 커스터마이징 상태 등
이 구조는 임베디드 펌웨어 설정 인터페이스에서 가장 많이 쓰이는 패턴입니다.
중간광고자리
📘 6. 마무리
지금까지 만든 UART 콘솔 기반 설정 + EEPROM 저장 구조는 단순한 디버깅 도구를 넘어서, 실전 장비에 적용할 수 있는 설정 저장 시스템입니다.
이를 응용하면 다음과 같은 발전이 가능합니다:
- 부팅 시 자동으로 설정값 반영
- 시리얼 입력 외에도 버튼, 앱 등 다양한 입력 방식과 연결 가능
- OLED와 같은 출력장치와 결합해 실시간 피드백 UI 구성
📌 다음 편 예고: 센서값 + 설정값을 OLED에 표시하는 실시간 디버깅 인터페이스 만들기
📌 출처: ythouse.tistory.com
반응형
'아두이노' 카테고리의 다른 글
아두이노 + RTC 모듈로 디지털 시계 만들기 – DS3231 연결부터 LCD 출력까지 완벽 정리 (0) | 2025.04.23 |
---|---|
아두이노 블로그 시리즈 – 블루투스로 모터 제어하기 (HC-06) (0) | 2025.04.22 |
아두이노 UART 디버깅 콘솔 만들기 – 시리얼 명령어 처리 시스템 완전 구현 (0) | 2025.04.21 |
IR 리모컨으로 OLED 화면 제어하기 – 아두이노로 만든 무선 UI 시스템 (0) | 2025.04.21 |
I2C OLED 디스플레이 출력하기 – SSD1306 & U8g2 라이브러리 완전 활용법 (0) | 2025.04.21 |