10
11

More than 1 year has passed since last update.

ラズパイとWebカメラで赤ちゃんに優しいベビーモニターを作る

Last updated at Posted at 2020-07-04

はじめに

Raspberry Pi と Web カメラで赤ちゃんに優しいベビーモニター(監視カメラ)をつくります。

赤ちゃんが起きないように、Rapberry Pi とWeb カメラの録画 LED を消します。Raspberry Pi には、LAN0、LAN1、Power、Activity の 4 つの LED があります。

更新:2020/07/05 設定手順を簡略化

所要時間:60分~120分

環境

  • Raspberry Pi
    • Raspberry Pi 3 MODEL B
    • microSD 8GB 以上
  • Web カメラ
    • Logitech HD Pro Webcam C920(UVC カメラなら大丈夫)
  • 母艦
    • Windows Home 10(Mac でも linux でも OK)
  • ネットワーク
    • WiFi 環境がある前提
    • DHCP サーバーのIP アドレス割当一覧が確認できると楽

環境構築

OS インストール

  1. Windows PC に Raspberry Pi Imager for windows をインストール
  2. Raspberry Pi Imager を 実行し、microSD に Raspberry Pi OS Lite (Raspbian Lite) を書き込む
  3. microSD のルートディレクトリに空ファイル ssh を作成
  4. microSD のルートディレクトリに wpa_supplicant.conf を作成(※下のサンプル参照)
  5. Raspberry Piに microSD を刺してラズパイを起動
  6. DHCP サーバーの IP アドレス割当一覧を確認し、IP アドレスに当たりをつける
    (うちのラズパイのMACアドレスベンダーコードは"b8:27:eb"でした)
  7. WSL、コマンドプロンプト、Tera Term 等を起動して ssh でログイン(ユーザid:pi、パスワード:raspberry)
SSHログイン_サンプル
$ ssh pi@192.168.1.100
Password: raspberry
wpa_supplicant.conf_サンプル
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

network={
    ssid="YourSSID"
    psk="YourPassword"
}

コマンド入力

sudo apt update
sudo raspi-config  # メニューで下の項目を設定し、最後にリブート

再度ログインして以下のコマンドを入力。

sudo apt update
sudo apt upgrade -y
sudo apt-get install -y icecast2 uvcdynctrl ffmpeg  # 途中で icecast2 の設定 → password 変更
echo dtparam=eth_led0=14 | sudo tee -a /boot/config.txt  # LAN の Led を消す
echo dtparam=eth_led1=14 | sudo tee -a /boot/config.txt  # LAN の Led を消す 
cat > start_video.sh  # 下のほうのスクリプトをコピペして ctrl-D で終了
chmod 755 start_video.sh  # 実行属性をつける
crontab -e  # 自動実行を設定
sudo reboot  # 再起動してサービス開始!

再起動すると、自動的にストリーミングが始まります。起動直後は、LED が点灯しますが、ストリーミングがはじまると LED が消えます。

利用

同じネットワークの PC やスマホから以下のURLを参照します。

http://<raspberry pi ip address>:8000/

ストリーミング画面で「M3U」をクリックします。「VLC」で開くことができました。Microsoft Media Player では開けません。

icecast.png

各設定の詳細

raspi-config

  • Change passwd
  • Network
    • hostname
  • Localizeation
    • locale
      • en_GB.UTF-8、ja_JP.UTF-8 を選択
      • ja_JP.UTF-8 をデフォルトロケールに指定
    • Timezone
      • Asia
        • Tokyo
    • WLAN Country
      • JP Japan

映像+音声ストリーミング配信用スクリプト

start_video.sh
#!/bin/sh

PASSWORD=password  # icecast2 の source パスワードを設定
VIDEO_SIZE=320x180

# 部屋がうす暗いので、Webcam の感度を最大にします
uvcdynctrl -d video0 -s "Brightness" 255
uvcdynctrl -d video0 -s "Contrast" 255
uvcdynctrl -d video0 -s "Saturation" 255
uvcdynctrl -d video0 -s "Gain" 255

