taltalp が 2020年08月18日16時48分10秒 に編集
初版
タイトルの変更
ESP Logging Library
タグの変更
ESP
Arduino
記事種類の変更
セットアップや使用方法
本文の変更
ArduinoでESPを開発するときに、デバッグログのレベル付けと、レベルに応じて表示/非表示を切り替える方法についてのメモです。 ## 使用するライブラリ https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/log.html ## サンプルコード ```c++ #include "esp_log.h" static const char *TAG = "main"; void setup() { Serial.begin(115200); /* // ESP-IDFでEnable log set levelを有効にすると使える esp_log_level_set("*", ESP_LOG_ERROR); esp_log_level_set("BLE", ESP_LOG_INFO); // 特定のタグのものだけINFOにする */ // ログのレベル付けができる & タグ付けができる ESP_LOGE(TAG, "Logging Level Error"); ESP_LOGW(TAG, "Logging Level Warn"); ESP_LOGI(TAG, "Logging Level Info"); ESP_LOGD(TAG, "Logging Level Debug"); ESP_LOGV(TAG, "Logging Level Verbose"); // 書式指定もできる String str = "Hello"; int i = 123; float f = 456.789; ESP_LOGV(TAG, "%s, %d, %3.2f", str, i, f); // std::stringの場合 std::string std_str = "Hello std"; ESP_LOGV(TAG, "%s", std_str.c_str()); } void loop() { } ``` ## Arduino IDEの設定 「ツール→Core Debug Level」を任意のレベルに設定する ![キャプションを入力できます](https://camo.elchika.com/36787c52bf3a248646dc5fe70a5d8cf18ebfeeb2/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30636231363661662d616538622d346431312d393136362d6465646531383239313039612f66366138656666332d393865362d343563342d393332612d356365326336633238383363/) ## 実行結果 ``` [E][sketch_aug18a.ino:9] setup(): Logging Level Error [W][sketch_aug18a.ino:10] setup(): Logging Level Warn [I][sketch_aug18a.ino:11] setup(): Logging Level Info [D][sketch_aug18a.ino:12] setup(): Logging Level Debug [V][sketch_aug18a.ino:13] setup(): Logging Level Verbose [V][sketch_aug18a.ino:18] setup(): Hello, 123, 456.79 [V][sketch_aug18a.ino:21] setup(): Hello std ``` ## Platform IOの場合 `platform.ini`に`build_flags = -DCORE_DEBUG_LEVEL=X`を追記する。レベルは下記の通り。 ``` ; Error build_flags = -DCORE_DEBUG_LEVEL=1 ; Warn build_flags = -DCORE_DEBUG_LEVEL=2 ; Info build_flags = -DCORE_DEBUG_LEVEL=3 ; Debug build_flags = -DCORE_DEBUG_LEVEL=4 ; Verbose build_flags = -DCORE_DEBUG_LEVEL=5 ``` ## その他 ESPで使われるライブラリのソースコードをみてみると、ESP_LOGX()は頻繁に使われているようです。 `esp_log_level_set("TAG_NAME", ESP_LOG_ERROR);`のようにTAGの名前を指定することで、特定のログのみを抽出することが可能なようです。 しかし、`esp_log_level_set`を実行するためにはESP_IDFでEnable log set levelを有効にしなければいけないようです。(未確認) これについては今後試すことがあれば追記したいと思います。