본문 바로가기
파이썬

파이썬으로 시리얼 통신 마스터하기: pySerial 라이브러리 활용 가이드

by 마이케이 2024. 11. 8.
반응형

pySerial
pySerial

파이썬으로 시리얼 통신 마스터하기: pySerial 라이브러리 활용 가이드

마이크로컨트롤러, 센서, 기타 장치와 컴퓨터를 연결하여 데이터를 주고받는 시리얼 통신은 다양한 분야에서 활용됩니다. 특히 파이썬은 풍부한 라이브러리 덕분에 시리얼 통신을 쉽고 효율적으로 구현할 수 있도록 지원합니다. 이 글에서는 파이썬의 대표적인 시리얼 통신 라이브러리인 pySerial을 활용하여 시리얼 통신의 기본 개념부터 실제 예제까지 다루어 보겠습니다.


1, 시리얼 통신의 기본 개념

시리얼 통신은 데이터를 비트 단위로 순차적으로 전송하는 방식입니다. 데이터를 한 번에 여러 비트를 전송하는 병렬 통신과 달리, 시리얼 통신은 하나의 데이터 라인을 통해 비트를 순차적으로 전송합니다.

1.
1, 시리얼 통신의 장점

  • 단선으로 통신 가능: 데이터를 전송하기 위해 별도의 선이 필요하지 않아 연결이 간단합니다.
  • 데이터 전송 속도가 빠르고 효율적: 병렬 통신보다 데이터를 더 빠르게 전송할 수 있습니다.
  • 장거리 통신: 데이터를 멀리 전송하는데 유리합니다.

1.
2, 시리얼 통신의 종류

  • RS-232: 가장 일반적인 시리얼 통신 프로토콜로, 컴퓨터와 주변 기기를 연결하는 데 널리 사용됩니다.
  • RS-485: RS-232보다 더 긴 거리, 더 많은 장치를 연결할 수 있으며, 전기적 간섭에 강합니다.
  • USB: 최근에는 USB 포트를 통해 시리얼 통신을 하는 경우가 많습니다.


2, 파이썬 시리얼 통신 라이브러리: pySerial

pySerial은 파이썬에서 시리얼 통신을 위한 가장 널리 사용되는 라이브러리입니다. 설치가 쉽고 사용하기 편리하며 다양한 기능을 제공하여 시리얼 통신을 손쉽게 구현할 수 있도록 지원합니다.

2.
1, pySerial 설치

python pip install pyserial

위 명령어를 실행하면 pySerial 라이브러리가 설치됩니다.

2.
2, pySerial 기본 사용법

pySerial 라이브러리를 사용하여 시리얼 포트를 열고 데이터를 송수신하는 과정은 다음과 같습니다.

python import serial

시리얼 포트 열기

ser = serial.Serial('/dev/ttyACM0', 9600) # 포트 이름과 보레이트 설정

데이터 전송

ser.write(b'Hello, world!')

데이터 수신

data = ser.read()

시리얼 포트 닫기

ser.close()

위 코드에서 `ser`는 시리얼 포트 객체를 나타내며, `/dev/ttyACM0`는 시리얼 포트 이름, 9600은 보레이트를 의미합니다. 보레이트는 초당 전송되는 데이터 비트 수를 나타내며, 시리얼 통신을 위해 송신측과 수신측의 보레이트를 동일하게 설정해야 합니다.


3, pySerial을 활용한 시리얼 통신 예제

다음은 pySerial 라이브러리를 사용하여 시리얼 포트를 통해 데이터를 주고받는 간단한 예제입니다.

python import serial import time

시리얼 포트 설정

port = '/dev/ttyACM0' # 시리얼 포트 이름 baudrate = 9600 # 보레이트 설정 ser = serial.Serial(port, baudrate)

while True: # 데이터 송신 datatosend = input('데이터를 입력하세요: ') ser.write(datatosend.encode()) # 문자열을 바이트 형식으로 변환하여 전송

# 데이터 수신
data_received = ser.readline().decode()  # 수신된 데이터를 문자열로 변환
print('수신된 데이터:', data_received)

time.sleep(1)  # 1초 대기

위 코드는 사용자로부터 입력받은 데이터를 시리얼 포트를 통해 전송하고, 시리얼 포트에서 수신된 데이터를 출력하는 간단한 예제입니다.


4, 시리얼 통신 설정 및 주의 사항

시리얼 통신 설정은 송신측과 수신측의 설정이 일치해야 합니다. 설정이 다르면 데이터가 제대로 전송되지 않을 수 있습니다.

4.
1, 주요 설정 항목

  • 포트 이름: 컴퓨터에서 시리얼 포트를 식별하는 이름입니다. (예: `/dev/ttyACM0`, `COM3`)
  • 보레이트 (Baudrate): 초당 전송되는 데이터 비트 수입니다. (예: 9600, 115200)
  • 데이터 비트 (Data Bits): 한 번에 전송되는 데이터 비트 수입니다. (예: 8)
  • 패리티 비트 (Parity Bit): 데이터 전송 오류 검출을 위한 비트입니다. (예: None, Even, Odd)
  • 스톱 비트 (Stop Bits): 데이터 전송의 종료를 알리는 비트입니다. (예: 1)

4.
2, 주의 사항

  • 송신측과 수신측의 설정이 일치해야 합니다. 시리얼 통신을 하려면 송신측과 수신측의 포트 이름, 보레이트, 데이터 비트, 패리티 비트, 스톱 비트 등의 설정이 모두 동일해야 합니다.
  • 데이터 형식을 일치시켜야 합니다. 데이터를 송신할 때 문자열, 바이트, 정수 등 데이터 형식을 송신측과 수신측이 모두 동일하게 사용해야 합니다.
  • 데이터 전송 방식을 고려해야 합니다. 시리얼 통신은 데이터를 비트 단위로 순차적으로 전송하기 때문에 데이터의 순서가 중요합니다. 데이터를 송신할 때 순서를 잘 정하여 전송해야 합니다.


5, pySerial 라이브러리 활용 팁

  • 시리얼 포트 목록 확인: `serial.tools.list_ports.comports()` 함수를 사용하여 시스템에 연결된 시리얼 포트 목록을 확인할 수 있습니다.
  • 에러 처리: 시리얼 포트 오류를 처리하기 위해 `try-except` 블록을 사용하는 것이 좋습니다.
  • 타임아웃 설정: `ser.timeout` 속성을 사용하여 데이터를 수신할 때 시간 제한을 설정할 수 있습니다.
  • 플로우 제어: `ser.rtscts` 속성을 사용하여 하드웨어 흐름 제어를 설정할 수 있습니다.


6, 결론

pySerial 라이브러리는 파이썬에서 시리얼 통신을 구현하는 데 유용한 도구입니다. 이 문서에서는 pySerial 라이브러리를 사용하여 시리얼 통신을 설정하고 데이터를 송수신하는 방법을 설명했습니다. pySerial을 사용하면 마이크로컨트롤러, 센서, 기타 장치와 컴퓨터를 연결하여 데이터를 주고받는 시리얼 통신을 쉽게 구현할 수 있습니다.

pySerial 라이브러리를 활용하여 다양한 시리얼 통신 프로젝트를 개발해 보세요!

반응형