【WebRTC】Raspberry Pi + USBカメラでベビーモニターを作る
はじめに
4月末に子どもが生まれるので、家に転がっていたラズパイと USB カメラを使ってベビーモニターを作ることにしました。
今回は自宅でのみ使用する想定で、外出先からのアクセスは考慮していません。
n番煎じな記事ですが、作る過程を記録しておきます。
技術構成
構成
ほぼ Momo 公式サイトのテストモードの画像のまんまですが、Raspberry Pi に USB カメラを接続して、Momo を使って WebRTC のストリーミングを行います。
今回は自宅の Wi-Fi 環境下のみの運用を想定しています。
方法
1. Raspberry Pi OS のインストール
Raspberry Pi Imager を使って、Raspberry Pi OS をインストールします。
インストール方法は公式ドキュメントを参考にしてください。
2. USB カメラの接続
USB カメラをラズパイに接続します。
Raspberry Pi OS をインストールしたら、USB カメラを接続して、lsusb
コマンドで認識されているか確認します。
$ lsusb
Bus 001 Device 004: ID foo:bar Logitech, Inc. Webcam C615
3. Momo のインストール
今回は、WebRTC ネイティブクライアントとして Momo を使います。
今回はGitHub の Momo リポジトリにあるビルド済みのバイナリを使います。
momo-2024.1.1_raspberry-pi-os_armv8.tar.gz
の部分は適切なバージョンに置き換えてください。
$ wget https://github.com/shiguredo/momo/releases/download/2024.1.1/momo-2024.1.1_raspberry-pi-os_armv8.tar.gz
$ tar -xvf momo-2024.1.1_raspberry-pi-os_armv8.tar.gz
4. Momo の起動
Momo を起動します。
今回はテストモードで起動します。
Momo のバイナリがあるディレクトリに移動して、以下のコマンドを実行します。
オーディオデバイスは使用しないので、今回は--no-audio-device
オプションを指定しています。
$ ./momo --no-audio-device test
起動に成功すると、localhost:8080
で HTTP サーバが起動します。
5. ファイヤーウォールの設定
最後にタブレットやスマホからアクセスできるように、Raspberry Pi のファイヤーウォールの設定を行います。
今回はufw
コマンドを使って、ポート 8080 を開放します。
ufw
がインストールされていない場合はインストールしておきましょう。
# ufwがインストールされていない場合はインストールし、ufwを有効にする
$ sudo apt install ufw
$ sudo ufw enable
# 同じネットワーク内のデバイスからアクセスできるようにポート 8080 を開放
# 設定するIPアドレスは適宜変更する
$ sudo ufw allow from 192.168.1.0/24 to any port 5000 proto tcp
6. タブレットやスマホからアクセス
タブレットやスマホから、ラズパイで起動している Momo の HTTP サーバのベビーモニターのページにアクセスします。
http://<Raspberry Pi の IP アドレス>:8080/html/test.html
にアクセスし、Connect
ボタンを押すと、カメラの映像が表示されます。
以上で、ベビーモニターは完成です。
おまけ: ラズパイ起動時にベビーモニターを自動起動する
ラズパイ起動時にベビーモニターが自動起動するように、systemd サービスを作成します。
/etc/systemd/system/baby-monitor.service
というファイルを作成し、以下の内容を記述します。
[Unit]
Description=Baby Monitor
After=network.target
[Service]
ExecStart=/home/foo/bar/momo --no-audio-device test # フルパスで Momo を実行するように定義
WorkingDirectory=/home/foo/bar # Momo のバイナリがあるディレクトリ
User=baz # ユーザ名
Restart=on-failure
[Install]
WantedBy=multi-user.target
以下のコマンドを実行して、サービスを有効にします。
$ sudo systemctl daemon-reload
$ sudo systemctl enable baby-monitor.service
$ sudo systemctl start baby-monitor.service
これで、ラズパイ起動時にベビーモニターが自動起動するようになります。
おわりに
以上が WebRTC Native Client の Momo を使った Raspberry Pi + USB カメラで作るベビーモニターの手順でした。
WebRTC の知識が全くない私ですが、Momo のおかげで簡単に作ることができました。
自宅に使ってないラズパイと USB カメラが転がっている方は、ぜひ試してみてください。
参考記事
Discussion