CH341 USB-Serial 칩 기반 4채널 시그널 타워 (적/녹/황/부저) 제어.
| 파일 | 용도 |
|---|---|
tower.py |
제어 라이브러리 + CLI |
install.sh |
드라이버/권한/udev 자동 설정 |
uninstall.sh |
설정 제거 |
# 폴더 복사 후
cd /path/to/Beacon
sudo bash install.sh
# 사용자 그룹 적용 위해 재로그인 (또는 newgrp dialout)
# USB 다시 꽂으면 /dev/signal_tower 생성됨설치 스크립트가 하는 일:
python3-serial설치- 사용자
dialout그룹 추가 /etc/modprobe.d/signal-tower.conf—usbserial모듈이1a86:5523클레임/etc/udev/rules.d/99-signal-tower.rules— 장치 인식 시 자동 처리- 커널
ch341드라이버에서 unbind →usbserial_generic으로 재바인딩 /dev/signal_tower심볼릭 링크 생성MODE=0666권한, ModemManager 무시 (ID_MM_DEVICE_IGNORE=1)
- 커널
/usr/local/sbin/signal-tower-rebind헬퍼 스크립트 설치
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
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
이 시그널 타워의 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/ttyUSB0bMaxPower 480mA. 전면 USB 포트 또는 무전원 허브에서 불안정할 수 있음.
가능하면 PC 뒷면 메인보드 포트 또는 유전원 허브 사용.
이 패키지는 1a86:5523 을 usbserial_generic 으로 강제 바인딩. 다른 CH341 기반
USB-Serial 어댑터(예: Arduino용)를 같은 PC에서 쓸 경우 우선순위 충돌 가능. 그런 경우
/usr/local/sbin/signal-tower-rebind 안에서 bcdDevice 까지 검사하도록 좁히거나,
보드별로 udev 규칙을 분리할 것.
sudo bash uninstall.sh