Skip to content
JR-Yu6197Public

About

USB 시그널 타워 (CH341 1a86:5523) 제어 Python 패키지 - 4바이트 HEX 프로토콜, 자동 설치 스크립트 포함

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

USB 시그널 타워 제어 (Linux)

CH341 USB-Serial 칩 기반 4채널 시그널 타워 (적/녹/황/부저) 제어.

파일 구성

파일 용도
tower.py 제어 라이브러리 + CLI
install.sh 드라이버/권한/udev 자동 설정
uninstall.sh 설정 제거

다른 컴퓨터 설치 (Ubuntu/Debian 기준)

# 폴더 복사 후
cd /path/to/Beacon
sudo bash install.sh
# 사용자 그룹 적용 위해 재로그인 (또는 newgrp dialout)
# USB 다시 꽂으면 /dev/signal_tower 생성됨

설치 스크립트가 하는 일:

  1. python3-serial 설치
  2. 사용자 dialout 그룹 추가
  3. /etc/modprobe.d/signal-tower.conf — usbserial 모듈이 1a86:5523 클레임
  4. /etc/udev/rules.d/99-signal-tower.rules — 장치 인식 시 자동 처리
    • 커널 ch341 드라이버에서 unbind → usbserial_generic으로 재바인딩
    • /dev/signal_tower 심볼릭 링크 생성
    • MODE=0666 권한, ModemManager 무시 (ID_MM_DEVICE_IGNORE=1)
  5. /usr/local/sbin/signal-tower-rebind 헬퍼 스크립트 설치

사용법

CLI

python3 tower.py red on        # 적색 점등
python3 tower.py green blink   # 녹색 점멸
python3 tower.py buzzer on     # 부저 울림
python3 tower.py all blink     # 전체 점멸
python3 tower.py all off       # 전체 끄기

target: yellow, green, red, buzzer, yellow_buz, green_buz, red_buz, all action: on, off, blink

Python

from tower import cmd, open_port, send, ADDR, OP

# 단발성
cmd("red", "on")
cmd("buzzer", "blink")

# 다수 명령을 한 번에 (포트 열고 닫는 비용 절감)
with open_port() as s:
    send(s, ADDR["red"], OP["on"])
    send(s, ADDR["buzzer"], OP["blink"])

포트 변경

기본 탐지 순서: /dev/signal_tower → /dev/ttyUSB0 → /dev/ttyUSB* 강제 지정: TOWER_PORT=/dev/ttyUSB1 python3 tower.py red on

프로토콜

UART 9600 8N1, 4바이트 패킷:

바이트 의미 값
[0] 시작 식별자 0xA0
[1] 주소 황01 / 녹02 / 적03 / 부저04 / 황+부저05 / 녹+부저06 / 적+부저07 / 전체00
[2] 동작 OFF 0x00 / ON 0x01 / 점멸 0x02
[3] 체크섬 (앞 3바이트 합) & 0xFF

자주 쓰는 명령어:

적색 ON     A0 03 01 A4    적색 OFF    A0 03 00 A3    적색 점멸    A0 03 02 A5
녹색 ON     A0 02 01 A3    녹색 OFF    A0 02 00 A2    녹색 점멸    A0 02 02 A4
황색 ON     A0 01 01 A2    황색 OFF    A0 01 00 A1    황색 점멸    A0 01 02 A3
부저 ON     A0 04 01 A5    부저 OFF    A0 04 00 A4    부저 단속    A0 04 02 A6
적+부저 ON  A0 07 01 A8    적+부저 OFF A0 07 00 A7    적+부저 점멸 A0 07 02 A9
전체 ON     A0 00 01 A1    전체 OFF    A0 00 00 A0    전체 점멸    A0 00 02 A2

알려진 문제

failed to read modem status: -110 / Input/output error on open

이 시그널 타워의 CH341 변종 (bcdDevice 3.04, bInterfaceProtocol 2)은 커널 표준 ch341 드라이버가 open 시점에 modem-status 레지스터를 읽으려 하는데 칩이 응답하지 못해 -ETIMEDOUT(-110) 으로 open 자체가 실패. install.sh 가 generic usbserial 드라이버로 강제 전환해 우회.

수동 우회:

sudo modprobe -r ch341
sudo modprobe usbserial vendor=0x1a86 product=0x5523
sudo chmod 666 /dev/ttyUSB0

전원 부족 의심

bMaxPower 480mA. 전면 USB 포트 또는 무전원 허브에서 불안정할 수 있음. 가능하면 PC 뒷면 메인보드 포트 또는 유전원 허브 사용.

다른 CH341 장치 사용 시 주의

이 패키지는 1a86:5523 을 usbserial_generic 으로 강제 바인딩. 다른 CH341 기반 USB-Serial 어댑터(예: Arduino용)를 같은 PC에서 쓸 경우 우선순위 충돌 가능. 그런 경우 /usr/local/sbin/signal-tower-rebind 안에서 bcdDevice 까지 검사하도록 좁히거나, 보드별로 udev 규칙을 분리할 것.

제거

sudo bash uninstall.sh

About

USB 시그널 타워 (CH341 1a86:5523) 제어 Python 패키지 - 4바이트 HEX 프로토콜, 자동 설치 스크립트 포함

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages