👶

【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 をインストールします。
インストール方法は公式ドキュメントを参考にしてください。
https://www.raspberrypi.com/documentation/computers/getting-started.html#installing-the-operating-system

2. USB カメラの接続

USB カメラをラズパイに接続します。
Raspberry Pi OS をインストールしたら、USB カメラを接続して、lsusb コマンドで認識されているか確認します。

$ lsusb
Bus 001 Device 004: ID foo:bar Logitech, Inc. Webcam C615

3. Momo のインストール

今回は、WebRTC ネイティブクライアントとして Momo を使います。
https://momo.shiguredo.jp/

今回は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 カメラが転がっている方は、ぜひ試してみてください。

参考記事

https://www.raspberrypi.com/software/
https://momo.shiguredo.jp/
https://github.com/shiguredo/momo/blob/develop/doc/USE_TEST.md
https://github.com/shiguredo/momo/blob/develop/doc/SETUP_RASPBERRY_PI.md
https://qiita.com/Ninagawa123/items/88460922abb04a82c220

Discussion