파이썬으로 시리얼 통신 마스터하기: pySerial 라이브러리 활용 가이드
파이썬은 다양한 분야에서 널리 사용되는 강력한 프로그래밍 언어이지만, 시리얼 통신과의 연동을 통해 더욱 폭넓은 활용 가능성을 열어줍니다. 특히 IoT, 로봇 제어, 데이터 수집 등 다양한 분야에서 마이크로컨트롤러와 같은 장치와의 통신에 필수적으로 활용됩니다.
1, 시리얼 통신의 기본 개념 이해
시리얼 통신은 데이터를 비트 단위로 순차적으로 전송하는 방식으로, 단일 통신 채널을 통해 데이터를 주고받습니다. 마이크로컨트롤러, 센서, 모듈 등 다양한 장치와의 데이터 교환에 널리 사용되는 통신 방식입니다.
1.
1, 시리얼 통신의 장점
- 단순한 구조: 단일 통신 채널로 데이터를 전송하기 때문에 구현이 간단하고 저렴합니다.
- 유연성: 다양한 장치와의 호환성이 높고, 통신 거리 제한이 적습니다.
- 데이터 전송 속도 조절 가능: 바우드 레이트(Baud Rate)를 조절하여 데이터 전송 속도를 변경할 수 있습니다.
1.
2, 시리얼 통신의 종류
- RS-232: PC와 주변 장치 간 통신에 주로 사용되는 표준 통신 프로토콜입니다.
- RS-485: 장거리 통신에 적합하며, 여러 장치가 동시에 통신할 수 있는 기능을 제공합니다.
- SPI: 마이크로컨트롤러 내부 통신이나 주변 장치와의 통신에 자주 사용됩니다.
- I2C: 마이크로컨트롤러와 주변 장치 간 통신에 주로 사용되는 통신 프로토콜로, 데이터 전송량이 적고 전력 소비량이 낮습니다.
- UART: RS-232와 유사한 통신 방식으로, 마이크로컨트롤러 및 주변 장치 간 통신에 널리 사용됩니다.
2, 파이썬 시리얼 통신 라이브러리: pySerial 소개
파이썬에서 시리얼 통신을 구현하기 위해 가장 널리 사용되는 라이브러리는 바로 pySerial입니다. pySerial은 다양한 운영 체제(Windows, macOS, Linux)에서 사용 가능하며, 시리얼 포트 설정, 데이터 송수신, 에러 처리 등 시리얼 통신에 필요한 모든 기능을 제공합니다.
2.
1, pySerial 설치
pySerial 라이브러리는 pip 패키지 관리자를 통해 간편하게 설치할 수 있습니다.
python pip install pyserial
2.
2, pySerial 라이브러리 사용 예시
python import serial
시리얼 포트 설정
port = "COM3" # 시리얼 포트 번호 변경 필요 baudrate = 9600 # 바우드 레이트 변경 필요
시리얼 포트 열기
ser = serial.Serial(port, baudrate)
데이터 전송
data = "Hello, world!" ser.write(data.encode())
데이터 수신
receiveddata = ser.readline().decode() print(f"수신된 데이터: {receiveddata}")
시리얼 포트 닫기
ser.close()
위 예시 코드에서 시리얼 포트 번호와 바우드 레이트는 사용자의 환경에 맞게 변경해야 합니다.
3, pySerial 라이브러리 사용 상세 가이드
3.
1, 시리얼 포트 설정
pySerial을 사용하려면 먼저 시리얼 포트를 설정해야 합니다. 시리얼 포트 설정은 serial.Serial()
함수를 사용하여 수행할 수 있습니다.
python import serial
시리얼 포트 설정
port = "COM3" baudrate = 9600 timeout = 1 # 타임아웃 시간 설정 (초 단위)
시리얼 포트 객체 생성
ser = serial.Serial(port, baudrate, timeout=timeout)
port
: 시리얼 포트 이름 (Windows: COM1, COM2, ... / Linux: /dev/ttyUSB0, /dev/ttyACM0, ...)baudrate
: 바우드 레이트 (데이터 전송 속도)timeout
: 타임아웃 시간 (초 단위, 응답이 없을 경우 대기 시간)
3.
2, 데이터 송수신
pySerial을 사용하여 데이터를 송수신하는 방법은 간단합니다. ser.write()
메서드를 사용하여 데이터를 전송하고, ser.read()
또는 ser.readline()
메서드를 사용하여 데이터를 수신하면 됩니다.
3.2.
1, 데이터 전송
python
데이터 전송
data = "Hello, world!" ser.write(data.encode())
ser.write()
메서드는 데이터를 바이트 형태로 전송합니다. 따라서 문자열 데이터를 전송할 경우 encode()
메서드를 사용하여 바이트 형태로 변환해야 합니다.
3.2.
2, 데이터 수신
python
데이터 수신
received_data = ser.readline().decode()
ser.readline()
메서드는 시리얼 포트에서 줄 단위로 데이터를 수신합니다. decode()
메서드를 사용하여 바이트 형태의 데이터를 문자열 형태로 변환할 수 있습니다.
3.
3, 에러 처리
시리얼 통신 중 오류가 발생할 수 있습니다. 예를 들어, 시리얼 포트가 열려 있지 않거나, 데이터 전송 중 오류가 발생할 수 있습니다. pySerial은 serial.SerialException
클래스를 사용하여 시리얼 통신 오류를 처리합니다.
python import serial
try: # 시리얼 포트 열기 ser = serial.Serial(port, baudrate)
# 데이터 송수신
# ...
except serial.SerialException as e: print(f"시리얼 통신 오류 발생: {e}") finally: # 시리얼 포트 닫기 ser.close()
3.
4, 추가 기능
pySerial은 시리얼 통신을 위한 다양한 추가 기능을 제공합니다.
ser.flushInput()
: 입력 버퍼를 비웁니다.ser.flushOutput()
: 출력 버퍼를 비웁니다.ser.inWaiting()
: 입력 버퍼에 있는 바이트 수를 반환합니다.ser.isOpen()
: 시리얼 포트가 열려 있는지 확인합니다.ser.setRTS(True/False)
: RTS(Request to Send) 신호를 설정합니다.ser.setDTR(True/False)
: DTR(Data Terminal Ready) 신호를 설정합니다.
4, pySerial 라이브러리 활용 실제 예시
4.
1, Arduino와 통신
Arduino는 마이크로컨트롤러 기반의 오픈 소스 플랫폼으로, 시리얼 통신을 통해 파이썬 프로그램과 데이터를 주고받을 수 있습니다.
python import serial
시리얼 포트 설정
port = "COM3" # Arduino와 연결된 시리얼 포트 번호 baudrate = 9600
시리얼 포트 열기
ser = serial.Serial(port, baudrate)
while True: # Arduino에서 데이터 수신 received_data = ser.readline().decode()
# 수신된 데이터 출력
print(f"Arduino에서 수신된 데이터: {received_data}")
# 파이썬에서 데이터 전송 (예시)
data = "Hello from Python!"
ser.write(data.encode())
시리얼 포트 닫기
ser.close()
Arduino에서 센서 값을 읽어 시리얼 포트로 전송하고, 파이썬에서 이 값을 받아 처리
'파이썬배우기' 카테고리의 다른 글
아나콘다를 활용한 파이썬 주피터 노트북 설치 완벽 가이드 (8) | 2024.11.15 |
---|---|
파이썬과 Seaborn으로 데이터를 생생하게 전달하기 (1) | 2024.11.10 |
파이썬에서 디버거를 활용하여 오류 수정하기 (0) | 2024.11.09 |
초보자를 위한 파이썬 실수 4가지 (0) | 2024.11.09 |
사이킷런의 최신 업데이트와 기능 탐구: 데이터 과학의 최전선으로 (3) | 2024.11.09 |