이번에는 우리가 실제로 다루는 센서 → MCU → 시리얼 → PC 흐름에서
어떤 데이터가 어떻게 구조화되어 전송되는지를 분석하는 단계를 정리해보았다.
1. 시리얼 패킷이란?
UART로 데이터를 보낼 때, 한 줄씩 단순 문자만 보내는 경우도 있지만
센서 장치나 펌웨어에서는 보통 **정해진 규칙(=패킷 구조)**에 따라 전송돼.
1.1 UART 패킷 기본 구조 예시
다음은 흔히 쓰이는 시리얼 패킷 포맷이야:
[Header] + [Command] + [Data Length] + [Data] + [Checksum]
1.1.1 구성 설명:
필드명 역할
Header | 시작 표시 (예: 0xAA 0x55) |
Command | 명령 코드 (예: READ_TEMP = 0x01) |
Data Length | 데이터 길이 |
Data | 실제 센서값 등 |
Checksum | 오류 검출 (단순 XOR, SUM 등) |
1.2 예제: 온습도 센서 패킷 분석
센서에서 이런 패킷을 보냈다고 가정해보자:
0xAA 0x55 0x01 0x02 0x1C 0x64 0x83
바이트 설명
0xAA 0x55 | 시작 헤더 |
0x01 | 명령어: 온습도 요청 응답 |
0x02 | 데이터 길이 = 2바이트 |
0x1C | 온도 (섭씨 28도 = 0x1C) |
0x64 | 습도 (100% = 0x64) |
0x83 | Checksum (XOR 또는 총합) |
→ 이 데이터를 해석하면:
온도: 28°C / 습도: 100%
1.3 실제 분석 도구 예시
1.3.1 Arduino + Serial Monitor
if (Serial.available()) {
byte header1 = Serial.read();
if (header1 == 0xAA && Serial.read() == 0x55) {
byte cmd = Serial.read();
byte len = Serial.read();
byte temp = Serial.read();
byte humid = Serial.read();
byte checksum = Serial.read();
// 간단한 XOR 체크
if ((cmd ^ len ^ temp ^ humid) == checksum) {
Serial.print("Temp: "); Serial.println(temp);
Serial.print("Humid: "); Serial.println(humid);
}
}
}
시리얼 통신은 단순히 문자열을 왔다갔다 하는 게 아니다.
정해진 패킷 구조를 이해하고 해석하는 능력이 있으면,
펌웨어가 어떤 데이터를 다루는지, 센서 응답이 정상인지 알 수 있다.
→ 이 능력은 앞으로 펌웨어 디버깅, 패킷 분석, 서버 연동 로직 설계 전부에 핵심이 된다.
1.5 참고자료
- Serial Protocol Design – Predictable Designs
- Modbus, Custom Packet Design 등 참고 – EmbeTronicX
- UART Packet Analysis with Python – pySerial
'TIL > Embedded' 카테고리의 다른 글
[임베디드] Mosquitto란? (0) | 2025.06.07 |
---|---|
[임베디드] MQTT란 무엇인가? (0) | 2025.06.07 |
[임베디드] UART란 무엇인가? (기초 통신 프로토콜) (0) | 2025.05.25 |
[임베디드] GPIO란 무엇인가? 2 (0) | 2025.05.23 |
[임베디드] MCU란 무엇인가? (0) | 2025.05.23 |