Raspberry Piを使って”みまもりカメラ”を作る


今回は、便利なミニコンピュータとして知られているRaspberry Pi(ラズパイ)を使って、自宅などの見守りカメラを作成していきたいと思います。

Raspberry Pi2(ラズパイ2)で以前にも同じことをやったのですが、今回は、Raspberry Pi3を使って始めから作っていきます。

準備

前回やったことを参考に準備を進めていきます。

ラズパイを使った配信カメラ

作業の手順は以下になります。

  1. ラズパイ3にラズパイOS(Raspberry Pi OS : 旧Raspbian)のインストール
  2. ラズパイOSのセットアップ
  3. ライブ配信ソフト(motion:モーション)のインストールとセットアップ
  4. ファイル共有ソフト(samba)をインストール
  5. 自動起動の設定
  6. 外部ネットワークからの接続

準備

まずは準備段階として、raspi_osのダウンロードとSDカードへの書き込みから行います。

Raspberry Pi公式ページよりダウンロードします。Raspberry Pi OS

今回はストリーミング配信サーバの用途にしか使いませんので 、Raspberry Pi OS Lite を選択しました。

イメージファイルのダウンロードを行い、 データ破損チェック用のsha256ハッシュコードを控えておきます。

次にダウンロードしたイメージをSDカードへの書き込みます。

今回使ったSDカードは8GBなのでOS(463MB)を入れてもかなり余裕があります。

Raspberry Pi OS SDカードの作成

Raspberry Pi OSの起動ディスクはSDカードになりますので、初期化してダウンロードしたイメージファイルの書き込みを行います。

SDカード内のデータ消去

ubuntu「ディスクユーティリティ」の「ディスクを初期化」を実行

SDカードのパーティションテーブル作成

~$ lsblk (デバイスを確認)
sdg 
~$ sudo gdisk /dev/sdg
#入力箇所(抜粋)
Proceed? (Y/N): y (続行します)
command (? for help): o (新しくGPTパーティションテーブルを作る)
command (? for help): n (パーティションテーブルに新しいパーティションを追加)
command (? for help): w (ディスクにパーティションテーブルを書き込み)
Do you want to Proceed? (Y/N): y (続行します)

SDカードのフォーマット

#FAT32フォーマットはmkfs.vfatコマンド、パーティションテーブル(/dev/sdg1)を選択

~$ sudo mkfs.vfat -v -c -F 32 -n raspios /dev/sdg1

# -v : 進捗の表示
# -c : 不良ブロックの精査
# -F : FATサイズの指定
# -n : ボリューム名(ラベル)

Raspberry Pi OS イメージの書き込み

通常ダウンロードではダウンロードしたファイルを実行するだけでSDカードへの書き込みもやってくれますが、lite版には無いようなので、ddコマンドで書き込みました。

# raspi osはzipファイルで配布されていますので、unzip コマンドで展開します。
~$ unzip 2021-10-30-raspios-bullseye-armhf-lite.zip (展開)
# SDへの書き込みはディスクがアンマウントされている必要があります。
~$ sudo umount /dev/sdg1 (アンマウント)
# conv=fsync (Macはconv=sync) を付けなければエラーが出るそうです。
~$ sudo dd if=2021-10-30-raspios-bullseye-armhf-lite.img of=/dev/sdg bs=4M conv=fsync (書き込み)

次に、別の端末からwi-fiでリモート接続ができるようにSDカードへ必要な情報を追加していきます。

headless セットアップの準備

raspberry piにモニターやキーボードをつながない場合には、sshでリモートセットアップを行います。そのためにheadlessセットアップを行う必要があります。

リモート接続、headless セットアップの詳細はこちらになります。

手順は先程書き込んだSDカードに「boot」ディレクトリへ ssh 空テキストファイルを追加します。

ssh は空のテキストですので touch コマンドで作成しました。

~$ touch ssh

また、wifiを使う場合は、他にも wpa_supplicant.conf ファイルの追加が必要です。

~$ vi wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP
network={
 ssid="<利用中のwifiのSSID>"
 psk="<利用中のwifiのパスワード>"
}

Raspberry Pi OS のセットアップ

Raspberry Pi の電源を入れたら、始めにリモート接続先(Raspberry Pi)のIPアドレスを知る必要があります。

方法はいくつかありますが、今回は nmap コマンドでローカルネットワークに接続された端末のIPアドレスを知る方法を行いました。

