M5Cameraのサンプルコードを実行してみる

投稿者:

今月頭に発売された M5Camera ですが,一部のピン配置が以前のバージョンから変更になっており,公開されているサンプルコードがそのままでは動かないというトラブルを抱えています.購入者の皆様にはご不便をおかけしています.

ハードウェア的な問題ではなくドキュメントが揃っていないという状態なので,いずれ整備されるとは思いますが,スイッチサイエンスのほうでも実際に調査した結果をここでまとめておこうと思います.

最新のピンマップは,公式Twitterからもあった投稿のようになっています.これを基準にします.

技適取得以前に販売されていたバージョンからは以下のような変更があるようです.

  • カメラのVSYNCピンはG22(さらに一部のドキュメントではG7)からG25に変更された
  • カメラのSIODピンはG25からG22に変更された
  • GROVEコネクタに出ているピンがG12からG4に変更された

こういった変更点を踏まえて,公開されているサンプルコードをどうやったらコンパイル&書き込みできるのか?を書いていきます.

サンプルコードをコンパイルしてみる

M5Cameraを使っていそうなリポジトリの代表例は以下の2つ.

どちらも同じようなプログラムが書かれています.動作もほぼ同じですが,後者 「m5stack-cam-psram」 のほうが新しくより最新のESP-IDFに適した構造となっているため,こちらを使ったコンパイル手順を書きます.「esp32-cam-demo」の方に関してはメンテナンスもされていないので,ノータッチで大丈夫でしょう(記事の下の方におまけとして触れます).

2018/12/19時点ではそのままではコンパイルができないので,master ブランチではm5stack-cam-psram/main/main.c の23行目と35行目を以下のように書き換える必要があります.

行数 修正前 修正後
23 #define CAM_PIN_SIOD 25 #define CAM_PIN_SIOD 22
35 #define CAM_PIN_VSYNC 22 #define CAM_PIN_VSYNC 25

あとは,ESP-IDFを使った開発環境が整って,かつ2018/11/20頃のコミット以降のmasterブランチの状態であれば,$ make flashと実行するだけでコンパイルと書き込みができるようになるはずです.

スマートフォンを起動すると,m5stack-cam というWiFiのアクセスポイントが見えるので,ここに接続します.
ブラウザのURL欄に 192.168.4.1 と打ち込むと,動画のようにカメラからの映像が連続で流れてきます.
ブラウザのURL欄に 192.168.4.1/jpgと打ち込むと,一枚だけ撮影されたものが取得できます.

カメラの映像をGROVEコネクタからUART通信で外部に送信するというuart ブランチでは,前述のピン番号のほか,UART通信の設定部分も書き換える必要があります.

おまけ

実は先の「m5stack-cam-psram」 リポジトリのプログラムと,M5Cameraに最初から書き込まれているプログラムは異なります.よくよくM5Cameraのブートログを見比べてみると,前節でノータッチとした「esp32-cam-demo」のプログラムが書き込まれていることがわかります.

esp32-cam-demo リポジトリの中でも特にM5Cameraに関わるブランチが2つあります.m5camm5cam-psramです.
どちらも,現在販売中のM5cameraと設定が異なるため,こちらを(もし)コンパイルしようと思った場合もやはり設定を一部書き換えなければいけません.

M5Burnerに付属しているファームウェアもこのリポジトリベースで古めなので,販売中のM5Cameraには適合しません.

  1. ESP-IDFのバージョンを戻す
    • 先程「m5stack-cam-psram」 のリポジトリでコンパイルができるためには,2018/11/20以降の状態が必要でした.ところが,このあたりのコミットでファイル名やディレクトリ構造が変わったため,メンテナンスがされていないこちらのリポジトリでは正しく参照ができなくなっていることが原因です.esp32-cam-demo/main/app_main.c:56:34: error: unknown type name 'http_context_t' と出たら,
      http://forum.m5stack.com/topic/428/error-compiling-esp32-camera-demo/2 を参考にesp-idfのバージョンを戻すと良さそうです.
      $ git checkout 3b92e85
      ちなみにこのコミットは2018/11/1です.再度m5stack-cam-psramリポジトリで作業するにはESP-IDFのバージョンを戻さなければいけないことに注意しましょう
  2. VSYNCとSIODピン番号を変える(VSYNC=25,SIOD=22)
  3. m5camブランチの場合はD0ピンの設定を17から32に変更する (m5cam-psramブランチでは修正済み)

ブランチごとに何が違うのか,というと,psramが有効か無効化でヒープメモリの量が異なります.

■デフォルトブランチ(m5cam) の様子

I (638) camera_demo: Free heap: 103280
I (648) camera_demo: Camera demo ready

■ブランチ m5cam-psram の様子

I (644) camera_demo: Free heap: 75744
I (654) camera_demo: Camera demo ready

本来ならPSRAMが有効化されている方がヒープメモリの容量が増えるはずですが,手元の環境では少なめの容量が表示されてしまいました.リポジトリのメンテナンスもされていないようですし,バグの可能性もあります.

トラブルシューティング

  • コンパイル時に/home/user/esp/m5stack-cam-psram/main/main.c:16:29: fatal error: esp_http_server.h: No such file or directory と怒られる
    • おそらくESP-IDFのリポジトリが古いままです. 2018/11/20頃のコミット以降が必要です.迷子になっている場合は $ git checkout 61ee1bd3
  • 起動後のログでE (954) camera_demo: Camera probe failed with error 0x20001 と怒られる
    • 特にVSYNCとSIODピンに関して設定を入れ替え忘れている可能性があります.既存のファームウェアを試している場合は,前述の通り販売中のものには適合しません.
  • エラーなく起動してWiFi接続しても画像が表示されない
    • D2~D9ピンの設定を間違えていないか確認してください.特にesp32-cam-demoリポジトリのm5camブランチで試している場合はD2(menuconfigではD0)ピンの設定を変える必要があります.

2018/12/24 IPアドレスが間違っていたのを修正