아두이노

아두이노 UART 디버깅 콘솔 만들기 – 시리얼 명령어 처리 시스템 완전 구현

게임교수 2025. 4. 21. 07:58
반응형

아두이노 UART 디버깅 콘솔 만들기 – 시리얼 명령어 처리 시스템 완전 구현

임베디드 개발자라면 반드시 한 번쯤 만들어보는 도구가 바로 UART 디버깅 콘솔입니다. 시리얼 통신을 통해 장치에 명령을 보내고, 상태를 조회하며, 직접 LED를 제어하거나 센서값을 확인할 수 있는 CLI(Command Line Interface)는 디버깅 도구의 핵심입니다.

이번 글에서는 아두이노에서 시리얼 명령어를 파싱하고 처리하는 콘솔 시스템을 직접 구축하는 방법을 소개합니다.

1. 무엇을 만들 것인가?

  • 시리얼로 명령어 입력 → 처리 → 결과 응답
  • 예: LED ON, LED OFF, STATUS?, SET SPEED 50
  • 파싱 방식 → 문자열 비교 vs 문자열 분할 방식

2. 기본 하드웨어 구성

  • 아두이노 Uno/Nano
  • LED (13번 핀 기본 사용)
  • 시리얼 통신 (9600bps)

하드웨어 연결 없이도 동작 확인 가능 (13번 핀 LED 내장)

3. 예제 코드 – 기본 명령어 처리

먼저 간단한 문자열 비교 방식 예제를 봅시다.

String input = ""; void setup() { Serial.begin(9600); pinMode(13, OUTPUT); Serial.println("UART 명령어 콘솔 시작"); } void loop() { if (Serial.available()) { char c = Serial.read(); if (c == '\n' || c == '\r') { processCommand(input); input = ""; } else { input += c; } } } void processCommand(String cmd) { cmd.trim(); cmd.toUpperCase(); if (cmd == "LED ON") { digitalWrite(13, HIGH); Serial.println("LED ON"); } else if (cmd == "LED OFF") { digitalWrite(13, LOW); Serial.println("LED OFF"); } else if (cmd == "STATUS?") { Serial.print("LED 상태: "); Serial.println(digitalRead(13) ? "ON" : "OFF"); } else { Serial.println("알 수 없는 명령"); } }

📌 위 코드는 줄 단위 입력을 받아서 LED 제어 및 상태 확인이 가능한 구조입니다.

4. 고급 예제 – 인자 포함 명령 처리

문자열을 strtok() 또는 split 방식으로 분해하면 파라미터 처리도 가능합니다.

char buffer[64]; int index = 0; 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 (strcmp(token, "SET") == 0) { char* what = strtok(NULL, " "); char* value = strtok(NULL, " "); if (what && value) { if (strcmp(what, "SPEED") == 0) { int v = atoi(value); Serial.print("속도 설정: "); Serial.println(v); } } } }

📌 구조화된 파싱 방식은 센서 설정, PID 조정, EEPROM 저장 등의 고급 기능으로 쉽게 확장됩니다.

5. 응용 확장 방향

  • EEPROM에 설정 저장/불러오기
  • 센서 ON/OFF, 데이터 로깅 시작/정지
  • 모드 전환, 속도 설정, 캘리브레이션 명령

시리얼 명령어 시스템은 GUI 없는 펌웨어의 가장 강력한 UI가 됩니다. 보드를 바꿔도, 하드웨어가 달라도 이 구조는 계속 쓸 수 있어요.

6. 마무리

펌웨어를 처음 시작하는 개발자라면 반드시 익혀야 할 구조 중 하나가 바로 시리얼 명령어 인터페이스입니다.

LED On/Off로 시작해 속도 설정, PID 조정, EEPROM 저장까지 확장해보세요. 아두이노를 넘어 실제 임베디드 개발에서도 이 패턴은 널리 쓰이고 있습니다.

다음 글에서는 EEPROM 저장 기능 추가센서 연동 명령어 제어 시스템으로 발전시켜 보겠습니다.

반응형