UV4L 方針を変えます(6)

インターフォン作る予定でしたが、急遽ペット見守りカメラに変更します。

追加部品一覧

Raspberry Pi Zero 2 W
今回は Zero 2Wを使用します。
多機能USBケーブルアダプター
Zero 2WはUSBポートが少ないのでこれでポートを増やしています。
ミニコンピューターWebカメラ
安価なUSBカメラ
2dofサーボ
サーボモータを持った2軸のARM。
USBカメラをこれに取り付けてカメラの向きを制御します。
ミニスピーカー
ダイソーの300円スピーカ。電源はUSB。音入力は3.5mm ステレオミニプラグ
ラップトップ用の外部サウンドカード
スピーカーの音入力をUSBに変換する為に使用
ACアダプター 5V 1.5A 7.5W
電源
ソリッド・ステート・リレー
AC100Vのオンオフに使用。現在LEDをオンオフしているポートでこのSSRを制御
埋め込みコンセント
SSRの出力先。このコンセントにAC100Vのライトを接続。
周りが暗い時にライトを点灯させる。

カメラの構成

Raspberry PI Zero 2Wを中心に各部品を下記の様に配線しています。

  • Zero 2WはUSBポートが少ないためHUBを追加
  • HUBにカメラ、スピーカ(電源と信号の2つ)をつなぐ。
  • GPIO26でソリッドステート制御。AC100Vのオンオフを実施。電灯のオンオフが出来ます。
  • GPIO20,21でサーボモータ(2つ)を管理。カメラを上下左右に回転させます。

実際のカメラ

コントロール画面

クライアント(コントール)側の画面は以下の通り

前回のコードをGeminiに添削してもらったらこんな感じになりました。Gemini恐るべし。

  • ブラウザはFirefoxを使用しています。SSLの関係でFirefoxが一番使い易かったのが理由です
    他のブラウザでは動かない可能性が有ります。
  • スマホ、PC等から簡単にアクセス出来る用IPアドレスを固定しています。
  • Streamingは中央のエリアに表示されます。エリア左上にはステイタスを表示
  • Streamingオン・オフボタン:Steamingの開始と停止
  • 音量調整:ハウリングを防ぐ為にPC側はMute(音量0)を奨めます。
    PC側から音声を送りたい時のみ音量を調整下さい。大きくするとハウリングします。
  • 今回はコンセントに100VのLED電灯をつなぎました。このボタンで点灯・消灯出来ます
    あまり大きな電力を消費する機器は使えません。LED電灯位が目安です。
  • Streamingの録画、その場面の写真が取れます。撮ったものは表示領域に表示されます
      写真:ダウンロードボタンでダウンロード出来ます
      録画:録画終了が表示エリアで再生出来ます。
         ダウンロードは表示エリアで右ボタンクリックで出来ます。
  • 十字カーソル:ボタンを押している間ボタンの方向にモータが回ります。
    放すとモータは止まります。回転中左上に位置が表示されます。
  • ホームボタンを押すとモータはホームポジションに戻ります。

コードのダウンロード

まず下のリンクから今回のコードをダウンロードし解凍して下さい

favicon.ico、index.html、monitor.css、monitor.js、monitor.py、setup.sh、start.sh 7つのファイルが有ります。

Raspberry PIのセットアップ

OSのインストール

Raspberry Pi ImagerV1.8.5を使用してOSのイメージを作成します。

  • Raspberry PIデバイス ー> Raspberry PI ZERO 2W
  • OS          ー> Raspberry PI OS(Legacy,32-bit) Lite (Bookwormのno deskTop版です)
  • ストレージ      ー> SDカードを選択して下さい。16G以上が推奨。今回は32Gを使用

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

この設定でOSのイメージを作成します。

アプリのセットアップ

必要機器を接続し、SDカードを Zero 2Wに挿入してブートします。しばらくするとSSHがつながるようにまりますので接続して下さい。まずはホームディレクトリにsetup.shをコピーします。コピーの方法は幾つか有ると思いますが今回は

  • Raspberry Pi ホームディレクトリで sudo nano setup.sh とsetup.shを新規に作成
  • PC側でsetup.shをエディタ開いて全てをコピー。それをRaspberry PI側にエディタにすべて貼り付け。
  • Raspberry PI側のエディタを保存終了すればホームディレクトリにsetup.shが保存されます。

