RaspberryPi

子守 with らずぱい

RaspberryPiで暗視カメラ

ワタクシゴトですが、うちにはオチビがおります。まだ0歳です。
19時くらいから寝てもらうことにしているのですが、自分はまだ流石に寝ないですね。
かといって、リビングで寝てもらうには眩しいだろうなぁということで、リビングの隣の部屋を暗くして寝てもらっています。
リビングのくつろぎスペースからは見渡せるところに寝てくれているのですが、ちょっとキッチンに立ちたいときや、お風呂に入りたいときなど、うつ伏せ寝になっていないかなぁなど、気になってしょうがないです。
そこで、暗視カメラを設置し、ストリーミング配信し、スマホからチェックすることにしました。

Setup Raspberry Pi

まずはRaspberry piのセットアップをおこないます。
Raspberry piのOSはDebianベースのRaspbianにしました。Liteでも良かったのですが、GUIが欲しい日も来るだろうと思い、Raspbian Stretch with desktopにしました。
ダウンロードはこちらから。

まずはSDカードを初期化します

SDカードをDiskUtilityで初期化しても良いのですが、一度Raspberry用にセットアップしていたりすると、完全にきれいになりません。
そこで、ここでは完全に初期化する方法を取りたいと思います。Terminalを立ち上げて、次のコマンドを入力します。

user$ diskutil list

リストの中からSDカードっぽいものを見つけます。
そのディスクの名前とフォーマットのタイプを指定してフォーマットします。

diskutil eraseDisk MS-DOS RPI disk2

次にOSをインストールします

先程ダウンロードしたRaspbianのimgファイルをどこかわかるところに置いておきます。
インストール先のSDカードがどこにマウントされているかを確認します。

user$ df
/dev/disk2s2 ~

SDカードのマウント先を確認できたら、そのカードを一旦アンマウントします。

user$ diskutil unmount /dev/disk2s2

次に、imgファイルのパスを確認した上で、下記コマンドで書き込みます。

user$ sudo dd bs=1m if=[解答した.imgファイルのパス] of=/dev/rdisk2

disk2s2をrdisk2にするのは、ちょこっと高速になる裏技らしいです。
しばらく何も反応がないので不安になりますが、じっと耐えると

3248+0 records in
3248+0 records out
3405774848 bytes transferred in 217.669749 secs (15646524 bytes/sec)

こんな感じで出てくるので、安心してください。

microSDをRaspberryPiにセットする

USBキーボードとマウスとモニターがある人は、RaspberryPiにmicroSDをセットして、起動してください。
GUI対応なのでとりあえず起動するところまではすぐ行くと思います。

USBキーボードとか用意していない場合

ssh接続で接続してがんばりましょう。
raspbianをssh起動させるために、raspbianのSDカードを改めてPCに差し込みます。
そして、ディスクのルートに"ssh"という名前のファイルを作成します。(拡張子不要)
これがあるとssh起動するようにできているみたいです。

あらためて、SDカードをRaspberry Piにセットし、電源を入れます。
はじめはsshで接続するので、有線LANでルーターに接続してください。
いずれにしても、何かしらの有線接続が必要になりますね。

ssh接続のホスト側PCもRaspberry Piと同じルーターに接続しておき、

user$ arp -a

でネットワークにあるssh対象を検索します。
RaspberryPiは、Macアドレスの上位6桁がB8-27-EBになります。
これで見分けることができます。
Macアドレスの上位6桁はベンダIDです。Raspberry Pi Fundationに割り振られているIDです。

これで接続先のIPアドレスがわかったと思うので、

user$ ssh pi@[IPアドレス]

で接続をします。初期設定では、ユーザーがpiでパスワードがraspberryです。

接続できたら、IPを固定してしまいましょう。大体いつも同じIPになるようにはなっていますが、
DHCPを信じ切るのも良くないです。

sudo vi /etc/dhcpcd.conf

とタイプし、viエディタを起動してdhcpcd.confを編集します。
viエディタの使い方がわからない場合は検索してからやりましょう。
困ったら:q!で強制脱出しましょう。
static IPのところをご自分の環境に合わせて変更して、dhcpcd.confを保存して終了です。

ssh接続して、Bluetoothデバイスをつなぐ

私の場合、有線のマウスはありませんでしたが、無線ならありました。
そこで、ssh接続してBluetooth設定ができれば、何かと便利だろうと思った次第です。
これはbluetoothに対応しているraspberry pi 3でのお話です。

pi@raspberrypi:~ $ bluetoothctl

これでBluetoothコントロールに入れます。

[bluetooth]# scan on

で接続待機中のBluetoothデバイスがスキャンできます。

Device XX:XX:XX:XX:XX:XX Name:BlueToothMouse

このアドレスをコピーして

pair XX:XX:XX:XX:XX:XX
connect XX:XX:XX:XX:XX:XX
trust XX:XX:XX:XX:XX:XX

とすれば、ペアリング-> 接続-> 次回以降も自動接続 という設定ができます。

暗視カメラをセットアップする

を参考にしました。
暗視カメラはサインスマートのものを買いました。

環境整備

pi@raspberrypi:~$ sudo apt-get update
pi@raspberrypi:~$ sudo apt-get upgrade

でがさっと更新しておく。
Raspberry PiのConfigを起動する。

pi@raspberrypi:~$ sudo raspi-config

ここから、5 Interfacing Optionsを選択し、P1 Cameraを選択します。
これをenableにして、再起動します。

画像を撮影してみる

raspistill -o image.jpg

とすると、撮影してimage.jpgとして保存してくれる。

ファイルを回収する

Raspberry Pi側に、

sudo apt-get install netatalk

をインストールし、Finderで接続すると便利です。
これで、写真撮影までは成功ですね。

動画をストリーミング配信する

動画のストリーミング配信にはmjpg-streamerを使うことにしました。
まずはmjpg-streamerのソースをとってきたりするので、作業用ディレクトリを作ります。

pi@raspberrypi:~$ mkdir mjpg-streamer
pi@raspberrypi:~$ cd mjpg-streamer

次に、ソースをとってきてビルドします。

~$ sudo apt-get install libjpeg8-dev cmake
~$ git clone https://github.com/jacksonliam/mjpg-streamer.git mjpg-streamer
~$ cd mjpg-streamer/mjpg-streamer-experimental
~$ make
~$ sudo mv mjpg-streamer/mjpg-streamer-experimental /opt/mjpg-streamer

ビルド成果物は/opt/mjpg-streamerにうつしておくと良いです。
続いて実行してみます。

~$ cd /opt/mjpg-streamer
~$ ./mjpg_streamer -o "./output_http.so -w ./www -p 8080" -i "./input_raspicam.so -fps 30 -x 320 -y 240"

8080番ポートで320*240の動画をストリーミング配信するという感じです。

あとはブラウザでRaspberryPiのIPアドレスと、さっきのポート番号(8080)を指定してあげれば、ストリーミング配信がみれます。配信ページのカスタマイズはまた今度、とします。