プログラムで制御できるUSB接続LED(BlinkStick)を動かしてみた

スポンサーリンク

Pythonを使って、できるだけ手軽にLEDを光らせたい。それもRaspberry PiとかM5Stackとか何か間にワンクッション挟むことなく、USBに差し込む、プログラムを動かす、光るぐらいの手軽さで。 USBに差し込むだけで勝手に光る製品は沢山あるけど、Pythonで制御できるものがなかなか見つかりませんでした。

けど、一つだけ見つけました。リトアニアの会社が作っているBlinkStickという製品。SDKオープンソースで、様々なOSやプログラミング言語に対応しているそうです。日本にも発送してくれるので、注文してみました。


購入したのは次の3つ

BlinkStick Nano:LEDが裏表で一つずつ付いた製品

写真がうまく撮れなかった

BlinkStick Strip:LEDが8個並んだ製品

BlinkStick Flex:LEDが24個並んだ製品

どの製品もUSBで接続して、Pythonでサクッと動きました・・・と言いたかったのですが、残念ながらソフトウェアやドキュメントがメンテナンスされている状態とは言い難い状態。。。
それでも、ハマるポイントを避けつつ一度セットアップすれば、その後はスムーズに動きました。 製品としては気に入ったものの、おすすめはしづらい。。。


動作確認環境

ミニPC: TRIGKEY Green G5
OS: Ubuntu 22.04.3


USBの認識

BlinkStickをUSB接続すれば、一瞬だけ1つ目のLEDが光ります。
lsusbで下記のように表示されれば認識もOK。

$ lsusb
省略
Bus 001 Device 013: ID 20a0:41e5 Clay Logic BlinkStick



pythonパッケージのインストール

2025年1月現在、公式の手順(pip install)では動きません。
gitはメンテナンスしてくれているので、ソースコードをダウンロードして、インストールします。

$ git clone https://github.com/arvydas/blinkstick-python.git
$ cd blinkstick-python
$ pip3 install .

ターミナルを終了して別ターミナルを立ち上げる。

blinkstickというコマンドが実行できれば、インストール完了です。

$ blinkstick
BlinkStick control script 1.2.0
(c) Agile Innovative Ltd 2013-2014

Usage: blinkstick [options] [color]

Options:
  -h, --help            show this help message and exit
省略


初回実行時のエラー例

blinkstickコマンドでオプションを指定して、光らせようとしても初回は失敗します。

$ blinkstick random
Traceback (most recent call last):
省略
    raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 13] Access denied (insufficient permissions)

root以外のユーザーで実行しようとしても権限の都合で失敗します。

権限付与

udevを設定してあげることで権限を付与します。

$ echo "SUBSYSTEM==\"usb\", ATTR{idVendor}==\"20a0\", ATTR{idProduct}==\"41e5\", MODE:=\"0666\"" | sudo tee /etc/udev/rules.d/85-blinkstick.rules
$ sudo udevadm control --reload-rules
$ sudo udevadm trigger

権限付与後の実行例

ランダムな適当な色で光らせる

$ blinkstick random


赤色でON/OFFを3回繰り返す

$ blinkstick --blink red --repeats 3


青色で徐々に明るく暗くを3回繰り返す

$ blinkstick --pulse 0000FF --repeats 3


blinkstickコマンド自体がPythonプログラムです。なので、あとは自分でPythonプログラムを作ればLEDを好き勝手に光らせることができます。

リンク

blinkstickのページ
blinkstick-python(Python用SDK)
公式フォーラム
回路図