今回はwebカムの接続を試して見ました。いろいろ話を聞いていると、データロガーが提示するデータだけでは情報が足りない、ということが多かったです。せっかくオンラインにするなら、写真とか「雰囲気」を伝えてくれるとありがたい、という意見が多かったです。言われてみれば、データだけなら今までのシステムでもできるし、とおもいましたので絵も転送できるようなケイパビリティを持たせたいなと思った次第。
webカムはRaspberry Piに接続できるのかどうか調べてみると、意外と簡単に接続できそうです。一昔前は結構苦労していたように感じたので、時代は進んだなあと。
で、キャプチャするソフトをリストアップしてみると。
- fswebcam スチル撮影
- motion 画像の変化を検出して記録
- guvcview 動画のキャプチャ(GUI必要?)
と言ったところが皆さんに使われているようです。特に監視カメラ用途ではmotionが便利そうです。
今回は、能動的にシャッターを切って記録する用途ですので、fswebcamを使うことにしました。
###USBカメラを接続してみる
とりあえずUSBカメラを何も考えずRaspberry Piにつないでみます。
認識されているか確認してみると
|
|
こんなかんじで認識されています。
次に、fswebcamをインストール。参考にしたのはこちら
続けて試し撮りなどしてみます。
|
|
上の例では解像度1000pxぐらいの絵をとってtest.jpgで保存してもらう例です。実際にはカメラの撮影可能な解像度に適宜調整されるようです。
撮影したのはいいですが、このままでは本当にとれているのか絵を觀ることができないので判りません。scpなどのコマンドで転送してもいいですが、すぐにMQTTで転送することを考えなきゃいけないので、とりあえず手動でmosquittoを使って転送してみます。
プロトコルとしては、どんなファイルでも(中身に関係なく)送れるのですが、mosquittoはコマンドラインということもあり、メッセージをサブスクライブしたときペイロードの内容を出力したあと改行コードを出力してしまいます。文字情報の時は便利なのですが、バイナリのときはちょっと厄介です。
それを抑止するために-N オプションがあり、これを使うとバイナリファイルも比較的扱いやすくなるはずです。
これを試してみます。
|
|
このあと、サブスクライブ側をCtrl−Cで中断して、サブスクライブしたtest.jpgを確認してください。
手動で中断しないといけないのが、イマイチですが一応転送はできます。
スクリプトによる写真データのサブスクリプションは、mosquitto_subでは対処しきれない感じがします。
ここは、paho版の出番になりそうですね。(もちろん、mosquittoのライブラリをつかってCで書いてもいいのですけど、わたしはCができませんので。。。。)
##おまけ
このままじゃあまり役立たないので、webサーバを動かして写真を配信する設定を試して見ました。
こちらのページ丸写しです。ありがとうございます。
webサーバにはいまどきの、nginxを選びました。apacheは昔苦労した記憶があり、めんどくさいし時間がかかりそうというイメージでしたので今時流行りを。
|
|
ここまでできたら、webサーバにアクセスしてみてください。
なにか反応があるはずです。
次に、とった写真を見れるようにします。
### 写真入りindex.htmlを用意
|
|
ここでwebをアクセスすると写真が見えるはずです。
一段落。
さて、このファイルはフラッシュメモリ上に展開されているので、あまり派手に何回もとっては消しをすると、あっという間にフラッシュメモリが使えなくなります。そこで、ramdiskを写真の置き場に使うことにします。
webサーバは指定したwebページ保存場所以外のファイルは読めないようなので、最初にramdisk上の写真ファイルのリンクをwwwディレクトリ上に作っておきます。
|
|
ここまで来ると、立派な定点カメラの出来上がり、という感じです。
MQTTのサブスクライバをつければ、シャッタや解像度のコントロールがMQTT経由でできますね。