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を好き勝手に光らせることができます。