arduino-esp32のライブラリのソースを見ると log_e()やlog_v()で 各種メッセージが出力されている (例)。 これらのメッセージは Arduino IDEだと メニューのツール→Core Debug Levelで設定で 出したり出さなかったりできる。
platformioだと platformio.iniでbuild_flagsを指定してやればいい。
arduino-esp32のライブラリのソースを見ると log_e()やlog_v()で 各種メッセージが出力されている (例)。 これらのメッセージは Arduino IDEだと メニューのツール→Core Debug Levelで設定で 出したり出さなかったりできる。
platformioだと platformio.iniでbuild_flagsを指定してやればいい。
platformio.iniの例
[env:m5stack-core-esp32] platform = espressif32 board = m5stack-core-esp32 framework = arduino upload_port = COM39 monitor_port = COM39 monitor_speed = 115200 build_flags = -DCORE_DEBUG_LEVEL=3 ; 0:None, 1:Error, 2:WARN, 3:Info, 4:Debug, 5:Verbose
log_iの出力はシリアルポートに出力される。 例を下に示す。
[I][BLEDevice.cpp:593] addPeerDevice(): add conn_id: 0, GATT role: client Connected [I][main.cpp:91] loop(): connection succeeded. Notify callback for characteristic ebe0ccc1-7a0a-4b0c-8a1a-6ff2997da3a6 temp = 20.5 : humidity = 25.0 Disconnected [I][BLEDevice.cpp:604] removePeerDevice(): remove: 0, GATT role client [I][main.cpp:88] loop():
[I]
で始まる行がlog_iの出力で、
最初の行は
下の行
で出力されたものである。
log_i("add conn_id: %d, GATT role: %s", conn_id, _client? "client":"server");
つまり[I][BLEDevice.cpp:593] addPeerDevice():
の部分は
自動で出力されている。
この辺の定義は
esp32-hal-log.hにあるので興味がある人は
見て欲しい。
ポイントはソースファイル名がフルパスではなくファイル名だけ表示されているところ。 ソース中に __FILE__と書けば、コンパイル時にソースファイル名の文字列に 置換されるので printfデバッグでは下の行のテンプレートを 用意しソース各所に挿入してやると便利。
fprintf(stderr, "%s(%s:%d)\n",__FUNCTION__,__FILE__,__LINE__);
しかし、Arduionoでこれをやると、ソースファイルがかなり深いディレクトリーにあるので __FILE__がとんでもなく長くなりメッセージが読み難い。 仕方がないのでArduinoではファイル名は諦めて以下の行を挿入していた。
Serial.printf("%s:%d\n", __FUNCTION__,__LINE__);
ちなみに esp8266やesp32のarduinoでは Serial(Printクラス)でprintf()が使える。
log_iでは、どうしているかと調べたら __FILE__を直接使うのではなく pathToFileName()という関数を通して使用していた。 分かってしまえば簡単だが、なかなか自分でやる気は起きなった。
今後はprintfデバッグでlog_iあたりを使うことにしようと思う。