ESP32のArduino IDE環境とPlatformIO環境比較ツール作成

概要

ESP32の場合Arduino IDEやPlatformIOなど複数のボードマネージャがあり、微妙に設定が違っています。特にボードの設定方法が違うため、比較する方法が面倒でした。

今回はArduino IDEのボード設定相当をテキスト出力するヘルパークラスを作ってみて、確認をしてみました。

作成したライブラリ

GitHub - tanakamasayuki/EspHelper
Contribute to tanakamasayuki/EspHelper development by creating an account on GitHub.

EspHelperという、雑多なサンプルを入れているライブラリに追加してみました。

#include "EspHelperBoardSettings.h"

void setup()
{
    Serial.begin(115200);
    delay(1000);

    EspHelperBoardSettings::dump();
}

void loop()
{
    delay(1);
}

使い方は読み込んでdump関数を呼び出すだけになります。

=== ESP32 Arduino Board Settings ===
USB CDC On Boot                         : Enabled
CPU Frequency                           : 240MHz (WiFi)
Core Debug Level                        : Debug
USB DFU On Boot                         : Disabled
Events Run On                           : Core 1
Flash Mode                              : QIO 80MHz
Flash Size                              : 8MB (64Mb)
Arduino Runs On                         : Core 1
USB Firmware MSC On Boot                : Disabled
PSRAM                                   : Enabled (OPI)
Partition Scheme                        : 8MB (APP 3.2MB x2, SPIFFS 1.5MB, NVS 20KB, OTADATA 8KB)
USB Mode                                : Hardware CDC and JTAG
=== end ===

上記のような出力が得られます。

Arduino IDEの設定例

上記のボード設定の部分になります。

Arduino IDEは上記のようにメニュー構成から設定を変更するので比較的問題が起きにくいです。デフォルト値で基本動くようになっています。

Arduino CLIの設定例

  esp32s3:
    fqbn: esp32:esp32:esp32s3:CDCOnBoot=cdc,FlashSize=8M,PartitionScheme=default_8MB,DebugLevel=debug,PSRAM=opi
    platforms:
      - platform: esp32:esp32 (3.3.6)
        platform_index_url: https://espressif.github.io/arduino-esp32/package_esp32_index.json
    libraries:
      - EspHelper (1.0.6)

上記になります。一気に設定が難しくなりました。Arduino CLIだとボード名のあとに設定項目を列挙して変更を行う必要があります。

ただし、私が作成したVSCODE用の拡張機能から設定ヘルパーを呼び出すことで画面から設定が可能です。ちょっとこの文字を手で設定するのは難しいですよね。

PlatformIOの設定例

[env:m5stack-sticks3]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/stable/platform-espressif32.zip
board = esp32-s3-devkitc-1
framework = arduino
board_build.arduino.partitions = default_8MB.csv
board_build.arduino.memory_type = qio_opi
build_flags =
    -DESP32S3
    -DBOARD_HAS_PSRAM
    -mfix-esp32-psram-cache-issue
    -DCORE_DEBUG_LEVEL=5
    -DARDUINO_USB_CDC_ON_BOOT=1
    -DARDUINO_USB_MODE=1
    -DARDUINO_USB_MSC_ON_BOOT=0
    -DARDUINO_USB_DFU_ON_BOOT=0
lib_deps =
    EspHelper=https://github.com/tanakamasayuki/EspHelper.git

Arduino CLIと同じような設定を行っているのですが一気に複雑になりました。PlatformIOはいろんなプラットホームに対応している関係で、設定項目が複数に分散されてしまっています。

本来は個別設定する場所があるべきなのですが、設定項目がないものはbuild_flagsで無理やり詰め込んでいる感じです。

そしてこの画面にはヘルパー機能がないので自分でArduino IDEの設定と差分を確認して手入力を行う必要があります。とくにESP32-S3はPSRAM系の設定が複雑なので差分がでやすいことになります。

設定差分がでやすい原因

まずM5Stack社の製品の場合には新製品がでてすぐに利用できるように独自のArduino IDE用ボードマネージャを提供しています。公式版だと不定期にバージョンアップするので製品販売のタイミングで登録されていないことがあるためです。

GitHub - tanakamasayuki/esp32-arduino-test
Contribute to tanakamasayuki/esp32-arduino-test development by creating an account on GitHub.

ただし、各環境は上記のページで確認できるのですが、結構バージョンが違います。