後はsetup.shに実行権を与えて実行です。
sudo chmod +x setup.sh
./setup.sh

しばらく待ち
——————————————————-
セットアップが完了しました!
——————————————————-
【重要:最後に必ず行うこと】
1. ‘lsusb’ を実行して、あなたのWebカメラのIDを確認してください。
‘sudo nano /etc/uv4l/uv4l-uvc.conf’ を開き、device-id を書き換えてください。
2. ‘arecord -l’を実行して、オーディオを確認して下さい。
‘sudo nano /etc/asound.conf’を開き、システムに合わせて修正して下さい
3. IP Addressの固定を奨めます。下記のxxx.xxx.xxx.xxxにIPを指定して下さい
sudo nmcli connection modify preconfigured ipv4.method manual ipv4.addresses xxx.xxx.xxx.xxx/24
4. 設定終了後 reboot して下さい。
——————————————————-

が表示されると第一段階終了です。次は上記の項目の設定を行います。

1.’sudo nano /etc/uv4l/uv4l-uvc.conf’ の修正
モニタでUSB機器を表示デバイス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
ここでカメラのIDを確認します。今回のIDは ”1d6c:0103” でした。
これを”uv4l-uvc.conf”に登録します sudo nano /etc/uv4l/uv4l-uvc.conf’とFileを開くと
Fileの終わりが下記の様になっています。
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
このxxxx:xxxxの箇所に”1d6c:0103”を代入してファイルを保存します

2.’sudo nano /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
これは表示例です。この場合、スピーカーはcard 0: 。マイクはcard 1:です。これを元に”asound.conf”
を修正します。sudo nano /etc/asound.conf 新規作成になると思います。
pcm.!default {
type asym
playback.pcm “plug:hw:0
capture.pcm “plug:dsnoop:1
}
playback.pcm スピーカ。今回はcard 0:なので、”plug:hw:0“と指定
capture.pcmはマイク。今回はcard 1:なので”plug:dsnoop:1“と指定してファイルを保存

3. IP Addressの固定を奨めます。
固定しなくてもコードは動きますが固定した方がブラウザURLの入力に断然有利です。
今回は192.168.1.200に固定しています。(各自の環境に合わせて下さい)

4. 設定終了後 reboot して下さい。
5.コードのコピー
Raspberry PIが立ち上がったらダウンロードしたコードをRaspberry PIに保存します。
アプリインストール時にSAMBAをセットし、ホームディレクトリーを共有フォルダに設定しています。
PCのファイルマネージャでそこを開き、ダウンロードした”start.sh”をそこにコピーします。
その他のファイル avicon.ico、index.html、monitor.css、monitor.js、monitor.pyは
ホームの下の”monitor”フォルダに保存して下さい。

6.ブラウザとSSL対応
今回PCRaspberry PC側のマイクを使用する為、通信はSSLで行う必要が有ります。認証ファイルが自前(オレオレ認証)なので使用するポートに対し問題なしと登録する必要が有ります。使っているポートは ”443”、”8090”、”8700”の3つです。

ブラウザでSSLの扱いがブラウザで違うようで、Firfoxでは問題無く動いたのですが、Chromeで動かなかったです。そこで今回はFirefoxを使用しています。

  • 今回はIPアドレスを192.168.1.200に固定しています。
  • まずはURL欄に “https://192.168.1.200:8090″と入力します。
  • 表示された画面で ”詳細へ進む” をクリック
  • 次の画面で ”危険性を承知の上で使用” をクリック
  • 最後に一番上の画面になります。これでhttps://192.168.1.200:8090の登録完了
  • 次に”https://192.168.1.200:8700″をURL欄に入力して同様の登録します。
  • 最後に”https://192.168.1.200″で同様の処理を行い登録します。

以降はURL欄に”https://192.168.1.200″と入力するだけでコントロール画面が上がります。

次回は

次回はこれを外部(ルータの外から)アクセスできる様に改良して行きます。