M5Cameraでスマホから操作できるWebカメラを作る（Windows10編）

# はじめに

M5Camera FishEye Version（魚眼レンズ）を入手したのでスマホで映像を確認できるようにしてみました。
（試される場合はご自身の責任でお願いします。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/fc2c0b9c-56ed-022e-404a-15c153be93ab.png)

以下のネットショップで2千円程度で販売されています。
千石通商 https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-5HB5
楽天 https://item.rakuten.co.jp/tsukumorobo/0405996364011/

買ってUSBケーブルを電源が取れるものにつなぐだけですぐカメラ映像をWiFi経由で見れるなかなかすごいやつです。
見るときはPCやスマホのWiFiをこのカメラ自体のアクセスポイントにつなぎます。
魚眼レンズではないものもありますが魚眼のほうが広範囲を見れて部屋の様子を外から確認するなどにはおすすめです。

必要なものはPCとM5CameraとWiFi環境だけです。スマホがあればスマホでもカメラ映像を見れます。

今回はWindows10で作業しました。

(MacOS Catalina版の記事も用意しています。https://qiita.com/nakazawaken1/items/e067f40488c8e860a99a)

# Arudino IDEをインストール

- Arudinoのサイト https://arduino.cc に行き、SOFTWARE / DOWNLOADS のページを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/9b3963ab-df8c-de4b-0015-04d6c1fd4a98.png)

- Windows installerをクリックしてダウンロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/3eea9769-a7cc-2ec8-e31b-12e6f9f96a56.png)

- ダウンロードしたインストーラを実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/05ab6464-3502-d759-31d7-e1d651acd9d0.png)

# ArudinoでM5Cameraの開発ができるように設定

- スタートメニューからArudino IDEを起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/4bdf0f3a-f9f3-ff9c-4d79-8d990341f42d.png)

- ファイル / 環境設定を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/31ac236e-1f1a-0174-a6c6-34a2211dcb2b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/a5a9140f-143c-7fcb-c8fd-ebf50951e4f6.png)

- 追加のボードマネージャに以下を設定
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

(M5CameraのチップであるESP32のライブラリページ https://github.com/espressif/arduino-esp32)

- ツール / ボード / ボードマネージャ...を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/0391f5dd-841a-4ee5-b1bb-f558a0ea8ecd.png)

- 検索欄にESP32と入力し、esp32 by Espressif Systemsの最新バージョン(執筆時点では1.0.4)をインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/51ed4084-1e25-7541-4929-d8e0009fec93.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/45097405-ea1d-1d04-2f0b-f2f7f8ca4930.png)

- ツール / ボード / ESP32 Wrover Module を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/14a9c6fc-3aae-6c4b-c86b-d0c6158418fa.png)

- 接続ポートを調べるためにWindowsのスタートボタンを右クリックしデバイスマネージャーを開き現在あるポートを確認しておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/8e46ed88-0ed9-8086-4caa-2221461ab612.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/b49eb529-da49-f00c-325b-0d3a67cf9dda.png)

- M5CameraをUSBケーブルで接続し、増えたポートがM5Cameraのポート（今回はCOM9）になるので、ArudinoIDEのシリアルポートに設定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/09d884a7-5d89-0c3d-6b91-dbcf58b3064b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/36103220-4c20-9d4f-ad9f-a2f0e429f45d.png)

- 大きなプログラムでも書き込めるように Partition SchemeをHuge APP(3MB No OTA/1MB SPIFFS)に設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/71b45129-b341-1907-5b99-c56b31513e1c.png)

- その他の項目は変更しなくてもいいはずだが以下のようになっていることを確認する
ボード：　ESP32 Wrover Module
Upload Speed：　921600
Flash Frequency：　80MHz
Flash Mode：　QIO
Partition Scheme：　Huge APP (3MB No OTA)
Core Debug Level：　なし
シリアルポート： (確認したポート)
書込装置：　USBasp

# M5Cameraに書き込むプログラムを準備

サンプル実装が用意されているのでそれを利用します。