今のものを抜き出してきましたがM5Stack社の環境は少し古いESP-IDF5.4系のバージョンです。最新は5.5系なので半年ぐらい古いものになります。

最新のもので開発した場合にはEspressif公式版か、pioarduinoを使う必要があります。ただし、そこにはM5Stack社のボードが登録されていないので、差分を自分で埋める必要があります。

作成したライブラリで環境を比較してみた

M5Stack社純正(Arduino CLI)

=========== Before Setup Start ===========
Chip Info:
------------------------------------------
  Model             : ESP32-S3
  Package           : 1
  Revision          : 0.02
  Cores             : 2
  CPU Frequency     : 240 MHz
  XTAL Frequency    : 4sic BT        : No
  BT Low Energy     : Yes
  IEEE 802.15.4     : No
------------------------------------------
INTERNAL Memory Info:
------------------------------------------
  Total Size        :   386240 B ( 377.2 KB)
  Free Bytes        :   348772 B ( 340.6 KB)
  Allocated Bytes   :    32452 B (  31.7 KB)
  Minimum Free Bytes:   344852 B ( 336.8 KB)
  Largest Free Block:   278516 B ( 272.0 KB)
------------------------------------------
SPIRAM Memory Info:
------------------------------------------
  Total Size        :  8388608 B (8192.0 KB)
  Free Bytes        :  8386088 B (8189.5 KB)
  Allocated Bytes   :      144 B (   0.1 KB)
  Minimum Free Bytes:  8386088 B (8189.5 KB)
  Largest Free Block:  8257524 B (8064.0 KB)
  Bus Mode          : OPI
------------------------------------------
Flash Info:
------------------------------------------
  Chip Size         :  8388608 B (8 MB)
  Block Size        :    65536 B (  64.0 KB)
  Sector Size       :     4096 B (   4.0 KB)
  Page Size         :      256 B (   0.2 KB)
  Bus Speed         : 80 MHz
  Bus Mode          : QIO
------------------------------------------
Partitions Info:
------------------------------------------
                nvs : addr: 0x00009000, size:    20.0 KB, type: DATA, subtype: NVS
            otadata : addr: 0x0000E000, size:     8.0 KB, type: DATA, subtype: OTA
               app0 : addr: 0x00010000, size:  3264.0 KB, type:  APP, subtype: OTA_0
               app1 : addr: 0x00340000, size:  3264.0 KB, type:  APP, subtype: OTA_1
             spiffs : addr: 0x00670000, size:  1536.0 KB, type: DATA, subtype: SPIFFS
           coredump : addr: 0x007F0000, size:    64.0 KB, type: DATA, subtype: COREDUMP
------------------------------------------
Software Info:
------------------------------------------
  Compile Date/Time : Feb  6 2026 09:56:17
  Compile Host OS   : linux
  ESP-IDF Version   : v5.4.2-25-g858a988d6e
  Arduino Version   : 3.2.1
------------------------------------------
Board Info:
------------------------------------------
  Arduino Board     : M5STACK_STICKS3
  Arduino Variant   : m5stack_sticks3
  Arduino FQBN      : m5stack:esp32:m5stack_sticks3:DebugLevel=debug
============ Before Setup End ============
[ 12238][I][esp32-hal-periman.c:141] perimanSetPinBus(): Pin 19 already has type USB_DM (45) with bus 0x3fc98bf8
[ 12239][I][esp32-hal-periman.c:141] perimanSetPinBus(): Pin 20 already has type USB_DP (46) with bus 0x3fc98bf8

=== ESP32 Arduino Board Settings ===
USB CDC On Boot                         : Enabled
CPU Frequency                           : 240MHz (WiFi)
Core Debug Level                        : Debug
USB DFU On Boot                         : Disabled
Events Run On                           : Core 1
Flash Mode                              : QIO 80MHz
Flash Size                              : 8MB (64Mb)
Arduino Runs On                         : Core 1
USB Firmware MSC On Boot                : Disabled
PSRAM                                   : Enabled (OPI)
Partition Scheme                        : 8MB (APP 3.2MB x2, SPIFFS 1.5MB, NVS 20KB, OTADATA 8KB)
USB Mode                                : Hardware CDC and JTAG
=== end ===
=========== After Setup Start ============
INTERNAL Memory Info:
------------------------------------------
  Total Size        :   386240 B ( 377.2 KB)
  Free Bytes        :   348684 B ( 340.5 KB)
  Allocated Bytes   :    32508 B (  31.7 KB)
  Minimum Free Bytes:   344852 B ( 336.8 KB)
  Largest Free Block:   278516 B ( 272.0 KB)
