평소와 같이 USB 웹캠이 아닌, 조명 밝기를 조절하는 컨트롤러를 같이 다루게 될 기회가 생겼다
LED Controller JV502
USB 포트에 연결된 상태이므로 장치관리자에 들어가서 Device 이름을 확인해본다
내 경우엔 여기서 Prolific 어쩌구가 JV502 에 해당하는 디바이스 이름이고, 뒤에 붙은 COM5 가 현재 이 장치가 연결된 포트의 번호가 된다 (안보인다면 드라이버 설치 우선 해보자)
이 항목들을 우선 파이썬에서 불러와야 한다
방법은 매우 간단하다
사용중인 가상환경에서 pyserial 을 우선 설치한다
$ pip install pyserial
그리고 다음과 같이 코드를 짜면 끝이다
if __name__ == "__main__":
import serial.tools.list_ports
serial_ports = serial.tools.list_ports.comports()
for ports in serial_ports:
print(ports)
[OUTPUT]
COM1 - 통신 포트(COM1)
COM5 - Prolific USB-to-Serial Comm Port(COM5)
이제 원하는 디바이스와 통신하기 위해 우선 연결을 해줘야 한다
우선 코드먼저 보자면 포트이름과 통신속도(baud-rate) 를 넘겨주면 연결이 된다
port_name = "COM5" # port 이름
baud = 19200 # 디바이스의 통신 속도
ser = serial.Serial(port_name, baud, timeout=0)
여기서 통신속도(baud) 는 장치를 만든 제조사에서 배포한 사양서를 참조하면 확인할 수 있다
아래는 내가 사용중인 JV502 디바이스의 사양서 중 일부이다
https://www.joy-system.co.kr/product/pdf/JV502_spec.pdf JV502 컨트롤러의 통신 프로토콜 사양서
참고로 사양서엔 통신모드가 RS232 로 나와있는데 RS232 는 아래와 같은 포트를 사용하지만 나는 RS232 to USB 를 사용해 usb 포트에 연결해서 쓰는중이다
어쨌든 연결까지 됐다면 이제 프로토콜에 따라 통신하면 된다
JV502 프로토콜 사양서를 예시로 가져와보면
https://www.joy-system.co.kr/product/pdf/JV502_spec.pdf JV502 컨트롤러의 통신 프로토콜 사양서
이상한 말이 잔뜩 써져있는데 결국 통신하는데 #A1255& 이런식으로 명령어를 주면 된다는 뜻이다 #A1255& 를 예로들어 설명하자면
# : 통신시작
'A' : 아스키코드를 사용할 것이란 뜻
'1' : 컨트롤 할 채널 (위 제품의 경우 채널이 2개)
'2, 5, 5' : 위에서 명시한 채널의 전압(밝기) 값을 000 ~ 255 중 최대 밝기로 설정
'&' : 통신종료
한번 이해하고나면 매우 쉽다!
그럼 이 명령어를 컨트롤러로 보내야 밝기 조절이 가능한데 이것도 매우 간단하다
data = '#' + 'A' + '1' + '2' + '5' + '5' + '&' # channel 1 밝기 최대
ser.write(data.encode()) # 시리얼 통신에 최적화된 바이트 문자열로 통신
이렇게 제품마다 정해진 프로토콜 대로 통신하면 된다
아래는 전체코드, 매우매우매우매우매우매우간단하다
import serial.tools.list_ports
ser = serial.Serial("COM6", 19200, timeout=0) # 시리얼 연결
data = '#' + 'A' + '1' + '2' + '5' + '5' + '&' # channel 1 밝기 최대
ser.write(data.encode()) # 명령어 전송
python 에서 OpenCV 를 사용하거나 QT 를 다루다보면 종종 아래와 같은 문제가 발생하기도 한다
QObject::moveToThread: Current thread (0x557f778d2d20) is not the object's thread (0x557f765b2450).
Cannot move to target thread (0x557f778d2d20)
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/home/ubuntu/anaconda3/envs/torch3.8/lib/python3.8/site-packages/cv2/qt/plugins" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: xcb, eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl.
Aborted (core dumped)
사용중인 가상환경에서 opencv-python 을 지우고 openv-python-headless 를 설치하는 방법으로 해결 가능하다