- ファイル / スケッチ例 / ESP32 / Camera / CameraWebServer を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/02004d6f-28a4-d59e-6862-5b2e5da36c93.png)

カメラの種類を切り替えるために、

```
#define CAMERA_MODEL_WROVER_KIT
```
を

```
//#define CAMERA_MODEL_WROVER_KIT
```
に、

```
//#define CAMERA_MODEL_M5STACK_PSRAM
```
を

```
#define CAMERA_MODEL_M5STACK_PSRAM
```
にする。

WiFiに接続するために、

```
const char* ssid = "********";
const char* password = "********";
```
を

```
const char* ssid = "接続先WiFiのSSID";
const char* password = "接続先WiFiのパスワード";
```
に書き換える

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/66b29d50-2fe4-fc0f-f597-3ab7675c6eb0.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/09941f22-60f8-093c-b6ff-9a2ca514a25f.png)

- ピンの設定を変更

camera_pins.h タブに切り替え、

```
#elif defined(CAMERA_MODEL_M5STACK_PSRAM)
```
の下にある

```
#define SIOD_GPIO_NUM     25
```
を

```
#define SIOD_GPIO_NUM     22
```
に、

```
#define VSYNC_GPIO_NUM    22
```
を

```
#define VSYNC_GPIO_NUM    25
```
に変更する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/605c0f79-5de3-e4b7-5d90-89e74bff17dc.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/3ed9e3f5-bc2c-1ec1-d09a-151938fe1c92.png)

# プログラムの書き込み

- 左から2つ目の右矢印のボタンでプログラムをM5Cameraに書き込む
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/37438c1e-ab6f-4100-09d8-96dcbeffd852.png)
エラーになる場合は上記で設定したボード関連の設定を再確認してください。

- 右の虫眼鏡のボタンでシリアルモニタを開く

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/6246c20e-6ab0-c18e-938a-e1a6a6cfe177.png)

- 右下の速度を115200bpsに設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/7102cacc-c12c-b62d-e14a-d59fb2732e00.png)

- M5Cameraのリセットスイッチを押すと再起動してWebカメラサーバの起動ログが確認できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/8df91c12-286a-ef6d-1ee8-dba220add4d5.png)

# 動作確認

- スマホやPCでシリアルモニタの最後に表示されているURLにアクセスする（ここでは http://19.168.0.25）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/7cf4accd-7e30-2c14-af9a-ef77d6eff3f2.png)

- Get Stillで押すと写真を撮影、Start Streamで動画中継開始
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/fa3fce65-dc6e-1833-65c4-844c36405dc9.png)
(これは夜なので暗めです)

動画中継は1台までしか見れないようです。

いろいろ設定ができますが、よく使いそうなのが
- Resolution で解像度切り替え
- V-Flip で上下反転
- H-Mirror で左右反転
あたりでしょうか。
顔認識もあるみたいですがうまく認識されませんでした。

HTMLを見てみると動画中継部分は
http://192.168.0.25:81/stream
で表示しており、内容は multipart/x-mixed-replace 形式で送られてくるようです。
IEやEdgeではダウンロードになっていしまい見れません。
PCのchrome, firefoxとiPhoneのChrome, Safariでは問題なく表示できました。

# さいごに

設定はREST風に変更できるので、自分でHTMLやクライアントアプリを用意すれば自由に制御できそうです。
カメラは小さいのでバッテリーをつければラジコンなどに搭載しても使えそうです。
Groveコネクタが一つあるのでサーボ2台を制御して首振りのカメラも作れそうです。

ルータでインターネット側につなげば外出先からも確認できます。
その時はセキュリティには注意が必要でしょう。

ちなみにM5CameraのMacアドレスはesp_efuse_mac_get_default関数で取得できます。

```
//Macアドレスをシリアルコンソールに表示する
uint8_t mac[6];
esp_efuse_mac_get_default(mac);
Serial.printf("Mac Address = %02X:%02X:%02X:%02X:%02X:%02X\r\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
```