------------------------------------------
SPIRAM Memory Info:
------------------------------------------
  Total Size        :  8388608 B (8192.0 KB)
  Free Bytes        :  8386088 B (8189.5 KB)
  Allocated Bytes   :      144 B (   0.1 KB)
  Minimum Free Bytes:  8386088 B (8189.5 KB)
  Largest Free Block:  8257524 B (8064.0 KB)
------------------------------------------
GPIO Info:
------------------------------------------
  GPIO : BUS_TYPE[bus/unit][chan]
  --------------------------------------
    19 : USB_DM
    20 : USB_DP
    43 : UART_TX[0]
    44 : UART_RX[0]
============ After Setup End =============

Core Debug LevelをDebugにしているので、起動時にいろいろな情報がでています。

------------------------------------------
Software Info:
------------------------------------------
  Compile Date/Time : Feb  6 2026 09:56:17
  Compile Host OS   : linux
  ESP-IDF Version   : v5.4.2-25-g858a988d6e
  Arduino Version   : 3.2.1
------------------------------------------
Board Info:
------------------------------------------
  Arduino Board     : M5STACK_STICKS3
  Arduino Variant   : m5stack_sticks3
  Arduino FQBN      : m5stack:esp32:m5stack_sticks3:DebugLevel=debug

環境を見分けるのは上記になります。ESP-IDFが5.4系でArduinoが3.2.1と古いものになります。そしてボード名がM5STACK_STICKS3なのでM5Stack社のものになります。

=== ESP32 Arduino Board Settings ===
USB CDC On Boot                         : Enabled
CPU Frequency                           : 240MHz (WiFi)
Core Debug Level                        : Debug
USB DFU On Boot                         : Disabled
Events Run On                           : Core 1
Flash Mode                              : QIO 80MHz
Flash Size                              : 8MB (64Mb)
Arduino Runs On                         : Core 1
USB Firmware MSC On Boot                : Disabled
PSRAM                                   : Enabled (OPI)
Partition Scheme                        : 8MB (APP 3.2MB x2, SPIFFS 1.5MB, NVS 20KB, OTADATA 8KB)
USB Mode                                : Hardware CDC and JTAG
=== end ===

上記が今回作った情報です。この情報と同じようになるように他の環境も調整するのが基本となります。

Espressif公式版(Arduino CLI)

=========== Before Setup Start ===========
Chip Info:
------------------------------------------
  Model             : ESP32-S3
  Package           : 1
  Revision          : 0.02
  Cores             : 2
  CPU Frequency     : 240 MHz
  XTAL Frequency    : 4No
  Embedded PSRAM    : No
  2.4GHz WiFi       : Yes
  Classic BT        : No
  BT Low Energy     : Yes
  IEEE 802.15.4     : No
------------------------------------------
INTERNAL Memory Info:
------------------------------------------
  Total Size        :   385692 B ( 376.7 KB)
  Free Bytes        :   347916 B ( 339.8 KB)
  Allocated Bytes   :    32760 B (  32.0 KB)
  Minimum Free Bytes:   342768 B ( 334.7 KB)
  Largest Free Block:   286708 B ( 280.0 KB)
------------------------------------------
SPIRAM Memory Info:
------------------------------------------
  Total Size        :  8388608 B (8192.0 KB)
  Free Bytes        :  8386096 B (8189.5 KB)
  Allocated Bytes   :      136 B (   0.1 KB)
  Minimum Free Bytes:  8386096 B (8189.5 KB)
  Largest Free Block:  8257524 B (8064.0 KB)
  Bus Mode          : OPI
------------------------------------------
Flash Info:
------------------------------------------
  Chip Size         :  8388608 B (8 MB)
  Block Size        :    65536 B (  64.0 KB)
  Sector Size       :     4096 B (   4.0 KB)
  Page Size         :      256 B (   0.2 KB)
  Bus Speed         : 80 MHz
  Flash Frequency   : 80 MHz (source: 160 MHz, divider: 2)
  Bus Mode          : QIO