# Webcam とラズパイの LED を消します
uvcdynctrl -d video0 -s 'LED1 Mode' 0
echo 0 | sudo tee /sys/class/leds/led0/brightness
echo 0 | sudo tee /sys/class/leds/led1/brightness

ffmpeg \
  -f v4l2 -video_size $VIDEO_SIZE -framerate 1 -i /dev/video0 \
  -f alsa -i hw:1 \
  -f webm -cluster_size_limit 1M -cluster_time_limit 5100 -content_type video/webm \  -c:a libvorbis -b:a 64K \
  -c:v libvpx -b:v 0.5M -crf 30 -g 150 -deadline good -threads 4 \
  -ice_name "2F お布団の部屋" \
  -ice_description "お布団を見渡す映像" \
  -ice_genre "live camera" \
  icecast://source:${PASSWORD}@localhost:8000/webcam

※ Web カメラのマイクがモノラルの場合は、start_video.sh の ffmpeg コマンドオプションに -ac 1 を追加して下さい。(@ryuusen999 さんに感謝!)

Cron 設定

モニターを動かす時間帯を7時から19時半までとしました。
毎日7時にストリーミング配信スクリプトを起動します。
毎日19時半にストリーミング配信を停止します。
再起動後も自動的にストリーミング配信するようにしました。

$ crontab -e
0 7 * * * /home/pi/start_video.sh > /dev/null
30 19 * * * killall ffmpeg
@reboot sleep 10 ; /home/pi/start_video.sh > /dev/null

その他、便利なコマンド

録音ハードウェアのリスト

$ arecord -l
**** ハードウェアデバイス CAPTURE のリスト ****
カード 1: C920 [HD Pro Webcam C920], デバイス 0: USB Audio [USB Audio]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0

カメラのリスト

$ v4l2-ctl --list-devices
HD Pro Webcam C920 (usb-3f980000.usb-1.2):
        /dev/video0
$ v4l2-ctl -d /dev/video0 --info
Driver Info (not using libv4l2):
        Driver name   : uvcvideo
        Card type     : HD Pro Webcam C920
        Bus info      : usb-3f980000.usb-1.2
        Driver version: 4.14.98
        Capabilities  : 0x84200001
                Video Capture
                Streaming
                Extended Pix Format
                Device Capabilities
        Device Caps   : 0x04200001
                Video Capture
                Streaming
                Extended Pix Format 
$ v4l2-ctl --list-devices --verbose --all
<出力省略>

$ v4l2-ctl  -i /dev/video0 --list-formats
<出力省略>

$ v4l2-ctl  -i /dev/video0 --list-formats-ext
<出力省略>

音声ストリーミング配信用スクリプト

start_voice.sh
#!/bin/sh

ffmpeg \
  -f alsa \
  -i hw:1 \
  -acodec libmp3lame \
  -ac 1 \
  -ab 128k \
  -content_type audio/mpeg \
  -f mp3 \
  icecast://source:password@localhost:8000/sound

SSH が切れないようにする設定

# SSH のタイムアウトを延長
sudo sh -c "echo ClientAliveInterval 60 >> /etc/ssh/sshd_config"
sudo sh -c "echo ClientAliveCountMax 3 >> /etc/ssh/sshd_config"

Raspberry Pi 3 の場合、以下を実施します。パワーマネージメントを OFF にするため、/etc/rc.local の exit 0 の行の前に追記します。

/etc/rc.localに追記
iwconfig wlan0 power off

Raspberry Pi 2 の場合、以下のコマンドを実行します。パワーマネージメントを OFF にするため、一度だけ実行します。

# 無線LANのパワーマネージメントをOFFにする
sudo sh -c "echo options 8192cu rtw_power_mgnt=0 rtw_enusbss=1 rtw_ips_mode=1 > /etc/modprobe.d/8192cu.conf"
10
11
11

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11