USBカメラでキャプチャできなくなったときはUSBreset コマンドでリセット

(カテゴリ: raspberry_pi, カメラ, 遠隔監視)
  • [前提環境]
  •   ラズベリーパイ2(2015-09-24-raspbian-jessie) + USB camera(Logicool C270) + PC

fswebcam コマンドで静止画キャプチャができるようになりましたが、たまに次のようなエラーが出てキャプチャできなくなってしまうことがあります。USBコネクタを抜き差しするとまたキャプチャできるようになります。

Unable to find a compatible palette format.

ソフト的になんとかしないといけないので探したら usbreset コマンドというのが見つかりました。これを使うとエラー発生後、

$ ./usbreset.sh

と実行すれば、また静止画キャプチャすることができるようになります。

(lsusbすると判りますが Device番号はエラー前と変わります)

usbreset.sh は USBカメラ C270 のリセットを自動化(一発動作化)するスクリプトです。このスクリプトは lsusbを実行して C270の Bus 番号とDevice番号を調べて、それを使って usbresetコマンド(バイナリ)を呼びます。

なお、上記スクリプトを実行後次のようなメッセージが出ます。”Successfull”でなくて”Error…”となっている点が気になりますが、静止画キャプチャは確かに正常にできるようになります。推測ですが、USBリセットにおいて、切り離し、再認識の2段階において、途中でDevice番号が変わってしまうため、”No such device”となっているのではないかと思います。

  • Resetting USB device /dev/bus/usb/001/004
    Error in ioctl: No such device
  •   ※ /dev/bus/usb/001/004 の最後の2つの数字は状況で変わります。

ではまた。


◆<usbreset のインストール方法>

usbreset.c のソースをGithub x2q/usbreset.c から取得します。

$ git clone https://gist.github.com/x2q/5124616

$ cd 5124616

そしてコンパイルします。

$ gcc -o usbreset usbreset.c

◆<スクリプト:usbreset.sh>

次のページのものをそのまま使わせてもらいました。

Reset nondetachable USB devices on your laptop

  • —— usbreset.sh ——
  • #!/bin/sh
    ID=’046d:0825′  # Logitech, Webcam C270
    MATCHES=$(lsusb | sed -n ‘s/Bus \([0-9]*\) Device \([0-9]*\): ID ‘$ID’.*/\/dev\/bus\/usb\/\1\/\2/p’)
    if [ -z ${MATCHES} ]; then
    echo “No match found”
    else
    sudo usbreset $MATCHES
    fi
  • ——————————
  • ※ ID=’046d:0825′ のところは C270のID番号に変更しました。lsusbで調べられます。

以上

 

 

よりそいプラン 太陽光発電ムラ市場メルマガ登録

太陽光発電ムラ市場セカンダリ無料査定



太陽光発電ムラ市場 パワコンの電気代を10分の1に!