------------------------------------------
Partitions Info:
------------------------------------------
                nvs : addr: 0x00009000, size:    20.0 KB, type: DATA, subtype: NVS
            otadata : addr: 0x0000E000, size:     8.0 KB, type: DATA, subtype: OTA
               app0 : addr: 0x00010000, size:  3264.0 KB, type:  APP, subtype: OTA_0
               app1 : addr: 0x00340000, size:  3264.0 KB, type:  APP, subtype: OTA_1
             spiffs : addr: 0x00670000, size:  1536.0 KB, type: DATA, subtype: SPIFFS
           coredump : addr: 0x007F0000, size:    64.0 KB, type: DATA, subtype: COREDUMP
------------------------------------------
Software Info:
------------------------------------------
  Compile Date/Time : Feb  6 2026 09:57:45
  Compile Host OS   : linux
  ESP-IDF Version   : v5.5.2-249-gf56bea3d1f
  Arduino Version   : 3.3.6
------------------------------------------
Board Info:
------------------------------------------
  Arduino Board     : ESP32S3_DEV
  Arduino Variant   : esp32s3
  Arduino FQBN      : esp32:esp32:esp32s3:CDCOnBoot=cdc,FlashSize=8M,PartitionScheme=default_8MB,DebugLevel=debug,PSRAM=opi       
============ Before Setup End ============
[  6224][I][esp32-hal-periman.c:141] perimanSetPinBus(): Pin 19 already has type USB_DM (45) with bus 0x3fc98e30
[  6225][I][esp32-hal-periman.c:141] perimanSetPinBus(): Pin 20 already has type USB_DP (46) with bus 0x3fc98e30

=== ESP32 Arduino Board Settings ===
USB CDC On Boot                         : Enabled
CPU Frequency                           : 240MHz (WiFi)
Core Debug Level                        : Debug
USB DFU On Boot                         : Disabled
Events Run On                           : Core 1
Flash Mode                              : QIO 80MHz
Flash Size                              : 8MB (64Mb)
Arduino Runs On                         : Core 1
USB Firmware MSC On Boot                : Disabled
PSRAM                                   : Enabled (OPI)
Partition Scheme                        : 8MB (APP 3.2MB x2, SPIFFS 1.5MB, NVS 20KB, OTADATA 8KB)
USB Mode                                : Hardware CDC and JTAG
=== end ===
=========== After Setup Start ============
INTERNAL Memory Info:
------------------------------------------
  Total Size        :   385692 B ( 376.7 KB)
  Free Bytes        :   347828 B ( 339.7 KB)
  Allocated Bytes   :    32816 B (  32.0 KB)
  Minimum Free Bytes:   342532 B ( 334.5 KB)
  Largest Free Block:   286708 B ( 280.0 KB)
------------------------------------------
SPIRAM Memory Info:
------------------------------------------
  Total Size        :  8388608 B (8192.0 KB)
  Free Bytes        :  8386096 B (8189.5 KB)
  Allocated Bytes   :      136 B (   0.1 KB)
  Minimum Free Bytes:  8386096 B (8189.5 KB)
  Largest Free Block:  8257524 B (8064.0 KB)
------------------------------------------
GPIO Info:
------------------------------------------
  GPIO : BUS_TYPE[bus/unit][chan]
  --------------------------------------
    19 : USB_DM
    20 : USB_DP
    43 : UART_TX[0]
    44 : UART_RX[0]
============ After Setup End =============

公式版の出力です。ESP32 Arduino Board Settingsの部分は同じものになるように調整済みのはずです。

------------------------------------------
Software Info:
------------------------------------------
  Compile Date/Time : Feb  6 2026 09:57:45
  Compile Host OS   : linux
  ESP-IDF Version   : v5.5.2-249-gf56bea3d1f
  Arduino Version   : 3.3.6
------------------------------------------
Board Info:
------------------------------------------
  Arduino Board     : ESP32S3_DEV
  Arduino Variant   : esp32s3
  Arduino FQBN      : esp32:esp32:esp32s3:CDCOnBoot=cdc,FlashSize=8M,PartitionScheme=default_8MB,DebugLevel=debug,PSRAM=opi

環境はESP-IDFが5.5系でArduinoも3.3.6と最新です。FQBNが設定項目なのですが、M5StickS3のボード定義がないのでESP32S3_DEVという一番基礎的なボードを使って、M5StickS3相当の設定差分を追加してあります。このままだとI2Cとかのピン番号のデフォルトとボード名マクロなどがズレているのですがM5Unifiedを使っている限りは問題ないと思います。

Espressif公式版(Arduino IDE)

