USB-HID 인터페이스를 갖춘 LED 이름표용 업로드 도구
강조된 프랑스어 문자가 추가되었습니다.
이 프로젝트에서 지원하는 유형에는 다음과 같은 배열이 있습니다.
44 x 11 LED 또는
48x12 LED.
제조업체는 아마도 https://lesun-led.en.alibaba.com/일 것입니다.
두 구성 모두에서 배지는 USB에서 다음과 같이 식별됩니다.
idVendor=0416, idProduct=5020 Mfr=1, Product=2, SerialNumber=0 LSicroelectronics LS32 Custm HID
시중에는 다양한 버전의 LED 배지가 있습니다. 이 인터페이스는 USB-HID 인터페이스를 사용하고 다른 인터페이스는 USB-Serial을 사용합니다(아래 참조 참조).
다음은 누구나 USB를 통해 배지에 대한 읽기/쓰기 액세스를 허용하는 udev 규칙을 설치합니다.
sudo cp 99-led-badge-44x11.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules && sudo udevadm trigger
sudo apt install python3-usb python3-pil
venv를 사용하면 설치된 모듈이 시스템에 설치된 모듈을 방해할 위험 없이 pip를 사용하여 종속성을 설치할 수 있습니다. 일부 시스템(특히 Python 2 및 3이 설치된 시스템)에서는 python
/ pip
대신 python3
/ pip3
명령을 사용하여 Python 3을 명시적으로 처리해야 합니다.
sudo apt install python3-venv python -m venv ledtag source ledtag/bin/activate pip install pyhidapi pyusb pillow # this should now work: # python led-badge-11x44.py -m 6 -s 8 "Hello" "World!"
udev 규칙이 설치된 경우 sudo/root 권한 없이 배지에 액세스할 수 있습니다.
나중에 venv를 다시 재사용하려면:
source ledtag/bin/activate python led-badge-11x44.py …
sudo dnf install hidapi python3-hidapi python3-pillow python3-pyusb
일부 배포판에서는 pyhidapi가 lib를 검색하는 위치와 hidapi 패키지가 이를 배치하는 위치에 불일치가 있습니다. 간단한 해결책은 라이브러리를 필요한 장소에 연결하는 것입니다.
ln -s /usr/lib/libhidapi-hidraw.so.0 /usr/local/lib/
일부 시스템(특히 Python 2 및 3이 설치된 시스템)에서는 pip
대신 pip3
명령을 사용하여 Python 3을 명시적으로 처리해야 합니다.
sudo easy_install pip pip install pyhidapi pip install pillow ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null brew install hidapi
Windows의 경우 LED 배지 장치에 대한 libusb API를 설정해야 합니다. 여기에 설명된 방식은 매우 낮은 수준의 방식과 매우 오래된 버전으로 libusb-win32를 사용합니다.
'libusb-win32' 버전 1.2.6.0을 사용하세요. SourceForge의 이전 프로젝트 저장소에서 여전히 사용할 수 있습니다.
그 다음에
다운로드한 zip 파일의 압축을 풀고 libusb-win32-bin-1.2.6.0bin
디렉터리로 이동합니다.
inf-wizard.exe
마우스 오른쪽 버튼으로 클릭하고 Run as Administrator
Next
-> 0x0416 0x5020 LS32 Custm HID
(또는 동일한 ID와 유사)를 선택합니다.
Next
-> Next
-> 대화 상자 LS32_Sustm_HID.inf
로 저장 -> Save
(계속 진행하려면 해당 파일이 필요하지 않습니다)
Install Now...
-> 드라이버 설치 완료 -> OK
libusb-win32
의 최신 버전을 설치하고 설정하는 방법은 권장되지만 여기서는 테스트되지 않았습니다. Zadig(최신 릴리스의 GitHub 저장소에 있는 이전 libusb-win32 저장소에서도 사용 가능) 또는 libusbK를 사용하십시오.
물론 Python이 필요합니다.
python.org에서 최신 Python을 다운로드하거나 여기에서 특정 버전을 다운로드하세요.
[x]
모든 사용자를 위한 실행 프로그램 설치
[x]
PATH에 Python XY 추가
다음 옵션을 확인 표시하십시오.
Install Now ...
텍스트 메시지를 클릭합니다.
선택적으로 '경로 길이 제한 비활성화' 텍스트 메시지를 클릭합니다. 이것은 항상 좋은 일입니다.
Python 패키지를 설치해야 합니다. 일부 시스템(특히 Python 2 및 3이 설치된 시스템)에서는 pip
대신 pip3
명령을 사용하여 Python 3을 명시적으로 처리해야 합니다.
관리자 권한으로 cmd.exe를 실행하고 다음을 입력합니다.
pip install pyusb pip install pillow
Linux에서 이러한 예제를 실행하려면 USB 장치에 액세스하기 위해 sudo
앞에 추가하거나 위에서 설명한 대로 udev 규칙을 설치해야 할 수도 있습니다. Windows에서는 cmd.exe
를 실행해야 할 수도 있습니다. 여기서 Run as administrator
사용하여 명령을 입력합니다. 이는 Linux의 sudo
와 유사합니다.
일부 시스템(특히 Python 2 및 3이 설치된 시스템)에서는 python
대신 python3
사용하여 Python 3을 명시적으로 처리해야 합니다. python -V
실행하여 어떤 버전의 Python이 기본으로 구성되어 있는지 확인하세요.
python ./led-badge-11x44.py "Hello World!"
'Hello World!' 텍스트를 로드합니다. 첫 번째 메시지로 사용하고 오른쪽에서 왼쪽(기본 스크롤 모드=0) 및 속도 4(기본값)로 스크롤합니다. 업로드 후 장치에 첫 번째 메시지가 한 번 표시되고 여전히 USB에 연결되어 있으면 충전 화면으로 돌아갑니다. 플러그를 뽑거나 USB 커넥터 옆에 있는 작은 버튼을 누르세요.
python ./led-badge-11x44.py -m 6 -s 8 "Hello" "World!"
메시지 1로 'Hello' 텍스트를 로드하고 'World!' 메시지 2로. 이전 예와 인용의 차이점을 비교해 보세요. 최대 8개의 메시지를 업로드할 수 있습니다. 이 예에서는 멋진 작은 애니메이션과 함께 단어를 디스플레이 영역에 수직으로 배치하는 모드 6을 사용합니다. 부드러움을 위해 여기에서는 속도가 최대로 설정됩니다.
기본적으로 'Hello'만 표시됩니다. 모든 메시지를 보려면 'M1-8'이 잠깐 나타날 때까지 USB 커넥터 옆에 있는 작은 버튼을 여러 번 누르십시오. 이제 디스플레이는 업로드된 모든 메시지를 반복합니다.
python ./led-badge-11x44.py -m 5 :gfx/fablabnbg_logo_44x11.png:
전체 화면 정지 이미지를 로드합니다. 콜론과 이름 사이에 공백을 사용하지 마세요. ImportError: cannot import name '_imaging'
메시지가 표시되면 해당 패키지를 업데이트해 보십시오: sudo pip install -U pillow
python ./led-badge-11x44.py "I:HEART2:my:gfx/fablab_logo_16x11.png:fablab:1:"
하나의 내장 이미지와 하나의 로드된 이미지를 사용합니다. 하트가 내장되어 있고, fablab-logo가 파일에서 로드됩니다. fablab 로고는 두 번 사용됩니다. 한 번은 'fablab'이라는 단어 앞에 사용되며, 다시 한 번 참조 ':1:'(첫 번째 로드된 이미지 참조)을 통해 뒤에 사용됩니다.
python ./led-badge-11x44.py -s7 -m0,1 :bicycle: :bicycle_r:
왼쪽에서 오른쪽, 오른쪽에서 왼쪽으로 디스플레이를 가로지르는 자전거를 보여줍니다(두 번째 메시지). 'M1-8' 모드를 선택하면 자전거가 디스플레이를 계속 앞뒤로 움직입니다. 자전거가 텍스트를 당기는 것처럼 보이도록 짧은 메시지를 하나 또는 둘 다에 추가할 수 있습니다.
python ./led-badge-11-x44.py -b0,1 -s1 -m5 " :heart2: :HEART2:" " :HEART2:"
첫 번째 메시지에서는 천천히 심장이 뛰고 두 번째 메시지에서는 심장이 깜박이는 간단한 애니메이션을 보여줍니다.
./led-badge-11x44.py -B 50 -m 0 -s 8 "Bonjour à toutes et à tous" "Bienvenu(e)s en Master 2 EEA ISHM" "Ingénierie des systèmes Humains Machines" "Bonne réussite à votre promotion 2023-2024"
python ./led-badge-11x44.py --list-names
:happy: :happy2: ❤️ :HEART: :heart2: :HEART2: :fablab: :bicycle: : bike_r: :owncloud: ::를 포함한 내장 아이콘 이름 목록을 인쇄합니다.
python ./led-badge-11x44.py --help
모든 쓰기 방법을 나열합니다. 장치에 아무 것도 쓰지 않습니다.
python ./led-badge-11x44.py -M list "dummy message"
쓰기 방법 'hidapi'로 사용 가능한 모든 장치를 나열합니다. 장치에 아무 것도 쓰지 않습니다.
python ./led-badge-11x44.py -M hidapi -D list "dummy message"
특정 쓰기 방법으로 특정 장치를 프로그래밍합니다.
python ./led-badge-11x44.py -M hidapi -D "3-1:1.0" "Hello World!"
요약된 도움말을 인쇄합니다.
python ./led-badge-11x44.py -h
사용법: lednamebadge.py [-h] [-t 유형] [-H HID] [-M 방법] [-D DEVICE_ID] [-s 속도] [-B 밝기] [-m 모드] [-b 깜박임] [-a 개미] [-l] 메시지 [메시지 ...] USB HID를 통해 메시지나 그래픽을 11x44 LED 배지에 업로드하세요. https://github.com/jnweiger/led-badge-ls32의 버전 0.14 -- 더 많은 예제와 업데이트를 보려면 여기를 참조하세요. 위치 인수: 메시지 내장 아이콘이 포함된 메시지 텍스트 최대 8개 또는 콜론(:) 내에 로드된 이미지 -- 목록은 -l을 참조하세요. 내장. 옵션: -h, --help 이 도움말 메시지를 표시하고 종료합니다. -t TYPE, --type TYPE 디스플레이 유형: 지원되는 값은 12x48 또는 (기본값) 11x44. 프로그램 이름을 다음으로 바꿉니다. Badge-12x48, 기본값을 전환합니다. -H HID, --hid HID 더 이상 사용되지 않습니다. 이전 버전과의 호환성을 위해서만 사용하세요. -M을 사용하세요! HID API를 통한 연결을 보장하려면 1로 설정하세요. 그러면 프로그램은 usb.core 라이브러리로 대체되지 않습니다. -M 방법, --방법 방법 주어진 쓰기 방법을 강제로 사용합니다. '자동' 중 하나를 사용하세요. '목록' 또는 인쇄 중인 목록이 무엇이든 가능합니다. -D DEVICE_ID, --device-id DEVICE_ID 모호한 경우 지정된 장치 ID를 강제로 사용합니다. 사용 'auto', 'list' 또는 인쇄 중인 목록 중 하나입니다. -s 속도, --speed 속도 스크롤 속도(범위 1..8). 최대 8자(쉼표로 구분) 가치. -B 밝기, --밝기 밝기 디스플레이 밝기(%): 25, 50, 75 또는 100. -m MODE, --mode MODE 최대 8개 모드 값: Scroll-left(0) -right(1) -up(2) -다운(3); 여전히 중심(4); 애니메이션(5); 떨어지다- 다운(6); 커튼(7); 레이저(8); 자세한 내용은 '--mode-help'를 참조하세요. 자세한 내용. -b 깜박임, --blink 깜박임 1: 깜박임, 0: 정상. 최대 8자(쉼표로 구분) 가치. -a ANTS, --ants ANTS 1: 애니메이션 테두리, 0: 정상. 최대 8자(쉼표로 구분) 가치. -l, --list-names 메시지에 포함될 이름이 지정된 아이콘을 나열하고 종료합니다. 이미지와 텍스트를 결합하는 예: sudo lednamebadge.py "I:HEART2:you"
기본 유형을 정의하는 몇 가지 옵션이 있습니다.
lednamebadge.py
직접 사용하세요. 기본 유형은 11x44입니다.
lednamebadge.py
이름을 12
(예: badge12.py
)로 바꾸고 다음을 사용하십시오. 기본 유형은 12x48입니다.
led-badge-11x44.py
사용: 기본 유형은 11x44입니다.
led-badge-12x48.py
사용: 기본 유형은 12x48입니다.
이러한 모든 옵션에 대해 명령줄 옵션 -t
를 사용하여 기본 유형을 재정의할 수 있습니다.
어떤 장치를 어떤 방법으로 프로그래밍할지 제어하는 두 가지 옵션이 있습니다. 현재 두 가지 쓰기 방법이 있습니다. 하나는 Python 패키지 pyusb( libusb
)를 사용하는 것이고, 다른 하나는 pyhidapi( hidapi
)를 사용하는 것입니다.
실행 환경에 따라 두 가지 방법을 모두 사용할 수 있지만 예상대로 작동하지 않는 경우가 있습니다. 그런 다음 -M
옵션을 사용하여 명시적으로 사용할 방법을 선택할 수 있습니다. -M list
사용하면 사용 가능한 쓰기 방법 목록을 인쇄할 수 있습니다. 여러 장치를 연결한 경우 -D list
옵션을 사용하여 ID를 나열하거나 나열된 장치 ID 중 하나를 제공하여 해당 특정 장치를 프로그래밍할 수 있습니다. 두 옵션 모두의 기본값은 auto
이며, 쓰기 방법 hidapi
사용하여 발견된 첫 번째 장치만 프로그래밍합니다. 동일한 디바이스라도 쓰기 방식에 따라 ID가 다릅니다. 또한 컴퓨터를 시작할 때나 다시 연결할 때마다 변경될 수 있습니다.
예제는 gfx/starfield 폴더를 참조하세요. N 프레임의 애니메이션은 48픽셀 및 44픽셀 폭 장치 모두에 대해 N*48픽셀 폭의 이미지로 제공됩니다.
생성된 장면을 장치에 쓰기 위해 자체 콘텐츠 생성 코드에서 lednamebadge.py를 모듈로 사용할 수 있습니다.
헤더를 생성
나만의 콘텐츠 추가
장치에 쓰기
header()
메서드는 여러 매개변수를 사용합니다.
숫자의 튜플로 최대 8개 길이
각 길이는 해당 비트맵 데이터의 바이트 열 수입니다. 즉, 해당 비트맵 데이터의 바이트 수를 11(11x44 장치의 경우), 12(12x48 장치의 경우)로 나눈 값입니다. 여기서 1바이트는 8입니다. 픽셀 너비.
명령줄 인수와 유사한 인수: 최대 8개의 속도, 모드, 깜박임 플래그, 각각 숫자 튜플인 개미 플래그 및 숫자인 (선택 사항) 밝기.
선택적으로 타임스탬프를 날짜/시간으로 제공할 수 있습니다. 헤더의 일부로 장치에 기록되지만 장치 디스플레이에는 표시되지 않습니다.
귀하의 콘텐츠는 모든 장면에 대한 비트맵 데이터가 포함된 바이트 배열이어야 합니다. 물론 주어진 길이에 맞아야 합니다.
더 나은 이해를 위해 다음 그래픽을 참조하십시오.
12x48 장치의 경우 각 바이트 열마다 11바이트 대신 12바이트가 있어야 합니다.
예:
2개의 장면이 있다고 가정해 보겠습니다. 하나는 11x32픽셀이고 다른 하나는 11x60픽셀입니다. 따라서 첫 번째는 4바이트 열과 44바이트를 가지며, 두 번째는 마지막 바이트 열에 4개의 빈 비트 열을 11x64픽셀로 채워야 하므로 8바이트 열과 88바이트를 갖습니다.
우리는 모드 4에서 둘 다 표시하고 싶습니다. 첫 번째는 속도 3, 두 번째는 속도 2, 두 번째는 개미와 함께 표시됩니다. 그리고 우리는 초기 밝기를 50%로 설정하는 것을 좋아합니다.
이는 다음 호출을 통해 달성됩니다.
from lednamebadge import LedNameBadgebuf = array('B')buf.extend(LedNameBadge.header((4, 8), (3, 2), (4,), (0,), (0, 1), 50)) buf.extend(scene_one_bytes)buf.extend(scene_two_bytes)LedNameBadge.write(buf)
write
메소드에는 write 메소드와 장치 ID라는 두 가지 매개변수가 더 있습니다. 이는 명령줄 옵션 '-M' 및 '-D'와 정확히 동일하게 작동합니다. 둘 다 기본값은 auto
입니다.
LedNameBadge.write(buf, 'libusb', '3:10:2')
list
사용하더라도 stdout에 인쇄된 사용 가능한 선택 항목의 각 목록을 얻을 수 있는데, 이는 모듈로 사용하는 경우 덜 편리합니다. 따라서 이 정보를 일반 데이터 개체로 검색하는 방법에는 두 가지가 있습니다.
get_available_methods()
는 구현된 모든 쓰기 메소드를 메소드 이름을 키로, 부울 값을 각각 값으로 갖는 dict로 반환합니다. 부울은 메소드가 기본적으로 사용 가능한지 여부를 나타냅니다(해당 가져오기가 성공했음을 의미).
연결된/사용 가능한 모든 장치에 대한 정보를 반환하는 get_available_device_ids(method)
장치 ID를 키로, 설명 문자열을 각각 값으로 사용하는 dict로도 반환합니다.
>>> import lednamebadge >>> lednamebadge.LedNameBadge.get_available_methods() {'hidapi': True, 'libusb': True} >>> lednamebadge.LedNameBadge.get_available_methods('hidapi') {'3-6:1.0': 'LSicroelectronics - LS32 Custm HID (if=0)', '3-7.3:1.0': 'LSicroelectronics - LS32 Custm HID (if=0)', '3-1:1.0': 'wch.cn - CH583 (if=0)'} >>> lednamebadge.LedNameBadge.get_available_methods('libusb') {'3:20:1': 'LSicroelectronics - LS32 Custm HID (bus=3 dev=20 endpoint=1)', '3:21:1': 'LSicroelectronics - LS32 Custm HID (bus=3 dev=21 endpoint=1)', '3:18:2': 'wch.cn - CH583 (bus=3 dev=18 endpoint=2)'}
이 방법으로 여러 장치를 하나의 컴퓨터에 연결하고 서로 다른 write
호출을 사용하여 하나씩 프로그래밍할 수 있습니다.
동일한 설명 문자열이 있는 장치가 두 개 이상 있으면 어떤 실제 장치가 어떤 ID에 속하는지 구별하기 어렵습니다. 특히. 다시 연결하거나 다시 시작한 후에는 ID가 변경되거나 교환될 수 있습니다. 서로 다른 USB 버스가 있는 경우 하나의 버스에 하나의 장치만 연결하십시오. 그래서 버스번호로 결정하시면 됩니다. 또는 특정 연결 순서(컴퓨터가 이미 실행 중인 동안)를 유지한 다음 장치 번호로 결정할 수 있습니다. 어쩌면 hidapi 방법이 좀 더 안정적일 수도 있습니다. 조금 실험해야합니다.
또한 이 모듈의 텍스트/아이콘/그래픽 생성을 사용하여 해당 바이트 버퍼를 얻을 수도 있습니다.
이는 매우 간단하며 명령줄 사용법과 같습니다. 메시지 대신 파일 이름을 제공하여 이미지 파일에서만 비트맵을 생성하는 추가 옵션이 있습니다.
from lednamebadge import SimpleTextAndIconscreator = SimpleTextAndIcons()scene_a_bitmap = creator.bitmap("Hello :HEART2: World!")scene_b_bitmap = creator.bitmap("당신처럼 :gfx/bicycle3.png: 좋아요...")scene_c_bitmap = creator.bitmap ("gfx/starfield/starfield_020.png")
결과 비트맵은 바이트 배열과 각각의 길이를 갖는 튜플입니다. 이러한 길이는 header()에서 직접 사용할 수 있으며 바이트 배열을 헤더에 연결할 수 있습니다. 예:
from lednamebadge import *creator = SimpleTextAndIcons()scene_x_bitmap = creator.bitmap("Hello :HEART2: World!")scene_y_bitmap = creator.bitmap("앞으로 예제를 완성하세요.")your_own_stuff = create_own_bitmap_data()lengths = (scene_x_bitmap[1], scene_y_bitmap[1], your_own_stuff.len)buf = array('B')buf.extend(LedNameBadge.header(lengths, (3,), (0,), (0, 1, 0), (0, 0, 1), 100))buf.extend(scene_x_bitmap[0])buf.extend(scene_y_bitmap[0])buf.extend(your_own_stuff.bytes)LedNameBadge.write(buf)
*.puml 파일에서 다이어그램을 생성하려면 PlantUML과 GraphViz 점이 필요할 수 있습니다.
모든 다이어그램을 재생성하려면 photos
디렉토리에서 plantuml "*.puml"
실행하기만 하면 됩니다.
tests
디렉터리에서 python run_tests.py
실행합니다.
https://github.com/Caerbannog/led-mini-board
http://zunkworks.com/projects/programmablelednamebadges/ (2019년부터 오프라인. 2024년 7월 현재 https://web.archive.org에서 계속 사용 가능)
https://github.com/DirkReiners/LEDBadgeProgrammer
https://bitbucket.org/bartj/led/src
http://www.daveakerman.com/?p=1440
https://github.com/stoggi/ledbadge