# nmap のインストール
~$ sudo apt install nmap
# Raspberry Piがローカルネットワークに接続されている状態で pingスキャン(-sn) を実行
~$ sudo nmap -sn 192.168.1.0/24

nmap は管理者権限(sudo)をつけることでホストの情報が表示されます。

Raspberry PiへSSH接続

nmap でraspberry PiのIPアドレスがわかりましたので、続いてsshでリモート接続します。

すでにsshは有効化されていますので、piユーザーでログインしました。

~$ sudo ssh pi@192.168.1.108 

初回アクセスで確認メッセージが出てきますので、「yes」と入力します。

接続完了で表示がpi@raspberrypi に変わります。

Raspberry Piの初期設定

初期設定の項目は次のようになります。

  • piユーザーのパスコード変更
  • raspi IPアドレスの固定
  • 作業用ユーザーの追加
  • raspi-configの設定(主にlocalisation Options)
piユーザーのパスコード変更

まずはpiユーザー共通のパスコード(raspberry)を変更します。

pi@raspberrypi:~ $ sudo passwd 
raspi IPアドレスの固定

ssh接続のたびにIPアドレスを調べなくてもいいように、raspi IPアドレスを固定化します。

pi@raspberrypi:~ $ sudo vi /etc/dhcpcd.conf

下記を一番下へ追加します。

interface wlan0                            #ip a で確認します。
static ip_address = 192.168.1.108/24       #固定するIPアドレス
static routers = 192.168.1.1               #使用しているルーター
static domain_name_servers = 192.168.1.1  

再起動します。

作業用ユーザーの追加

piユーザーでは何となく不安なので作業用ユーザーを追加しました。

pi@raspberrypi:~ $ sudo adduser picamera
pi@raspberrypi:~ $ sudo gpasswd -a picamera sudo  #ユーザーpicameraをsudoグループへ追加
pi@raspberrypi:~ $ id -a picamera  #確認
raspi-configの設定

最後に raspi-config でwi-fiを使用する国や言語などを設定します。

pi@raspberrypi:~ $ sudo raspi-config

コマンドを実行すると次のような画面が立ち上がります。

↑↓で移動、→ が <Finish> で ← が <Select> になります。

次の順序で設定します。

8. update:このツール(raspi-config)を最新版へアップデートする

5. Localisation Options:Local (言語と地域の設定)、Timezone (時刻を適用する都市の選択)、WLAN Country(wi-fiを利用する国の選択)のすべてを設定

  • L1 Locale : ja_JP.UTF-8 を選択(スペースキーでチェック)します。 注意:すでにチェックされている言語はアップデートに必要なので残します。
  • L2 Timezone : AsiaTokyo を選択します。
  • L3 WLAN Country : JP Japan を選択します。

6. Advanced Options

  • A1 Expand Filesystem :ファイルシステム展開、SDカードの領域がすべて利用可能であることを確認します。

ライブカメラソフト motion のインストール

ライブカメラソフト「motion」は、linuxでは apt-get (apt)でインストールできます。

raspiを再起動して、次のようにインストールします。

picamera@raspberrypi:~ $ sudo apt-get update
picamera@raspberrypi:~ $ sudo apt-get install motion

motion を起動します。

picamera@raspberrypi:~ $ sudo motion

停止は ctrl + c です。

カメラから配信された映像をみる

他のPC(リモート接続元)からも映像がみられるようにします。

picamera@raspberrypi:~ $ sudo vi /etc/motion/motion.conf

localhost(raspi)からのみ操作できる設定を、他のPCからも操作できるように変更します。

# Restrict webcontrol connections to the localhost.
; webcontrol_localhost on
webcontrol_localhost off

# Restrict stream connections to the localhost.
; stream_localhost on
stream_localhost off

これだけの設定で次のような映像をみることができます。

初期設定で映像も録画されますので、SDカードの容量にも注意する必要があります。

映像の録画を停止

映像の録画を止めるには設定を次のようにします。

# Create movies of motion events.
; movie_output on
movie_output off

録画映像の保存場所を変更

録画された映像の保管場所( /var/lib/motion/ ) は管理者権限が必要なので、ユーザーディレクトリ( /home/picamera/motion/ )へ変更しました。

# Target directory for pictures, snapshots and movies
; target_dir /var/lib/motion 
target_dir /home/picamera/motion