=========== Before Setup Start ===========
Chip Info:
------------------------------------------
  Model             : ESP32-S3
  Package           : 1
  Revision          : 0.02
  Cores             : 2
  CPU Frequency     : 240 MHz
  XTAL Frequency    : 4 Bitfield : 0x00000012
  Embedded Flash    : No
  Embedded PSRAM    : No
  2.4GHz WiFi       : Yes
  Classic BT        : No
  BT Low Energy     : Yes
  IEEE 802.15.4     : No
------------------------------------------
INTERNAL Memory Info:
------------------------------------------
  Total Size        :   385692 B ( 376.7 KB)
  Free Bytes        :   347916 B ( 339.8 KB)
  Allocated Bytes   :    32760 B (  32.0 KB)
  Minimum Free Bytes:   342768 B ( 334.7 KB)
  Largest Free Block:   286708 B ( 280.0 KB)
------------------------------------------
SPIRAM Memory Info:
------------------------------------------
  Total Size        :  8388608 B (8192.0 KB)
  Free Bytes        :  8386096 B (8189.5 KB)
  Allocated Bytes   :      136 B (   0.1 KB)
  Minimum Free Bytes:  8386096 B (8189.5 KB)
  Largest Free Block:  8257524 B (8064.0 KB)
  Bus Mode          : OPI
------------------------------------------
Flash Info:
------------------------------------------
  Chip Size         :  8388608 B (8 MB)
  Block Size        :    65536 B (  64.0 KB)
  Sector Size       :     4096 B (   4.0 KB)
  Page Size         :      256 B (   0.2 KB)
  Bus Speed         : 80 MHz
  Flash Frequency   : 80 MHz (source: 160 MHz, divider: 2)
  Bus Mode          : QIO
------------------------------------------
Partitions Info:
------------------------------------------
                nvs : addr: 0x00009000, size:    20.0 KB, type: DATA, subtype: NVS
            otadata : addr: 0x0000E000, size:     8.0 KB, type: DATA, subtype: OTA
               app0 : addr: 0x00010000, size:  1280.0 KB, type:  APP, subtype: OTA_0
               app1 : addr: 0x00150000, size:  1280.0 KB, type:  APP, subtype: OTA_1
             spiffs : addr: 0x00290000, size:  1408.0 KB, type: DATA, subtype: SPIFFS
           coredump : addr: 0x003F0000, size:    64.0 KB, type: DATA, subtype: COREDUMP
------------------------------------------
Software Info:
------------------------------------------
  Compile Date/Time : Feb 11 2026 08:16:33
  Compile Host OS   : windows
  ESP-IDF Version   : v5.5.2-249-gf56bea3d1f
  Arduino Version   : 3.3.6
------------------------------------------
Board Info:
------------------------------------------
  Arduino Board     : ESP32S3_DEV
  Arduino Variant   : esp32s3
  Arduino FQBN      : esp32:esp32:esp32s3:UploadSpeed=921600,USBMode=hwcdc,CDCOnBoot=cdc,MSCOnBoot=default,DFUOnBoot=default,UploadMode=default,CPUFreq=240,FlashMode=qio,FlashSize=4M,PartitionScheme=default,DebugLevel=debug,PSRAM=opi,LoopCore=1,EventsCore=1,EraseFlash=none,JTAGAdapter=default,ZigbeeMode=default
============ Before Setup End ============
[  1731][I][esp32-hal-periman.c:141] perimanSetPinBus(): Pin 19 already has type USB_DM (45) with bus 0x3fc98e30
[  1731][I][esp32-hal-periman.c:141] perimanSetPinBus(): Pin 20 already has type USB_DP (46) with bus 0x3fc98e30

=== ESP32 Arduino Board Settings ===
USB CDC On Boot                         : Enabled
CPU Frequency                           : 240MHz (WiFi)
Core Debug Level                        : Debug
USB DFU On Boot                         : Disabled
Events Run On                           : Core 1
Flash Mode                              : QIO 80MHz
Flash Size                              : 8MB (64Mb)
Arduino Runs On                         : Core 1
USB Firmware MSC On Boot                : Disabled
PSRAM                                   : Enabled (OPI)
Partition Scheme                        : 4MB (APP 1.3MB x2, SPIFFS 1.4MB, NVS 20KB, OTADATA 8KB)
USB Mode                                : Hardware CDC and JTAG
=== end ===
=========== After Setup Start ============
INTERNAL Memory Info:
------------------------------------------
  Total Size        :   385692 B ( 376.7 KB)
  Free Bytes        :   347828 B ( 339.7 KB)
  Allocated Bytes   :    32816 B (  32.0 KB)
  Minimum Free Bytes:   342340 B ( 334.3 KB)
  Largest Free Block:   286708 B ( 280.0 KB)
