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

Raspberry Pi zero 2w
今回は Zero 2Wを使用します。

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

Webカメラ
安価なUSBカメラ。マイク内蔵。
2dofサーボ
2軸のARM。USBカメラをこれに取り付けてカメラの向きを制御します。
ミニスピーカー
ダイソーの300円スピーカ。電源はUSB。音入力は3.5mm ステレオミニプラグ
外部サウンドカード
これで音声出力をミニプラグに変換しスピーカーにつなぎます。
ACアダプタ
ACアダプター 5V 1.5A 7.5Wの電源
SSR
AC100Vの交流で 25Aまで制御出来ます。制御信号はTTL/CMOS。
コンセント
SSRの出力先。このコンセントにLEDライト等を接続。
配線と組み立て
Zero 2Wと各部品を下記の様に接続しています。
- USBハブ: ポートを拡張し、USBカメラや外部サウンドカードを接続。
- サーボモニタ: GPIO20, 21を使用して2個のモータを制御。
- SSR: GPIO26を使用し、AC100Vのスイッチングを制御。
- ACアダプタ: 安定動作のため、サーボ等はハブを介さず直接電源を供給。
組み立て完成図。
インストール
インストールは以下の手順で行って下さい。
Zero 2wのセットアップ
- Raspberry PIデバイス -> Raspberry PI ZERO 2W
- OS -> Raspberry PI OS(Legacy,32-bit) Lite
- ストレージ -> SDカードを選択して下さい。16G以上推奨。
パラメタの設定とSSHの有効。Zero 2Wにキーボード等を繋がないのでSSHは必須。
OSのイメージ作成後、SDカードをセットしてブートします。
コードのダウンロードとインストール
wgetでコードをダウンロードして解凍。6つのファイル favicon.ico、index.html、monitor.css、monitor.js、monitor.py、setup.sh を含んだ monitor フォルダが作られます。 monitor フォルダに移動し setup.sh に実行権を与えて実行。インストールが開始されます。
unzip monitor.zip
cd monitor
sudo chmod +x setup.sh
./setup.sh
インストール完了後、uv4l-uvc.conf と asound.conf の修正を行います。
*/etc/uv4l/uv4l-uvc.conf:これにUSBカメラのIDを入力します。モニタで lsusb を実行しカメラのIDを確認。 今回の環境では以下の様になりました。(各自自分の環境で確認下さい)
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 と修正し保存。
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:システムに合わせてファイルを作製します。 マイクの確認。
**** 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
**** 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
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)
と入力して各ポート下図の様に登録して下さい。
コントロールHP
設定完了後、指定のIPアドレス(例: https://192.168.1.200)で管理画面へアクセスできます。
最後に
中々良い出来栄えです。