概要
デバッグレベルを変更したところ、起動時に便利な情報が表示されていたので確実に表示させる方法を紹介したいと思います。
起動時の表示項目
Setup前に表示される項目 printBeforeSetupInfo
=========== Before Setup Start ===========
Chip Info:
------------------------------------------
Model : ESP32
Package : PICO-V3-02
Revision : 3.00
Cores : 2
CPU Frequency : 240 MHz
XTAL Frequency : 40 MHz
Features Bitfield : 0x000000b3
Embedded Flash : Yes
Embedded PSRAM : Yes
2.4GHz WiFi : Yes
Classic BT : Yes
BT Low Energy : Yes
IEEE 802.15.4 : No
------------------------------------------
INTERNAL Memory Info:
------------------------------------------
Total Size : 378124 B ( 369.3 KB)
Free Bytes : 336956 B ( 329.1 KB)
Allocated Bytes : 33916 B ( 33.1 KB)
Minimum Free Bytes: 331256 B ( 323.5 KB)
Largest Free Block: 110580 B ( 108.0 KB)
------------------------------------------
SPIRAM Memory Info:
------------------------------------------
Total Size : 2097152 B (2048.0 KB)
Free Bytes : 2095104 B (2046.0 KB)
Allocated Bytes : 0 B ( 0.0 KB)
Minimum Free Bytes: 2095104 B (2046.0 KB)
Largest Free Block: 2064372 B (2016.0 KB)
Bus Mode : QSPI
------------------------------------------
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 : May 15 2025 12:17:22
Compile Host OS : windows
ESP-IDF Version : v5.4.1-1-g2f7dcd862a-dirty
Arduino Version : 3.2.0
------------------------------------------
Board Info:
------------------------------------------
Arduino Board : M5STACK_STICKC_PLUS2
Arduino Variant : m5stack_stickc_plus2
Arduino FQBN : esp32:esp32:m5stack_stickc_plus2:UploadSpeed=1500000,CPUFreq=240,FlashFreq=80,FlashMode=qio,FlashSize=8M,PartitionScheme=default_8MB,DebugLevel=verbose,PSRAM=enabled,LoopCore=1,EventsCore=1,EraseFlash=none
============ Before Setup End ============
上記のようなビルドに利用した情報が表示されます。PSRAMやパーティションの情報なども表示されるのでわかりやすいですね。
とくにPlatformIOなどでビルドするときにFQBNの部分に差が無いかなどを確認するときに便利そうです。
Setup後に表示される項目 printAfterSetupInfo
=========== After Setup Start ============
INTERNAL Memory Info:
------------------------------------------
Total Size : 378124 B ( 369.3 KB)
Free Bytes : 336868 B ( 329.0 KB)
Allocated Bytes : 33972 B ( 33.2 KB)
Minimum Free Bytes: 330908 B ( 323.2 KB)
Largest Free Block: 110580 B ( 108.0 KB)
------------------------------------------
SPIRAM Memory Info:
------------------------------------------
Total Size : 2097152 B (2048.0 KB)
Free Bytes : 2095104 B (2046.0 KB)
Allocated Bytes : 0 B ( 0.0 KB)
Minimum Free Bytes: 2095104 B (2046.0 KB)
Largest Free Block: 2064372 B (2016.0 KB)
------------------------------------------
GPIO Info:
------------------------------------------
GPIO : BUS_TYPE[bus/unit][chan]
--------------------------------------
1 : UART_TX[0]
3 : UART_RX[0]
============ After Setup End =============
こちらはメモリの状態と、GPIOの設定が表示されます。pinModeやI2Cなどの初期化をすると情報が追加されていることとなります。
ただし、レジスタを直接設定してArduino(ESP-IDF)の関数を呼び出さない場合にはここには反映されないようでした。M5GFXなどはPWMなどは反映されていましたが、SPIとかは表示されていなかったと思います。
表示条件
#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_DEBUG
printBeforeSetupInfo();
#else
if (shouldPrintChipDebugReport()) {
printBeforeSetupInfo();
}
#endif
main.cppにて呼び出されています。上記のようにデバッグレベルがLOG以上の場合か、shouldPrintChipDebugReport関数の戻り値がtrueの場合に表示されます。
__attribute__((weak)) bool shouldPrintChipDebugReport(void) {
return false;
}
shouldPrintChipDebugReport関数は上記のように宣言されており、weakで宣言されています。weakがついた関数は上書きをする関数が宣言されている場合にはそちらを利用し、されていない場合にはこの関数が利用されます。
bool shouldPrintChipDebugReport(void) {
return true;
}
void setup() {
}
void loop() {
}
上記のように上書き宣言をすることで表示されるようになります。
bool shouldPrintChipDebugReport(void);
#define ENABLE_CHIP_DEBUG_REPORT \
bool shouldPrintChipDebugReport(void) { \
return true; \
}
ただし、上記のような宣言がされていますので
ENABLE_CHIP_DEBUG_REPORT
void setup() {
}
void loop() {
}
上記でも大丈夫です。大丈夫なのですが、非常に違和感があります。
おすすめ設定
#include <chip-debug-report.h>
bool shouldPrintChipDebugReport(void) {
return true;
}
void setup() {
delay(1000);
printBeforeSetupInfo();
}
void loop() {
}
個人的なおすすめ設定は上記になります。まずM5StickCなどのが採用しているUSBシリアルは再起動すると初期化に時間がかかり起動直後のシリアル出力が拾えません。そのためsetupより前に出力されている部分が抜け落ちます。そこでsetupの先頭でdelay()で1秒程度待ち、その後にprintBeforeSetupInfoを自分で呼び出します。これで確実にprintBeforeSetupInfoを表示させることができます。
ただ最近のUSBシリアルだと初期化時間が短いものがあったりして、初期化待ちがいらないものも多いかもしれません。
まとめ
似たようなデバッグ出力関数は自作していたのですが、便利なので標準機能のこちらを今後は利用していきたいと思っています。ただMACアドレス等は表示されていないんですね。
ログ提出用として個人特定ができる項目は避けているのかもしれません。書き込みログを見ればMACアドレスはわかりますしね。
ちなみにprintAfterSetupInfo()関数はメモリの状態とGPIOの状態がわかるので、明示的に呼び出して便利に使える関数だと思います。
コメント
いつも有用な記事いつもありがとうございます。大変参考にさせていただいています。
実は、Aruduino IDEでは「おすすめ設定」で表示されているのですが、platformio環境では、#include が通らなくて困っています。
platformio.ini でlib_depsに何か登録する必要があるのでしょうか?
ご教授いただければ幸いです。どうかよろしくお願いします。
PlatformIOの標準ESP32プラットフォームは古いバージョンのままで、新しいバージョンはサポートされてなくなりました。
そのためplatformio.iniで別のプラットフォームを選択する必要があります
https://docs.espressif.com/projects/arduino-esp32/en/latest/third_party_tools.html
上記にサポートされているサードパーティーのツール一覧があるのですが、ここからPlatformIOがなくなって、pioarduinoが追加されています。
PlatformIOはEspressifからお金をもらってサポートを追加していたので、契約が切れたみたいです。
pioarduinoの利用方法ですがplatformio.iniで指定する必要があります。
platform = https://github.com/pioarduino/platform-espressif32/releases/download/stable/platform-espressif32.zip
上記のようにプラットフォームがespressif32だけだったのが、URL指定に変わっています。
上記のstableのところがバージョン指定になりまして、stableは最新バージョンです。通常はこれでよいのですが、バージョンを固定したい場合にはリリースのタグである「55.03.30-1」などを指定することができます。
ただし、pio標準のespressif32はかなり古く、最新版のpioarduinoとかなり使い方が変わっていますので注意してください
うまくいきました。ありがとうございます。
私もソフトを使っていろいろなESPの状態取得をしていたのですが、こちらで他にもたくさん有用な情報があるのを知って、それをなんとか取得できないかと思案しています。
お忙しいところ、ご返信いただいけて感謝しております。
それにしても、pioarduinoがいろいろと変わっているのに驚きました。
Arduinoのバージョン2から3でいろいろ変わったみたいですね
ESP-IDFとは別の実装をArduinoはしてきたのですが、Arduino3からはなるべくESP-IDFのSDKを利用する実装に変更してきたみたいです