------------------------------------------
SPIRAM Memory Info:
------------------------------------------
  Total Size        :  8388608 B (8192.0 KB)
  Free Bytes        :  8386096 B (8189.5 KB)
  Allocated Bytes   :      136 B (   0.1 KB)
  Minimum Free Bytes:  8386096 B (8189.5 KB)
  Largest Free Block:  8257524 B (8064.0 KB)
------------------------------------------
GPIO Info:
------------------------------------------
  GPIO : BUS_TYPE[bus/unit][chan]
  --------------------------------------  
    19 : USB_DM
    20 : USB_DP
    43 : UART_TX[0]
    44 : UART_RX[0]
============ After Setup End =============

先程まではArduino CLIでWSL上でビルドしたのですが、上記はWindows上のArduono IDEになります。表示自体はほぼ同じなのですが、同一プロジェクトでArduino IDEとArduino CLIとPlatformIOの共存が可能かを確認するために実験してみました。

------------------------------------------
Software Info:
------------------------------------------
  Compile Date/Time : Feb 11 2026 08:16:33
  Compile Host OS   : windows
  ESP-IDF Version   : v5.5.2-249-gf56bea3d1f
  Arduino Version   : 3.3.6
------------------------------------------
Board Info:
------------------------------------------
  Arduino Board     : ESP32S3_DEV
  Arduino Variant   : esp32s3
  Arduino FQBN      : esp32:esp32:esp32s3:UploadSpeed=921600,USBMode=hwcdc,CDCOnBoot=cdc,MSCOnBoot=default,DFUOnBoot=default,UploadMode=default,CPUFreq=240,FlashMode=qio,FlashSize=4M,PartitionScheme=default,DebugLevel=debug,PSRAM=opi,LoopCore=1,EventsCore=1,EraseFlash=none,JTAGAdapter=default,ZigbeeMode=default

出力をみてみるとHost OSがLinuxからWindowsに変わっていますがこれは環境差なので意味はありません。FQBNをみるとArduino CLIだと差分だけ設定しているのですが、Arduino IDEは差分がない項目も全部指定する方針みたいですね。ちなみにアップロード速度を変えてもFQBNが変更されるので、キャッシュが全部使えなくなってフルビルドかかるのはこれが原因だと思います。

PlatformIO(pioarduino)

ESP-ROM:esp32s3-20210327
=========== Before Setup Start ===========
Chip Info:
------------------------------------------
  Model             : ESP32-S3
  Package           : 1
  Revision          : 0.02
  Cores             : 2
  CPU Frequency     : 240 MHz
  XTAL Frequency    : 4Bitfield : 0x00000012
  Embedded Flash    : No
  Embedded PSRAM    : No
  2.4GHz WiFi       : Yes
  Classic BT        : No
  BT Low Energy     : Yes
  IEEE 802.15.4     : No
------------------------------------------
INTERNAL Memory Info:
------------------------------------------
  Total Size        :   385692 B ( 376.7 KB)
  Free Bytes        :   347916 B ( 339.8 KB)
  Allocated Bytes   :    32760 B (  32.0 KB)
  Minimum Free Bytes:   342768 B ( 334.7 KB)
  Largest Free Block:   286708 B ( 280.0 KB)
------------------------------------------
SPIRAM Memory Info:
------------------------------------------
  Total Size        :  8388608 B (8192.0 KB)
  Free Bytes        :  8386096 B (8189.5 KB)
  Allocated Bytes   :      136 B (   0.1 KB)
  Minimum Free Bytes:  8386096 B (8189.5 KB)
  Largest Free Block:  8257524 B (8064.0 KB)
  Bus Mode          : OPI
------------------------------------------
Flash Info:
------------------------------------------
  Chip Size         :  8388608 B (8 MB)
  Block Size        :    65536 B (  64.0 KB)
  Sector Size       :     4096 B (   4.0 KB)
  Page Size         :      256 B (   0.2 KB)
  Bus Speed         : 80 MHz
  Flash Frequency   : 80 MHz (source: 160 MHz, divider: 2)
  Bus Mode          : QIO
