UV4Lで見守りカメラの製作

更新日: 2026.03.19

Pet Monitor overall

概要

Raspberry PI Zero 2WでUV4Lが意外とスムーズに動きました。UV4Lは簡単に音声と映像の 双方向Streamingが出来るのですが双方向のStreamingはZero 2Wには負担が大きく 相手は”映像と音声”こちらからは”音声”のみが実用範囲の様です。 それを踏まえて今回はZero 2Wで見守りカメラを製作します。

部品リスト

Raspberry Pi zero 2w

Raspberry Pi zero 2w

今回は Zero 2Wを使用します。

USB hub

USBハブ

Zero 2WはUSBポートが少ないのでこれでポートを増やしています。

USB Web camera

Webカメラ

安価なUSBカメラ。マイク内蔵。

2dof servo motor

2dofサーボ

2軸のARM。USBカメラをこれに取り付けてカメラの向きを制御します。

USB mini speaker

ミニスピーカー

ダイソーの300円スピーカ。電源はUSB。音入力は3.5mm ステレオミニプラグ

external sound card

外部サウンドカード

これで音声出力をミニプラグに変換しスピーカーにつなぎます。

AC adapter

ACアダプタ

ACアダプター 5V 1.5A 7.5Wの電源

SSR

SSR

AC100Vの交流で 25Aまで制御出来ます。制御信号はTTL/CMOS。

コンセント

コンセント

SSRの出力先。このコンセントにLEDライト等を接続。

配線と組み立て

product wiring

Zero 2Wと各部品を下記の様に接続しています。

  • USBハブ: ポートを拡張し、USBカメラや外部サウンドカードを接続。
  • サーボモニタ: GPIO20, 21を使用して2個のモータを制御。
  • SSR: GPIO26を使用し、AC100Vのスイッチングを制御。
  • ACアダプタ: 安定動作のため、サーボ等はハブを介さず直接電源を供給。

組み立て完成図。

outline of assembly

インストール

インストールは以下の手順で行って下さい。

Zero 2wのセットアップ

OS Setup
  • Raspberry PIデバイス -> Raspberry PI ZERO 2W
  • OS -> Raspberry PI OS(Legacy,32-bit) Lite
  • ストレージ -> SDカードを選択して下さい。16G以上推奨。

パラメタの設定とSSHの有効。Zero 2Wにキーボード等を繋がないのでSSHは必須。

OS Setup with option

OSのイメージ作成後、SDカードをセットしてブートします。

コードのダウンロードとインストール

wgetでコードをダウンロードして解凍。6つのファイル favicon.ico、index.html、monitor.css、monitor.js、monitor.py、setup.sh を含んだ monitor フォルダが作られます。 monitor フォルダに移動し setup.sh に実行権を与えて実行。インストールが開始されます。

wget https://hp.hatakekara.com/contents/raspberry/project/pet-camera/img/monitor.zip
unzip monitor.zip
cd monitor
sudo chmod +x setup.sh
./setup.sh

インストール完了後、uv4l-uvc.confasound.conf の修正を行います。

*/etc/uv4l/uv4l-uvc.conf:これにUSBカメラのIDを入力します。モニタで lsusb を実行しカメラのIDを確認。 今回の環境では以下の様になりました。(各自自分の環境で確認下さい)

$ lsusb Bus 001 Device 004: ID 1d6c:0103 webcamvendor webcamproduct
Bus 001 Device 003: ID 001f:0b21 Walmart AB13X Headset Adapter
Bus 001 Device 002: ID 214b:7250 Huasheng Electronics USB2.0 HUB
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

USBカメラのディバイスID表示が 1d6c:0103 と分かったので "uv4l-uvc.conf" を修正。 このファイルの最後が下記の様になっています。 device-id = xxxx:xxxx の箇所を device-id = 1d6c:0103 と修正し保存。

device-id = xxxx:xxxx
server-option = -use-ssl=yes
server-option = -ssl-private-key-file=/home/kita/monitor/localhost-key.pem
server-option = -ssl-certificate-file=/home/kita/monitor/localhost.pem

*/etc/asound.conf:システムに合わせてファイルを作製します。 マイクの確認。

$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: Audio [iStore Audio], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: webcamproduct [webcamproduct], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
カード1でした。続いてスピーカの確認
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Audio [iStore Audio], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: vc4hdmi [vc4-hdmi], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
カード0と分かりました。そこで、asound.conf は以下の様になります。
pcm.!default {
type asym
playback.pcm “plug:hw:0“
capture.pcm “plug:dsnoop:1“
}

IP Addressの固定

固定しなくても動きますが、スマホ等からのアクセスに関し固定した方が扱いが楽になります。 今回は自分の環境に合わせて下記のコマンドで 192.168.1.200 に固定します。
 $ sudo nmcli connection modify preconfigured ipv4.method manual ipv4.addresses 192.168.1.200/24

これでRaspberry PI側の設定は完了です。rebootして下さい。立ち上がったら Httpsサーバを起動させます。 monitorフォルダで sudo ./venv/bin/python3 monitor.py を実行。これでサーバが起動します。

ブラウザとSSL対応

今回はブラウザに Fire_Fox を使用しています。認証ファイルが自前なのでブラウザへ例外登録が必要になります。 登録後、Fire_Foxではコードが問題無く動いたのですが、Chromeではダメでした。
例外登録は今回使用する各ポート(8090, 8700, 443)に付いて行います。 ブラウザのURL欄に https://192.168.1.200:8090(webrtc_server)、  https://192.168.1.200:8700(gpio_handle_server)、  https://192.168.1.200:443(https_server) と入力して各ポート下図の様に登録して下さい。

Registering SSL Certificates in the Browser

コントロールHP

設定完了後、指定のIPアドレス(例: https://192.168.1.200)で管理画面へアクセスできます。

Over all of Control Panel

最後に

中々良い出来栄えです。

SINCE 2026