VSCode + PlatformIO で Timer Camera X を動かす

M5Stack で遊んでいるが、以前使っていた Arduino IDE は使いづらいので、開発環境を PlatformIO へ移行しました。

PlatformIO のインストールは、公式ドキュメント を参照してください。

VSCode なら直接 Extension で PlatformIO をインストールできます。

プロジェクトの作成とライブラリのインストール

インストールが完了したら、ホーム画面で新規プロジェクトを作成します。

alt

  • Board: M5Stack Timer CAM
  • Framework: Arduino

作成されるプロジェクトのルートディレクトリには、platformio.ini という設定ファイルがあります。

[env:m5stack-timer-cam]
platform = espressif32
board = m5stack-timer-cam
framework = arduino

そして、Timer Camera X を動かすために、必要な ライブラリ をインストールします。

PIO Home の Libraries で 「Timer-CAM」を検索して、プロジェクトに追加します。

alt

すると、.pio/libdeps でライブラリがインストールされます。 platformio.ini にも lib_deps = m5stack/Timer-CAM@^0.0.2 が追加されます。

ビルドとアップロード

コードはサンプルの web_cam を使用します。 ssid と password を置き換えてビルドしてみようと、

Error: The program size (2601138 bytes) is greater than maximum allowed (1310720 bytes)
RAM:   [==        ]  17.1% (used 56144 bytes from 327680 bytes)
Flash: [==========]  198.5% (used 2601138 bytes from 1310720 bytes)

というエラーメッセージが出ました。

PlatformIO は 1MB くらいのフラッシュメモリしか使っていないので、platformio.ini で パーティションテーブル の設定を変更する必要があります。

パーティションテーブルは ここ で取得できます。

Arduino フレームワークではディフォルトで default.csv を使用しているため、サイズは 0x140000=1310720 bytes で制限されています。

# Name,   Type, SubType, Offset,  Size, Flags
nvs,      data, nvs,     0x9000,  0x5000,
otadata,  data, ota,     0xe000,  0x2000,
app0,     app,  ota_0,   0x10000, 0x140000,
app1,     app,  ota_1,   0x150000,0x140000,
spiffs,   data, spiffs,  0x290000,0x170000,

default_8MB.csv も使ってみましたが、シリアルモニターで以下のメッセージが繰り返し表示されました。

st:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:10124
load:0x40080400,len:5828
entry 0x400806a8
ets Jul 29 2019 12:21:46

ここ を参考として、esptool を利用して、フラッシュを削除した後、正常に戻りました。

huge_app.csv を使用しましょう。この CSV ファイルをルートディレクトリに置きます。 そして、platformio.ini で board_build.partitions = huge_app.csv を追加します。

あとは、シリアルモニタやアップロードを正しいボーレートに指定します。

upload_speed = 1500000
monitor_speed = 115200

upload_speed を正しく指定しないと、A fatal error occurred: Timed out waiting for packet header というエラーメッセージが出ます。前のメッセージ Changing baud rate to 460800 を見ると、ボーレートは 460800 になってしまいました。

platformio.ini の設定は以下となります。

[env:m5stack-timer-cam]
platform = espressif32
board = m5stack-timer-cam
framework = arduino

upload_speed = 1500000
monitor_speed = 115200
board_build.partitions = huge_app.csv

lib_deps = m5stack/Timer-CAM@^0.0.2

こうやって、正常にアップロードすることができました。

で、アップロードが終わってシリアルモニターを開くと、ドットが繰り返し表示されています。 コードを見て、WIFI に接続できないみたいです。

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

原因は ESP32 チップが 5GHz 帯をサポートしていないため、2.4GHz に切り替えれば、シリアルモニターに IP アドレスが表示されます。ブラウザでこのアドレスにアクセスすると、動画ストリーミングを確認できます。