| 항목 | 직렬통신 (Serial) | 병렬통신 (Parallel) |
| 데이터 전송 방식 | 데이터를 한 비트씩 순차적으로 전송 | 여러 비트를 동시에 전송 |
| 필요한 선의 수 | 2~3개 (TX, RX, GND등) | 데이터 비트 수만큼 + 제어선 필요 |
| 속도 | 상대적으로 느릴 수 있음 | 보통 빠름 (단거리 기준) |
| 전송 거리 | 장거리 전송에 유리 | 전송 거리가 짧음, 노이즈에 민감 |
| 회로 복잡도 | 간단함 | 복잡함 |
| 예시 | UART, I2C, SPI 등 | LCD 16x2 직접 연결 방식 등 |
| 아두이노 예시 | Serial.begin(), Wire(I2C), SPI 등 | LiquidCrystal(rs, en, d4, d5, d6, d7) 등 |
| 항목 | UART | I2C | SPI |
|---|---|---|---|
| 통신 유형 | 점대점 (1:1) | 다중 슬레이브 (1:N) | 마스터-슬레이브 (1:N) |
| 거리 | 5m 이하 | 길다 | 가장 길다 |
| 하드웨어 복잡성 | 간단 (TX, RX) | 보통 (SDA, SCL + 풀업 저항) | 복잡 (MOSI, MISO, SCK, SS) |
| 프로토콜 | 없음 (비동기 통신) | 있음 (주소 기반, 비동기, 확인 신호 포함) | 없음 (단순 신호 흐름, 동기식) |
| 장점 | 선이 2개로 간단, 범용성 높음 | 장치 주소로 다중 연결 가능, 핀 절약 | 빠름, 전이중 가능, 간단한 구현 가능 |
| 단점 | 1:1 연결만 가능, 속도 제한 있음 | 느림, 풀업 저항 필요, 충돌 가능성 | 선이 많고 회로 복잡, 슬레이브 수 제한 |
(Universal asynchronous receiver/transmitter) : 범용 비동기화 송수신기
단위는 baud reate(보 레이트)
#include <SoftwareSerial.h>SoftwareSerial mySerial(7, 8);아두이노가 PC, 다른 장치와 통신할 때 사용하는 객체
UART 기반의 통신에 필요한 다양한 함수들을 제공
| 함수 | 설명 |
|---|---|
Serial.begin(9600) | 통신 속도 설정 |
Serial.available() | 수신 데이터가 있는지 확인 |
Serial.read() | 데이터 한 바이트 읽기 |
Serial.print() / println() | 출력 (줄바꿈 포함/미포함) |
Serial.write() | 이진 데이터 전송 |
| 항목 | 설명 |
|---|---|
| No Line Ending | 아무 것도 전송하지 않음 |
| 새줄(New Line) | 줄 바꿈 문자(LF or \n)가 자동으로 추가되어 전송 |
| 캐리지 리턴 | 캐리지 리턴 문자(CR or \r)가 추가되어 전송(커서를 맨 앞으로 이동 시킴) |
| Both LN & CR | 새 줄과 캐리지 리턴을 모두 수행 |
오늘은 평소 익숙하게 사용해왔지만 정확히는 몰랐던 Serial 통신에 대해 공부했다.
그동안 Serial.begin(9600)을 거의 외우다시피 써오며, 센서 출력 전 값 확인용으로 유용하게 활용했지만, 실제로 어떤 원리로 아두이노와 연결되어 작동하는지는 잘 알지 못했다.
이번 수업을 통해 아두이노의 통신 방식, 각 방식의 특징과 장단점, 그리고 내부적으로 어떻게 데이터가 전달되는지를 정리하며 학습해보았다.
단순히 사용하는 데에서 벗어나, 원리를 이해하고 나니 앞으로 더 깊이 있게 활용할 수 있을 것 같다.