**시리얼 통신(Serial Communication)**은 아두이노와 PC, 센서, 또는 다른 마이크로컨트롤러 보드 간에 한 번에 1비트씩 순차적으로 데이터를 주고받는 표준 직렬 통신입니다.
1. 시리얼 통신 용어 사전 (Glossary)
- UART (Universal Asynchronous Receiver-Transmitter): 별도의 공통 클록 신호선 없이 지정된 속도로 데이터를 송수신하는 비동기 직렬 통신 장치입니다.
- Baud Rate (보레이트): 1초 동안 송수신되는 비트(Bit)의 수를 나타내는 통신 속도 단위입니다. (예: 9600 bps = 초당 9600비트)
- TX (Transmit) / RX (Receive): 송신선(TX, 아두이노 1번 핀)과 수신선(RX, 아두이노 0번 핀)입니다. (상대 장치와 RX-TX 서로 교차 연결)
- Serial Buffer (시리얼 버퍼): 수신된 시리얼 데이터를 잠시 보관하는 64바이트 임시 큐(Queue) 메모리 공간입니다.
2. 시리얼 데이터 수신 및 명령어 처리
/*
시리얼 모니터에 'ON' 또는 'OFF' 텍스트 명령어를 입력 받아 LED 제어
*/
void setup() {
Serial.begin(9600); // 통신 속도 9600bps 초기화
pinMode(13, OUTPUT);
Serial.println("명령어를 입력하세요: ON 또는 OFF");
}
void loop() {
// 시리얼 버퍼에 데이터가 들어와 있는지 확인
if (Serial.available() > 0) {
String inputStr = Serial.readStringUntil('
'); // 줄바꿈(
)을 만날 때까지 문자열 읽기
inputStr.trim(); // 양쪽 공백 및 개행문자 제거
if (inputStr == "ON") {
digitalWrite(13, HIGH);
Serial.println("-> 결과: LED가 켜졌습니다.");
} else if (inputStr == "OFF") {
digitalWrite(13, LOW);
Serial.println("-> 결과: LED가 꺼졌습니다.");
} else {
Serial.print("-> 알 수 없는 명령어: ");
Serial.println(inputStr);
}
}
}
3. 시리얼 플로터 (Serial Plotter) 그래픽 활용
아두이노 IDE [툴] $ ightarrow$ [시리얼 플로터]를 이용하면 여러 센서 수치를 동시에 그래프 파형으로 비교할 수 있습니다.
- 규칙: 여러 값을 한 줄에 콤마(
,)나 탭(\t)으로 구분하여 출력하고 마지막에println을 수행하면 됩니다.
void loop() {
int val1 = analogRead(A0); // 조도 센서 수치
int val2 = analogRead(A1); // 가변저항 수치
// 라벨과 함께 출력하면 범례가 표시됨
Serial.print("CDS:"); Serial.print(val1);
Serial.print(",");
Serial.print("POT:"); Serial.println(val2);
delay(40);
}
4. 자주 묻는 질문 (Q&A)
Q. Serial.print()와 Serial.write()의 차이는 무엇인가요?
A. Serial.print(65)는 숫자 65를 사람의 눈에 보이는 아스키 문자인 **"65" (2바이트 텍스트)**로 변환하여 보내지만, Serial.write(65)는 숫자 65의 아스키 바이너리 값 자체인 **'A' (1바이트 이진 데이터)**를 직접 보냅니다.