[メモ] Raspberry Pi Zero + CSI-Camera を USB WebCamとして使う(2020年夏版)

[「RPi Zero + CSI-Cameraで、UVCなWebCamとして使う」](https://qiita.com/mt08/items/1d3b54ebbf8bbbed0ccc)の2020年夏版。

- [OctoCam](https://shop.pimoroni.com/products/octocam-pi-zero-w-project-kit)にてUVC Camera
<br>![OctoCam](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75594/6288a83b-521d-7147-572b-3db6a8cc6e4e.png)
<img width="360" alt="OctoCam" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75594/113e1f35-1a9d-ce92-2497-ab8ffeb0fb53.png">


<!-- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75594/113e1f35-1a9d-ce92-2497-ab8ffeb0fb53.png) -->







# 概要
- RPi Zero + CSI-Cameraで、UVCなWebCamを作る
- インストールスクリプトを書きました。

---
- 元ネタ: uvc-gadgetをラズパイに対応させて、かつスクリプトも追加してくれてる方
    -  [Raspberry Pi Zero with Pi Camera as USB Webcam
](http://www.davidhunt.ie/raspberry-pi-zero-with-pi-camera-as-usb-webcam/)
    - [github::climberhunt/uvc-gadget](https://github.com/climberhunt/uvc-gadget.git)
- 以前書いた2018年の記事([[メモ] Raspberry Pi Zero + Camera を USB WebCamとして使う](https://qiita.com/mt08/items/1d3b54ebbf8bbbed0ccc))は、もう、うまくうごかないっぽい。しかもuvc-gadgetのビルドができない.. どうやったんだ？>当時の自分


# 確認済み環境

- Raspberry Pi Zero W 
- カメラモジュール([Camera Module](https://www.raspberrypi.org/documentation/hardware/camera/README.md))
    - [Camera Module for Raspberry Pi Zero – Standard](https://shop.pimoroni.com/products/raspberry-pi-zero-camera-module)
        -  Camera Module v1.3 (5MP / OV5647)と互換なはず 
- OS: [2020-08-20-raspios-buster-armhf-lite.zip](http://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2020-08-24/2020-08-20-raspios-buster-armhf-lite.zip)

- Windows 10 x64 : Webカメラのテスト用


# 手順
- 母艦(PC)にて
    1. OSをSDカードに焼く
- PiZero(または、インストール用ラズパイ)にSDをさして起動後
    1. ログインは、user: 'pi' / password: 'raspberry'
    2. `sudo raspi-config`で、インターネット接続設定
        - `2. Network Options` > `N2 Wireless LAN` > 
            - 該当する国選択(JPとかUSとかGBとか)
            - SSID
            - Password
        - 設定したら、`<Finish>` でちょいと待つ。  
        - `ping www.google.com` で接続確認
    3. インストールスクリプトのダウンロードと実行

        ```bash:実行例
        curl -SLO https://raw.githubusercontent.com/mt08xx/files/master/inst_piwebcam.sh
        time bash ./inst_piwebcam.sh
        ```

- PiZeroのUSBをPCに接続して起動
    - PiZeroの`USB`と書かれた方に挿す。
    - PCの本体のUSB3ポートに直接挿そう。(USB3は900mAまでOKだよね?)
    - Windows 10: デバイスマネージャのカメラに `UVC Camera`がでてくるまで待つ
    - Win10標準のカメラアプリなどで使ってみる
    - https://mt08xx.github.io/webcam.html にアクセス
        - Chromeだとカメラが選べない？
        - Firefoxだと選べるぞ



# インストールスクリプト


```bash:inst_piwebcam.sh
#!/bin/bash
#
# http://qiita.com/mt08/f869cddee89ca2ea6323
#
# apt-cacher-ng ?
# export http_proxy="http://apt-cache-server.local:3142"
#
sudo apt update && sudo apt-get install -y git \
&& cd ${HOME} \
&& git clone https://github.com/climberhunt/uvc-gadget.git \
&& cd uvc-gadget \
&& make

sudo sed -i -e 's/rootwait$/rootwait modules-load=dwc2,libcomposite/' /boot/cmdline.txt
grep 'dtoverlay=dwc2' /boot/config.txt || sudo sed -i -e '/\[all\]/a dtoverlay=dwc2' /boot/config.txt
sudo raspi-config nonint do_camera 0
sudo raspi-config nonint do_memory_split 256

cat << 'EOF' | sudo tee /etc/systemd/system/piwebcam.service
[Unit]
Description=Start pi webcam service

[Service]
ExecStart=/home/pi/uvc-gadget/piwebcam
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=piwebcam
User=pi
Group=pi
WorkingDirectory=/home/pi/uvc-gadget

[Install]
WantedBy=basic.target
EOF

sudo ln -s /lib/systemd/system/getty@.service  /etc/systemd/system/getty.target.wants/getty@ttyGS0.service
sudo systemctl enable piwebcam.service

#
echo Done
```

# その他
- 初回起動～インストールスクリプト実行まで、別のラズパイでやってもよい(RPi4Bでインストールして、PiZeroで使用)
- 終了は、ＵＳＢを引っこ抜いて、ぶつっと切ってしまっているが、いまのところ大丈夫っぽい。
- 実は、COMポートも認識されていて、そっからログインできるぞ。
- コロナ渦で、Webカメラ、なかなか入手できませんでしたが、いまはどうでしょうか。


# TODO
- ほかのカメラモジュールでのテストする (まえにやったときは動いてたので問題ないはず)
    - Camera Module v2 (8MP / IMX219)
    - HQ Camera (12MP / IMX477)