Alat unggah untuk tag nama LED dengan antarmuka USB-HID
Menambahkan Karakter Perancis yang Beraksentuasi
Tipe yang didukung oleh proyek ini memiliki beragam
44 x 11 LED atau
48x12 LED.
Pabrikannya mungkin https://lesun-led.en.alibaba.com/
Di kedua konfigurasi, lencana mengidentifikasi dirinya di USB sebagai
idVendor=0416, idProduct=5020 Mfr=1, Product=2, SerialNumber=0 LSicroelectronics LS32 Custm HID
Ada banyak versi Lencana LED yang berbeda di pasaran. Yang ini menggunakan antarmuka USB-HID, sementara yang lain menggunakan USB-Serial (lihat referensi di bawah).
Berikut ini akan menginstal aturan udev yang mengizinkan siapa pun membaca/menulis akses ke lencana melalui 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
Menggunakan venv akan memungkinkan penggunaan pip untuk menginstal dependensi tanpa bahaya bahwa modul yang diinstal akan mengganggu modul yang diinstal pada sistem. Pada beberapa sistem (khususnya yang menginstal Python 2 dan 3), Anda harus menangani Python 3 secara eksplisit dengan menggunakan perintah python3
/ pip3
alih-alih python
/ pip
.
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!"
jika aturan udev diinstal, Anda seharusnya dapat mengakses lencana tanpa hak sudo/root.
Untuk menggunakan kembali venv lagi di lain waktu:
source ledtag/bin/activate python led-badge-11x44.py …
sudo dnf install hidapi python3-hidapi python3-pillow python3-pyusb
Untuk beberapa distribusi, terdapat perbedaan dalam tempat pyhidapi mencari lib dan di mana paket hidapi menempatkannya. Solusi sederhana adalah dengan menghubungkan perpustakaan ke tempat yang diperlukan, misalnya
ln -s /usr/lib/libhidapi-hidraw.so.0 /usr/local/lib/
Pada beberapa sistem (khususnya sistem yang menginstal Python 2 dan 3), Anda harus menangani Python 3 secara eksplisit dengan menggunakan perintah pip3
alih-alih pip
.
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
Untuk Windows, kita perlu menyiapkan libusb API untuk perangkat lencana LED. Cara yang dijelaskan di sini, menggunakan libusb-win32 dengan tingkat yang cukup rendah dan dalam versi yang cukup lama:
Silakan gunakan versi 1.2.6.0 dari 'libusb-win32`. Ini masih tersedia di repo proyek lama di SourceForge
Kemudian
Ekstrak file zip yang diunduh dan buka direktori libusb-win32-bin-1.2.6.0bin
Klik kanan pada inf-wizard.exe
dan Run as Administrator
Next
-> Pilih 0x0416 0x5020 LS32 Custm HID
(atau serupa dengan ID yang sama)
Next
-> Next
-> Simpan sebagai dialog LS32_Sustm_HID.inf
-> Save
(hanya untuk melanjutkan, kita tidak memerlukan file itu)
Install Now...
-> Instal Driver Selesai -> OK
Ada cara lain - yang direkomendasikan, tetapi belum teruji di sini - untuk menginstal dan mengatur versi libusb-win32
yang lebih baru: gunakan Zadig (juga tersedia dari repo libusb-win32 lama di repo GitHub rilis yang lebih baru) atau libusbK
Tentu saja, Python diperlukan:
Unduh python terbaru dari python.org, atau versi spesifik dari sini
[x]
instal Peluncur untuk semua Pengguna
[x]
Tambahkan Python XY ke PATH
Centang opsi berikut
Klik pesan teks Install Now ...
Secara opsional, klik pesan teks 'Nonaktifkan batas panjang jalur'. Ini selalu merupakan hal yang baik untuk dilakukan.
Instal diperlukan paket Python. Pada beberapa sistem (khususnya sistem yang menginstal Python 2 dan 3), Anda harus menangani Python 3 secara eksplisit dengan menggunakan perintah pip3
alih-alih pip
.
Jalankan cmd.exe sebagai Administrator, masukkan:
pip install pyusb pip install pillow
Untuk menjalankan contoh ini di linux, Anda mungkin harus menambahkan sudo
di awal untuk mengakses perangkat USB atau menginstal aturan udev seperti yang dinyatakan di atas. Di Windows, mungkin Anda harus menjalankan cmd.exe
, tempat Anda memasukkan perintah, dengan Run as administrator
, yang mirip dengan sudo
di linux.
Pada beberapa sistem (khususnya sistem yang menginstal Python 2 dan 3), Anda harus menangani Python 3 secara eksplisit dengan menggunakan python3
alih-alih python
. Jalankan python -V
untuk melihat versi python mana yang dikonfigurasi sebagai default.
python ./led-badge-11x44.py "Hello World!"
memuat teks 'Halo Dunia!' sebagai pesan pertama, dan menggulirnya dari kanan ke kiri (mode gulir default=0) dan kecepatan 4 (default). Setelah diunggah, perangkat menampilkan pesan pertama satu kali dan kembali ke layar pengisian daya jika masih terhubung ke USB. Tarik stekernya atau tekan tombol kecil di sebelah konektor USB.
python ./led-badge-11x44.py -m 6 -s 8 "Hello" "World!"
memuat teks 'Halo' sebagai pesan pertama dan 'Dunia!' sebagai pesan kedua. Bandingkan perbedaan kutipan dengan contoh sebelumnya. Hingga 8 pesan dapat diunggah. Contoh ini menggunakan mode 6, yang memasukkan kata-kata dengan animasi kecil yang bagus secara vertikal ke dalam area tampilan. Kecepatan diatur ke maksimum di sini, untuk kelancaran.
Secara default, Anda hanya akan melihat 'Halo'. Untuk melihat semua pesan, tekan tombol kecil di sebelah konektor USB beberapa kali, hingga Anda melihat 'M1-8' sebentar. Sekarang tampilannya mengulang semua pesan yang diunggah.
python ./led-badge-11x44.py -m 5 :gfx/fablabnbg_logo_44x11.png:
memuat gambar diam layar penuh. Hindari spasi antara titik dua dan nama. Jika Anda menerima pesan ImportError: cannot import name '_imaging'
, coba perbarui paket yang sesuai: sudo pip install -U pillow
python ./led-badge-11x44.py "I:HEART2:my:gfx/fablab_logo_16x11.png:fablab:1:"
menggunakan satu gambar bawaan dan satu gambar yang dimuat. Jantung sudah terpasang, dan logo fablab dimuat dari file. Logo fablab digunakan dua kali, sekali sebelum kata 'fablab' dan sekali lagi di belakang melalui referensi ':1:' (yang mereferensikan gambar pertama yang dimuat).
python ./led-badge-11x44.py -s7 -m0,1 :bicycle: :bicycle_r:
menunjukkan sepeda melintasi tampilan dari kiri ke kanan dan kanan ke kiri (sebagai pesan kedua). Jika Anda memilih mode 'M1-8', sepeda akan berjalan bolak-balik secara permanen di layar. Anda dapat menambahkan pesan singkat ke salah satu atau keduanya, untuk membuatnya tampak seperti sepeda sedang menarik teks tersebut.
python ./led-badge-11-x44.py -b0,1 -s1 -m5 " :heart2: :HEART2:" " :HEART2:"
menampilkan animasi sederhana berupa jantung yang berdetak perlahan pada pesan pertama, dan jantung yang berkedip pada pesan kedua.
./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
mencetak daftar nama ikon bawaan, termasuk :happy: :happy2: ❤️ :HEART: :heart2: :HEART2: :fablab: :bicycle: : cycle_r: :owncloud: ::
python ./led-badge-11x44.py --help
mencantumkan semua metode penulisan. Tidak menulis apa pun ke perangkat.
python ./led-badge-11x44.py -M list "dummy message"
mencantumkan semua perangkat yang tersedia dengan metode tulis 'hidapi'. Tidak menulis apa pun ke perangkat.
python ./led-badge-11x44.py -M hidapi -D list "dummy message"
memprogram perangkat tertentu dengan metode penulisan tertentu.
python ./led-badge-11x44.py -M hidapi -D "3-1:1.0" "Hello World!"
mencetak beberapa bantuan ringkas:
python ./led-badge-11x44.py -h
penggunaan: lednamebadge.py [-h] [-t TYPE] [-H HID] [-M METHOD] [-D DEVICE_ID] [-s KECEPATAN] [-B KECERAHAN] [-m MODE] [-b BLINK] [-a SEMUT] [-l] PESAN [PESAN...] Unggah pesan atau gambar ke lencana led 11x44 melalui USB HID. Versi 0.14 dari https://github.com/jnweiger/led-badge-ls32 -- lihat di sana untuk contoh lainnya dan pembaruan. argumen posisi: PESAN Hingga 8 teks pesan dengan ikon bawaan tertanam atau memuat gambar dalam titik dua (:) -- Lihat -l untuk daftarnya bawaan. pilihan: -h, --help tampilkan pesan bantuan ini dan keluar -t TYPE, --type TYPE Jenis tampilan: nilai yang didukung adalah 12x48 atau (standar) 11x44. Ubah nama program menjadi led- badge-12x48, untuk mengganti default. -H HID, --hid HID Tidak digunakan lagi, hanya untuk kompatibilitas mundur gunakan -M! Setel ke 1 untuk memastikan koneksi melalui HID API, program kemudian tidak akan kembali ke perpustakaan usb.core. -M METODE, --metode METODE Paksa menggunakan metode tulis yang diberikan. Gunakan salah satu 'otomatis', 'daftar' atau daftar apa pun yang sedang dicetak. -D DEVICE_ID, --id-perangkat DEVICE_ID Paksa penggunaan id perangkat yang diberikan, jika ambigu. Menggunakan salah satu dari 'otomatis', 'daftar' atau daftar apa pun yang sedang dicetak. -s KECEPATAN, --kecepatan KECEPATAN Kecepatan gulir (Rentang 1..8). Hingga 8 dipisahkan koma nilai-nilai. -B KECERAHAN, --kecerahan KECERAHAN Kecerahan tampilan dalam persen: 25, 50, 75, atau 100. -m MODE, --mode MODE Hingga 8 nilai mode: Gulir ke kiri(0) -kanan(1) -atas(2) -turun(3); masih terpusat (4); animasi(5); menjatuhkan- turun(6); tirai(7); laser(8); Lihat '--mode-help' untuk lebih detail. -b BERKEDIP, --berkedip BERKEDIP 1: berkedip, 0: normal. Hingga 8 dipisahkan koma nilai-nilai. -a SEMUT, --semut SEMUT 1: batas animasi, 0: normal. Hingga 8 dipisahkan koma nilai-nilai. -l, --list-names mencantumkan ikon bernama yang akan disematkan dalam pesan dan keluar. Contoh menggabungkan gambar dan teks: sudo lednamebadge.py "I:HEART2:kamu"
Ada beberapa opsi yang menentukan tipe default:
gunakan lednamebadge.py
secara langsung: tipe defaultnya adalah 11x44
ganti nama lednamebadge.py
menjadi sesuatu dengan 12
(misalnya badge12.py
) dan gunakan itu: tipe default adalah 12x48
gunakan led-badge-11x44.py
: tipe defaultnya adalah 11x44
gunakan led-badge-12x48.py
: tipe defaultnya adalah 12x48
Untuk semua opsi ini, Anda dapat mengganti tipe default dengan opsi baris perintah -t
Ada dua opsi untuk mengontrol perangkat mana yang diprogram dengan metode apa. Saat ini ada dua metode penulisan: satu menggunakan paket python pyusb ( libusb
), yang lain menggunakan pyhidapi ( hidapi
).
Tergantung pada lingkungan eksekusi Anda, kedua metode dapat digunakan, namun terkadang salah satu metode tidak berfungsi seperti yang diharapkan. Kemudian Anda dapat memilih metode yang akan digunakan secara eksplisit dengan opsi -M
. Dengan -M list
Anda dapat mencetak daftar metode penulisan yang tersedia. Jika Anda telah menghubungkan beberapa perangkat, Anda dapat membuat daftar id dengan opsi -D list
atau memberikan salah satu id perangkat yang terdaftar untuk memprogram perangkat tertentu. Default untuk kedua opsi adalah auto
, yang memprogram perangkat pertama yang ditemukan dengan metode tulis hidapi
. ID untuk perangkat yang sama berbeda-beda bergantung pada metode penulisan. Selain itu, mereka dapat beralih antara komputer dinyalakan atau dihubungkan kembali.
Lihat folder gfx/starfield untuk contohnya. Animasi N bingkai disediakan sebagai gambar dengan lebar N*48 piksel, untuk perangkat dengan lebar 48 dan 44 piksel.
Anda dapat menggunakan lednamebadge.py sebagai modul dalam kode pembuatan konten Anda sendiri untuk menulis adegan yang Anda buat ke perangkat.
membuat tajuk
tambahkan konten Anda sendiri
menulis ke perangkat
Metode header()
mengambil sejumlah parameter:
hingga 8 panjang sebagai tupel angka
setiap panjangnya adalah jumlah kolom byte untuk data bitmap terkait, yaitu jumlah byte data bitmap terkait dibagi 11 (untuk perangkat 11x44) masing-masing 12 (untuk perangkat 12x48), dengan satu byte adalah 8 lebar piksel.
argumen yang sebanding dengan argumen baris perintah: hingga 8 kecepatan, mode, bendera kedip, bendera semut masing-masing sebagai tupel angka, dan kecerahan (opsional) sebagai angka.
Secara opsional, Anda dapat memberikan stempel waktu sebagai waktu tanggal. Itu ditulis ke perangkat sebagai bagian dari header, tetapi tidak terlihat di tampilan perangkat.
Konten Anda sendiri harus berupa array byte dengan data bitmap untuk semua adegan. Tentu saja, itu harus sesuai dengan panjangnya.
Lihat grafik berikut untuk pemahaman yang lebih baik:
Untuk perangkat 12x48 harus ada 12 byte untuk setiap kolom byte, bukan 11, tentu saja.
Contoh:
Katakanlah Anda memiliki 2 adegan, satu berukuran 11x32 piksel, dan satu lagi berukuran 11x60 piksel. Jadi, yang pertama memiliki 4 kolom byte dan 44 byte, yang kedua harus diisi dengan 4 kolom bit kosong di kolom byte terakhir menjadi 11x64 piksel dan karenanya memiliki 8 kolom byte dan 88 byte.
Kami ingin menampilkan keduanya dalam mode 4, yang pertama dengan kecepatan 3 dan yang kedua dengan kecepatan 2 dan yang kedua akan ditampilkan dengan semut. Dan kami ingin mengatur kecerahan awal menjadi 50%.
Hal ini dapat dicapai melalui seruan berikut:
dari 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)
Ada dua parameter lagi pada metode write
: metode tulis dan id perangkat. Mereka bekerja persis seperti opsi baris perintah '-M' dan '-D'. Keduanya default ke auto
.
LedNameBadge.write(buf, 'libusb', '3:10:2')
Bahkan dengan list
Anda mendapatkan daftar pilihan yang tersedia yang dicetak ke stdout, yang kurang berguna, jika digunakan sebagai modul. Oleh karena itu, ada 2 metode untuk mengambil informasi ini sebagai objek data normal:
get_available_methods()
yang mengembalikan semua metode tulis yang diimplementasikan sebagai dict dengan nama metode sebagai kunci dan masing-masing boolean sebagai nilainya. Boolean menunjukkan apakah metode tersebut pada dasarnya dapat digunakan (berarti impor terkait berhasil)
get_available_device_ids(method)
yang mengembalikan informasi tentang semua perangkat yang terhubung/tersedia, juga sebagai dict dengan id perangkat sebagai kunci dan string deskriptif masing-masing sebagai nilainya.
>>> 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)'}
Dengan cara ini Anda dapat menghubungkan beberapa perangkat ke satu komputer dan memprogramnya satu per satu dengan panggilan write
yang berbeda.
Jika Anda memiliki lebih dari satu dengan string deskripsi yang sama, sulit membedakan perangkat asli mana yang memiliki id mana. Khususnya. setelah menyambung kembali atau memulai ulang, id dapat berubah atau ditukar. Jika Anda memiliki bus USB yang berbeda, sambungkan hanya satu perangkat ke bus. Jadi Anda bisa memutuskan berdasarkan nomor bus. Atau pertahankan urutan koneksi tertentu (saat komputer sudah berjalan), lalu Anda dapat memutuskan berdasarkan nomor perangkat. Mungkin metode hidapi sedikit lebih bisa diandalkan. Anda harus bereksperimen sedikit.
Anda juga dapat menggunakan pembuatan teks/ikon/grafik dari modul ini untuk mendapatkan buffer byte yang sesuai.
Ini cukup sederhana dan sama seperti penggunaan baris perintah. Ada opsi tambahan untuk membuat bitmap hanya dan hanya dari file gambar dengan memberikan nama file, bukan pesan.
dari lednamebadge import SimpleTextAndIconscreator = SimpleTextAndIcons()scene_a_bitmap = pencipta.bitmap("Halo :HEART2: Dunia!")scene_b_bitmap = pencipta.bitmap("Seperti yang Anda :gfx/bicycle3.png: suka...")scene_c_bitmap = pencipta.bitmap ("gfx/starfield/starfield_020.png")
Bitmap yang dihasilkan adalah tupel dengan array byte dan panjangnya masing-masing. Panjang ini dapat digunakan di header() secara langsung dan array byte dapat digabungkan ke header. Contoh:
dari lednamebadge import *creator = SimpleTextAndIcons()scene_x_bitmap = pencipta.bitmap("Halo :HEART2: Dunia!")scene_y_bitmap = pencipta.bitmap("Selesaikan contoh di depan.")your_own_stuff = create_own_bitmap_data()lengths = (scene_x_bitmap[1], scene_y_bitmap[1], barang_milikmu.len)buf = array('B')buf.extend(LedNameBadge.header(panjang, (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)
Anda memerlukan PlantUML dan kemungkinan titik GraphViz untuk menghasilkan diagram dari file *.puml.
Jalankan saja plantuml "*.puml"
dari direktori photos
untuk membuat ulang semua diagram.
Jalankan python run_tests.py
dari direktori tests
.
https://github.com/Caerbannog/led-mini-board
http://zunkworks.com/projects/programmablelednamebadges/ (Offline sejak 2019. Mulai 07-2024, masih tersedia di 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