なお、録画されたファイルのアクセス権は root です。

ファイル共有ソフト(samba)のインストール

録画映像をいつでもリモートPCから見ることができて、コピー、削除などができるように samba をインストールします。

picamera@raspberrypi:~ $ sudo apt update
picamera@raspberrypi:~ $ sudo apt install samba

共有するフォルダ(ディレクトリ)を作成

picamera@raspberrypi:~ $ mkdir motion

sanba設定に作成したフォルダを追加

picamera@raspberrypi:~ $ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.org  #初期設定を残す。
picamera@raspberrypi:~ $ sudo vi /etc/samba/smb.conf

次の設定項目を最下行へ追加します。

[motion]
    comment = motion capture
    path = /home/picamera/motion
    browseable = yes
    read only = no
    public = yes
    force user = picamera 

samba ユーザー管理 (pdbedit)で共有するユーザー名を登録します。

picamera@raspberrypi:~ $ sudo pdbedit -a picamera (追加登録)
picamera@raspberrypi:~ $ sudo pdbedit -L (確認)

他のPC(リモート接続元)から共有フォルダを開く

ubuntuの場合は「ファイル」→「他の場所」から「RASPBERRYPI」を選択して、登録ユーザー(picamera)とパスコードを入力します。

先程に作成した「motion」ディレクトリを開いて、録画された映像の確認やコピー、削除などできるかを確認します。

自動起動の設定

まず、motionを自動起動(システム制御)にするための準備を行います。

  • motion.conf の設定で daemon on の場合はoff へ変更します。
  • /var/log/motion/motion.log ファイルのユーザー(グループ)所有権をroot からmotionへ変更します。
  • 録画映像保存先(/home/picamera/motion/)のディレクトリのユーザー(グループ)所有権をユーザー(picamera)からmotionへ変更します。
  • 録画映像保存先(/home/picamera/motion/)のディレクトリのアクセス権をユーザーへ開放します。

daemon off へ変更

picamera@raspberrypi:~ $ sudo vi /etc/motion/motion.conf
# Start in daemon (background) mode and release terminal.
; daemon on
daemon off

/var/log/motion/motion.log ファイルのユーザー(グループ)所有権を root から motion へ変更

picamera@raspberrypi:~ $ sudo chown motion:motion /var/log/motion/motion.log

/home/picamera/motion/ ディレクトリのユーザー(グループ)所有権を picamera から motion へ変更

picamera@raspberrypi:~ $ sudo chown motion:motion ~/motion

/home/picamera/motion/ ディレクトリのアクセス権限を ユーザー(picamera) へ開放

picamera@raspberrypi:~ $ sudo chmod 777 ~/motion

自動起動の設定

まずは状態を確認します。

picamera@raspberrypi:~ $ sudo systemctl status motion

Loaded: loaded (/lib/systemd/system/motion.service; enabled; vendor preset: enabled)

のようにmotion が有効になっていればstart で起動します。

picamera@raspberrypi:~ $ sudo systemctl start motion

再起動してみて、webブラウザで映像を確認します。

次に、ファイル共有先へアクセスしてファイルの実行、削除ができることを確認します。

設定変更などで停止・再起動が必要な場合は

picamera@raspberrypi:~ $ sudo systemctl stop motion

外部ネットワークから映像をみる

ルーター設定でraspiカメラのアドレスとポートを開放して、外部から映像を見ることができます。

NECルーターの場合はポートマッピング設定のNATエントリに追加します。

スマホなどのwebブラウザからWAN側のアドレスとポート番号を入力して配信映像をみられればOKです。

なお、映像のチェックは外部からのコントロールができないように設定を変えるか、コントロール可能なポート(8080)をアクセス拒否にする必要があります。

本当は、前回に行ったvpn接続から映像を確認できるようにしたかったのですが、次回にしたいと思います。

まとめ

今回は、以前にやったraspberry pi のライブ配信カメラ作成の内容をわかりやすくしたつもりです。

以前のものは、あまりよく理解しないまま作業を進めてしまったこともあり、改めて見直すと、やらなくて良いことをしてみたり、必ずやらなければならないことが抜けていたりということで、今回まとめたことの意義は大きかったと思います。

最終的には、外部ネットワークからVPN接続でライブ映像をみることができるようにしたいと考えています。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)