附 USB-HID 介面的 LED 名牌上傳工具
添加了強調的法語字符
此專案支援的類型有一系列
44 x 11 LED 或
48 x 12 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 串行接口(請參閱下面的參考資料)。
下面將安裝一個 udev 規則,允許任何人透過 USB 對徽章進行讀取/寫入存取。
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 的系統),您必須使用命令python3
/ pip3
而不是python
/ pip
來明確解決 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 搜尋庫的位置與 hidapi 套件放置庫的位置有差異。一個簡單的解決方案是將庫連結到所需的位置,例如
ln -s /usr/lib/libhidapi-hidraw.so.0 /usr/local/lib/
在某些系統上(尤其是安裝了 Python 2和3 的系統),您必須使用命令pip3
而不是pip
來明確解決 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]
將 Python XY 加入 PATH
勾選以下選項
按Install Now ...
文字訊息。
(可選)按一下「停用路徑長度限制」文字訊息。這總是一件好事。
安裝所需的 Python 套件。在某些系統上(尤其是安裝了 Python 2和3 的系統),您必須使用命令pip3
而不是pip
來明確解決 Python 3 問題。
以管理員身分執行cmd.exe,輸入:
pip install pyusb pip install pillow
要在 Linux 上運行這些範例,您可能必須在前面新增sudo
以存取 USB 裝置或安裝如上所述的 udev 規則。在 Windows 上,也許您必須執行cmd.exe
,在其中輸入命令,並Run as administrator
,這類似於 Linux 上的sudo
。
在某些系統上(尤其是安裝了 Python 2和3 的系統),您必須使用python3
而不是python
來明確解決 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!"
載入文字“Hello”作為訊息一和“World!”作為訊息二。比較引用與前面範例的差異。最多可以上傳 8 則訊息。此範例使用模式 6,它將帶有漂亮小動畫的單字垂直放入顯示區域。為了流暢,速度在這裡設定為最大。
預設情況下,您只會看到“Hello”。若要查看所有訊息,請多次按下 USB 連接器旁的小按鈕,直到短暫看到「M1-8」。現在,顯示幕會循環顯示所有上傳的訊息。
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 TYPE] [-H HID] [-M METHOD] [-D DEVICE_ID] [-s 速度] [-B 亮度] [-m 模式] [-b 閃爍] [-a 螞蟻] [-l] 留言[留言...] 透過 USB HID 將訊息或圖形上傳到 11x44 led 徽章。 版本 0.14 來自 https://github.com/jnweiger/led-badge-ls32 -- 請參閱此處以獲取更多範例和更新。 位置參數: 訊息 最多 8 個訊息文本,帶有嵌入的內建圖示或 冒號內載入的圖片(:) -- 請參閱 -l 以取得列表 內建函數。 選項: -h, --help 顯示此說明訊息並退出 -t TYPE, --type TYPE 顯示類型:支援的值為 12x48 或 (預設)11x44。將程式重新命名為 led- badge-12x48,切換預設值。 -H HID, --hid HID 已棄用,僅用於向後相容,請 使用-M!設定為 1 以確保透過 HID API 連接, 然後程式將不會回退到 usb.core 函式庫。 -M方法,--方法方法 強制使用給定的寫入方法。使用“自動”之一, “清單”或任何正在列印的清單。 -D DEVICE_ID, --device-id DEVICE_ID 如果不明確,則強制使用給定的設備 ID。使用 「auto」、「list」或任何正在列印的清單之一。 -s 速度, --速度 速度 滾動速度(範圍 1..8)。最多 8 個逗號分隔 價值觀。 -B 亮度, --亮度 亮度 顯示器亮度百分比:25、50、75 或 100. -m MODE, --mode MODE 最多 8 個模式值:向左滾動(0) -向右滾動(1) -向上滾動(2) -向下(3);仍居中(4);動畫(5);降低- 向下(6);窗簾(7);雷射(8);請參閱“--mode-help” 更多細節。 -b 閃爍, --閃爍 閃爍 1:閃爍,0:正常。最多 8 個逗號分隔 價值觀。 -a ANTS, --ants ANTS 1:動畫邊框,0:正常。最多 8 個逗號分隔 價值觀。 -l, --list-names 列出要嵌入訊息中的命名圖示並退出。 結合圖像和文字的範例: sudo lednamebadge.py“我:HEART2:你”
有一些定義預設類型的選項:
直接使用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
,它僅對找到的第一個裝置進行編程,最好使用 write 方法hidapi
。同一設備的ID依寫入方式的不同而不同。此外,它們還可以在電腦啟動或重新連接之間進行更改。
有關範例,請參閱 gfx/starfield 資料夾。對於 48 和 44 像素寬的設備,N 幀的動畫作為 N*48 像素寬的圖像提供。
您可以使用 lednamebadge.py 作為您自己的內容創建程式碼中的模組,以將生成的場景寫入裝置。
創建標題
附加您自己的內容
寫入裝置
header()
方法採用多個參數:
最多 8 個長度的數位元組
每個長度是對應位圖資料的位元組列數,即對應位圖資料的位元組數除以 11(對於 11x44 裝置)或 12(對於 12x48 裝置),其中一個位元組為 8像素寬。
與命令列參數相當的參數:最多 8 個速度、模式、閃爍標誌、螞蟻標誌,每個都是數字元組,以及(可選)亮度作為數字。
或者,您可以將時間戳記指定為日期時間。它作為標頭的一部分寫入設備,但在設備顯示器上不可見。
您自己的內容必須是一個位元組數組,其中包含所有場景的點陣圖資料。當然,它必須符合給定的長度。
請參閱下圖以更好地理解:
當然,對於 12x48 設備,每個位元組列必須有 12 個位元組,而不是 11 個。
例子:
假設您有 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
方法還有兩個參數:寫入方法和裝置 ID。它們的運作方式與命令列選項“-M”和“-D”完全相同。兩者都預設為auto
。
LedNameBadge.write(buf, 'libusb', '3:10:2')
即使使用list
您也可以將可用選項的相應列表列印到標準輸出,如果用作模組,則不太方便。因此,有兩種方法可以將此資訊作為普通資料物件檢索:
get_available_methods()
它將所有實現的寫入方法作為字典返回,其中方法名稱作為鍵,每個布林值作為值。 boolean表示方法是否基本上可用(表示對應導入成功)
get_available_device_ids(method)
傳回有關所有已連接/可用設備的信息,也作為一個字典,其中設備 id 作為鍵,描述性字串作為值。
>>> 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: 就像 Crebit)n_ator. 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( , scene_y_bitmap[1], your_own_stuff.len)buf = array('B')buf.extend(LedNameBadge.header(長度, (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)
您將需要 PlantUML 和可能的 GraphViz dot 從 *.puml 檔案產生圖表。
只需從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