라즈베리파이(Raspberry pi / RPi)에 USB TTL 컨버터(RS485/RS232)를 이용하여 시리얼 통신하는 예제 코드를 작성하여 둔다.
우선 컨버터를 이용하기 때문에 결국 프로토콜이 RS232이든 반이중 RS485이든 결국 라즈베리파이에 들어오는 것은 serial임을 기억해야 한다. (USB를 안쓰고 TTL 기반의 컨버터를 써도 결과는 똑같다. 다만 GPIO를 이용하는것 차이이다.)
USB를 통하여 통신하는 경우, Java의 RXTX 라이브러리나 파일 자체(리눅스는 모든 장치를 파일로 처리하므로 /dev 안의 파일)를 읽,쓰기 해도 무방하다.
하지만 Python을 이용하는 것이 별도의 라이브러리를 설치하지 않고 딱 좋은 것 같다. 따라서 Python의 PiSerial를 이용한 예제 코드가 포스팅된다.
1. 라즈베리파이 구성
현재 라즈베리파이에는 총 4개의 USB 장치가 연결되어 있다.
사진 상단의 USB 포트에는 마우스, 키보드가 연결되어 있고, 하단의 USB 포트에는 전면측에 USB to RS232, 후면부에 USB to RS485 컨버터 케이블이 연결되어 있다.
2. 예제 코드
import os, sys
import serial
import time
# 시리얼 장치 연결
# 보레이드 9600, 장치 위치 ttyUSB0
ser = serial.Serial('/dev/ttyUSB0',9600, timeout = 5)
def run():
#시리얼 쓰기
ser.write(bytes(bytearray([0x01,0x02,0x03,0x04,0x05])))
while True:
# 시리얼 읽기 (5바이트씩 읽음)
line = ser.read(5)
if len(line) == 0:
break;
# 헥사 코드로 출력
hex_list = ["{:x}".format(ord(c)) for c in line];
print ''.join(hex_list)
while True:
run();
3. lsusb 명령과 grep 명령으로 USB 장치 찾기
(1) ls /dev/ttyUSB* 명령 실행
ls /dev/ttyUSB*
이 명령을 수행하면, 현재 드라이버가 잡혀서 정상 설치된 USB 장치 목록이 나타난다. 장치 목록은 ttyUSB[0-9]+ 형태이며, 해당 장치가 내가 원하는 장치인지 확인할 필요가 있다.
(2) lsusb 명령 실행
lsusb
cat /sys/bus/usb-serial/devices/ttyUSB0/../uevent
이 명령을 수행하면, 해당 ttyUSB* 장치의 ID 정보(lsusb에서 노출되는 동일한 값)를 얻을 수 있다.
'라즈베리파이, 아두이노' 카테고리의 다른 글
[간단한 아두이노 코딩] 2. LED 깜박이기 (0) | 2020.11.17 |
---|---|
[간단한 아두이노 코딩] 1. IDE 설치 하기 (0) | 2020.11.16 |
[라즈베리파이 / 리눅스] init.d 서비스 스크립트 작성을 통한 시작 프로그램 만들기 (0) | 2019.04.03 |
[라즈베리파이/리눅스/우분투] RS232/RS485 to USB 장치 포트(ttyUSB) 검색 방법 및 코드 (2) | 2019.04.02 |
[아두이노] 두개의 아두이노 사이의 RS485 통신 (0) | 2019.03.23 |