------------------------------------------
Partitions Info:
------------------------------------------
                nvs : addr: 0x00009000, size:    20.0 KB, type: DATA, subtype: NVS
            otadata : addr: 0x0000E000, size:     8.0 KB, type: DATA, subtype: OTA
               app0 : addr: 0x00010000, size:  3264.0 KB, type:  APP, subtype: OTA_0
               app1 : addr: 0x00340000, size:  3264.0 KB, type:  APP, subtype: OTA_1
             spiffs : addr: 0x00670000, size:  1536.0 KB, type: DATA, subtype: SPIFFS
           coredump : addr: 0x007F0000, size:    64.0 KB, type: DATA, subtype: COREDUMP
------------------------------------------
Software Info:
------------------------------------------
  Compile Date/Time : Feb 11 2026 08:07:12
  ESP-IDF Version   : v5.5.2-249-gf56bea3d1f
  Arduino Version   : 3.3.6
------------------------------------------
Board Info:
------------------------------------------
  Arduino Board     : Espressif ESP32-S3-DevKitC-1-N8 (8 MB QD, No PSRAM)
  Arduino Variant   : esp32s3
  Core Debug Level  : 5
  Arduino Runs Core : 1
  Arduino Events on : 1
  Arduino USB Mode  : 1
  CDC On Boot       : 1
============ Before Setup End ============
[  1916][V][esp32-hal-periman.c:251] perimanClearBusDeinit(): Deinit function for type UART_RX (2) cleared
[  1917][V][esp32-hal-periman.c:251] perimanClearBusDeinit(): Deinit function for type UART_TX (3) cleared
[  1917][V][esp32-hal-periman.c:251] perimanClearBusDeinit(): Deinit function for type UART_CTS (4) cleared
[  1918][V][esp32-hal-periman.c:251] perimanClearBusDeinit(): Deinit function for type UART_RTS (5) cleared
[  1918][V][esp32-hal-periman.c:160] perimanSetPinBus(): Pin 44 successfully set to type UART_RX (2) with bus 0x3fc95704
[  1919][V][esp32-hal-periman.c:235] perimanSetBusDeinit(): Deinit function for type UART_RX (2) successfully set to 0x42005bd8
[  1919][V][esp32-hal-periman.c:160] perimanSetPinBus(): Pin 43 successfully set to type UART_TX (3) with bus 0x3fc95704
[  1919][V][esp32-hal-periman.c:235] perimanSetBusDeinit(): Deinit function for type UART_TX (3) successfully set to 0x42005af4
[  1920][I][esp32-hal-periman.c:141] perimanSetPinBus(): Pin 19 already has type USB_DM (45) with bus 0x3fc98e30
[  1920][I][esp32-hal-periman.c:141] perimanSetPinBus(): Pin 20 already has type USB_DP (46) with bus 0x3fc98e30

=== ESP32 Arduino Board Settings ===
USB CDC On Boot                         : Enabled
CPU Frequency                           : 240MHz (WiFi)
Core Debug Level                        : Verbose
USB DFU On Boot                         : Disabled
Events Run On                           : Core 1
Flash Mode                              : QIO 80MHz
Flash Size                              : 8MB (64Mb)
Arduino Runs On                         : Core 1
USB Firmware MSC On Boot                : Disabled
PSRAM                                   : Enabled (OPI)
Partition Scheme                        : 8MB (APP 3.2MB x2, SPIFFS 1.5MB, NVS 20KB, OTADATA 8KB)
USB Mode                                : Hardware CDC and JTAG
=== end ===
=========== After Setup Start ============
INTERNAL Memory Info:
------------------------------------------
  Total Size        :   385692 B ( 376.7 KB)
  Free Bytes        :   347828 B ( 339.7 KB)
  Allocated Bytes   :    32816 B (  32.0 KB)
  Minimum Free Bytes:   342532 B ( 334.5 KB)
  Largest Free Block:   286708 B ( 280.0 KB)
------------------------------------------
SPIRAM Memory Info:
------------------------------------------
  Total Size        :  8388608 B (8192.0 KB)
  Free Bytes        :  8386096 B (8189.5 KB)
  Allocated Bytes   :      136 B (   0.1 KB)
  Minimum Free Bytes:  8386096 B (8189.5 KB)
  Largest Free Block:  8257524 B (8064.0 KB)
------------------------------------------
GPIO Info:
------------------------------------------
  GPIO : BUS_TYPE[bus/unit][chan]
  --------------------------------------  
    19 : USB_DM
    20 : USB_DP
    43 : UART_TX[0]
    44 : UART_RX[0]
============ After Setup End =============

