説明
ラズパイをテレビにつないでVLCで音楽を聞いたりギターのエフェクターに使ったりしていたんですが、常にVLCを自動起動していて使わないときはいちいち消してました。
音楽はUSBメモリに入れていて違うデバイスを使うときは使わないので、ラズパイ起動時にUSBメモリが挿入されていた時にVLCを起動するようにしたところ便利でした。
そこでUSBオーディオ変換アダプタを挿入していたらPureDataを実行するようにもしてみました
自分の環境
本体
Raspberry Pi Zero W, Windows 10
ソフト
"RASPBIAN STRETCH WITH DESKTOP", Python3, Windows 10
コード
#!/usr/bin/python3
import time
import os
import sys
import usb
# 右がベンダー 左が製品 どちらも10進数であることに注意! 変数名は各自で変えてください
checkmic = (3190, 5663)
checkusb = (13624, 2305)
while True:
# USBのデバイスをリストにするが、二重リストになっているのでフラットにする。
usblist = [b.devices for b in usb.busses()]
usblist = [e for ilist in usblist for e in ilist]
usblist = [(b.idVendor, b.idProduct) for b in usblist]
if checkmic in usblist:
# マイクなら
os.system('pd')
break
if checkusb in usblist:
# USBメモリーなら
os.system('vlc')
break
else: #何もヒットしなかったら実行しない
break
詳細
このコードはUSBデバイスが挿入時にシャットダウンするもので本来はwhileループで常に指定のデバイスがないか確認してました。
起動時に一回だけでいいのでアレンジしました
元のコードはこちらをご覧ください
Raspberry piに特定のUSB機器を差し込むと電源を落とすデーモンをPythonで作る
ちなみにループ内のifのところを増やしたら対応するデバイスを増やせます、削れば減らすこともできます。
これを一度実行してちゃんと動くか確認してからautostartに登録します、
これはこちらをご覧ください
Raspberry PiでPythonプログラムを自動的に起動させる.(autostart)
書き方は
@/usr/bin/python3 /home/pi/usb-autostart.py
と書きました(念のためフルパス)
注意点
whileループの下のコメントアウトの書いてある通り10進数で書く必要があるので16進数から変換する必要があります、各自で調べてください。
(今はそういったサイトがたくさんあって驚いた)
Pi Zero Wは通信USBポートが一つなのでヒットするデバイスが複数あった場合にはなにが起きるか検証できてません。
import usb と書いたのですがこのモジュールは入っていたか覚えていません、ここでエラーが出てしまったら
pip3 install usb
と実行してみてください
万が一「動かないよー」ということがあれば環境とやったことを添えてコメントをください、遅くなるかもしれませんが確認してから返信します。
#参考になったサイト
Raspberry piに特定のUSB機器を差し込むと電源を落とすデーモンをPythonで作る
Raspberry PiでPythonプログラムを自動的に起動させる.(autostart)