こちらの出力になります。微妙に違うところが残っていますがESP32 Arduino Board Settingsは同じになっています。

------------------------------------------
Software Info:
------------------------------------------
  Compile Date/Time : Feb 11 2026 08:07:12
  ESP-IDF Version   : v5.5.2-249-gf56bea3d1f
  Arduino Version   : 3.3.6
------------------------------------------
Board Info:
------------------------------------------
  Arduino Board     : Espressif ESP32-S3-DevKitC-1-N8 (8 MB QD, No PSRAM)
  Arduino Variant   : esp32s3
  Core Debug Level  : 5
  Arduino Runs Core : 1
  Arduino Events on : 1
  Arduino USB Mode  : 1
  CDC On Boot       : 1

こちらが出力です。最新バージョンの3.3.6なのですがCompile Host OSがなくなっています。そしてBoard InfoもFQBNがないので、差分があったところだけ表示されていますね。コンパイルした環境がわからなくても大抵は問題ないと思います。

ただBefore Setup Endのあとの警告が多いんですよね。Arduino Variantとかの設定がPlatformIOとArduino用で違う可能性があります。

ボード定義自体Arduino IDE用とPlatformIOは別管理で、登録されているボード名も初期値も違う場合があるのでここは注意が必要なところです。

I2CやSPIで初期化をする場合にはボードのデフォルト値を使うのではなく、明示的にピン番号を指定するようにしてください。

    -DARDUINO_USB_MSC_ON_BOOT=0
    -DARDUINO_USB_DFU_ON_BOOT=0

ちなみにM5Stack社の推奨設定だと差分があったので上記2行を追加してあります。基本デフォルトが0の項目なので、なくても大丈夫なことが多いのですがifdefとかで存在確認している場合には問題になるのでArduino IDEに合わせた方が無難だと思います。

Arduino IDEとArduino CLIとPlatformIOを共存させる

これは結構苦戦しました。最終的には上記ような対応でなんとか同一プロジェクトで共存が可能になっています。

まずArduino IDEはフォルダ名と同じ名前の.inoファイルしか認識しません。この場合00_Buildフォルダのプロジェクトなので、00_Build.inoがコンパイル対象となります。また、サブディレクトリは無視されますのでsrc/main.cppはコンパイル対象となりません。Arduino IDEでもmain.cppが表示されない状態になります。

次にArduino CLIだとサブディレクトリもコンパイル対象となります。つまりsrc/main.cppの中身もコンパイルされてしまいます。一方PlatformIOはフォルダ直下の00_Build.inoは無視して、srcフォルダに入っているファイルしかコンパイル対象にしません。src_dirなどの設定で制御できるのですが、基本ディレクトリ分割をする思想なのでおすすめしません。

#ifdef PLATFORMIO
#include "../00_Build.ino"
#endif

なのでPlatformIOの場合のみ上位ディレクトリにある00_Build.inoを読み込む設定にしています。Arduino CLIがこのファイルをコンパイルしても空のファイル相当の処理となります。

M5StickS3-examples/02_components/00_Build at main ?? tanakamasayuki/M5StickS3-examples
Contribute to tanakamasayuki/M5StickS3-examples development by creating an account on GitHub.

上記に実験したプロジェクトファイル一式が入っています。

PlatformIOのライブラリ管理に注意しましょう

lib_deps =
    EspHelper=https://github.com/tanakamasayuki/EspHelper.git

上記のようにURL指定していますが、これには意味があります。

EspHelperという名前でArduino IDEにはライブラリ登録してあるのですが、同名のライブラリがPlatformIOにもありました。通常Arduino側にライブラリ登録をすると自動的にPlatformIOにも登録されるのですが、名前がバッティングしていたみたいです。

まとめ

PlatformIOを好んでいる人が多いですが、個人的にはArduino CLIをおすすめします。Windows上のArduono IDEと比べるとPlatformIOの方がビルド時間などは早いのですが、WSL環境のArduino CLIの方が何倍も早いです。

これはWindows環境自体が遅いので、PlatformIOもWSL環境で動かしてusbipdを利用してWindows上のUSBに接続すれば早くなりますが結構環境構築が面倒です。Arduino CLIだとVSCODEの拡張機能を利用すればシリアルポートはWindowsのものがそのまま使える利点があります。

環境差分もArduino CLIだとM5Stack版をそのまま使うことができるので、一番問題が起きにくいとは思います。今後Arduino CLIの利用方法についてもまとめていきたいと思っています。

コメント