ESP32 入門到精通 – ESP_LOGx


簡介

在 ESP32 的 ESP-IDF 中,esp_logx 是一個用於記錄 LOG 信息的函數。ESP_LOGx 函數是一個巨集,用來簡化 LOG 記錄的調試,提供不同級別的 LOG 輸出。

ESP_LOGx 各種級別

ESP_LOGE : 記錄錯誤信息,通常表示程序遇到了一些需要立即處理的問題。
ESP_LOGW : 記錄警告信息,表示程序可能存在潛在問題,但不會立即影響功能。
ESP_LOGI : 記錄普通的信息,表示程序的正常運行狀況或狀態信息。
ESP_LOGG : 記錄調試信息,通常用於開發階段,包含更詳細的運行細節。
ESP_LOGE : 記錄非常詳細的調試信息,通常用於最細粒度的調試。

如何使用 ESP_LOGx

ESP_LOGx 是一個巨集,實際上是基於不同的 LOG 級別來呼叫不同的函數。其基本語法如下...
ESP_LOGx(level, tag, format, ...)
level: LOG 級別,例如 ESP_LOG_INFO。
tag:用於標識 LOG 來源的標籤。
format:格式字符串,類似於 printf 的格式。
...:格式字符串中的變量部分。

配置 ESP_LOGx 級別

靜態配置

在 sdkconfig 文件中,你可以設置全局 LOG 級別。例如...
CONFIG_LOG_DEFAULT_LEVEL_INFO=y
動態配置

在程式中,也可以使用 esp_log_level_set 函數來動態設置的 LOG 級別,例如...
#define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE
#include "esp_log.h"

// Define the log tag for this component
static const char *TAG = "MY_TAG";

void app_main() {
    // Set the global log level to INFO
    esp_log_level_set("*", ESP_LOG_INFO);

    // This DEBUG message will not be shown because global level is INFO
    ESP_LOGD(TAG, "This DEBUG message will not be shown.");

    // This INFO message will be shown
    ESP_LOGI(TAG, "This INFO message will be shown.");
}
注意

esp_log_level_set() 是無法將 LOG 等級設定高於 CONFIG_LOG_MAXIMUM_LEVEL 設定的等級。如需在編譯時將特定檔案的 LOG 等級提高到此最高等級以上,可使用 LOG_LOCAL_LEVEL 巨集。

安裝 VSCode 和 ESP-IDF VSCode 擴展

確保你已經安裝和配置好了 ESP-IDF 開發環境。您也可以參考 ESP32 入門到精通 – 在 VSCode 安裝 ESP-IDF 插件 這篇文章。

新建 ESP32 專案

利用在 VSCode 的 IDF 插件來新建一個 ESP32 專案可參考 ESP32 入門到精通 – 如何用 VSCode 創建 ESP32 專案

ESP_LOGx 範例

#include "esp_log.h"

static const char *TAG = "APP_TAG";

void app_main() {
    ESP_LOGE(TAG, "This is an error message: %s", "Something went wrong");
    ESP_LOGW(TAG, "This is a warning message");
    ESP_LOGI(TAG, "This is an info message");
    ESP_LOGD(TAG, "This is a debug message with value: %d", 100);
    ESP_LOGV(TAG, "This is a verbose message with string: %s", "Verbose info");
}

編譯和燒錄

在 VSCode 中找到 "ESP32-IDF : Build, Flash and Monitor" ICON 執行和燒錄。

查看結果

我們可以查看在終端機的列印結果,如下...
I (1000) APP_TAG: This is an info message
D (1001) APP_TAG: This is a debug message with value: 100
V (1002) APP_TAG: This is a verbose message with string: Verbose info
E (1003) APP_TAG: This is an error message: Something went wrong
W (1004) APP_TAG: This is a warning message

結論

ESP_LOGx 提供了靈活的 LOG 記錄功能,使你可以根據 LOG 級別和標籤來控制 LOG 輸出。通過配置 LOG 級別和使用不同的 LOG 巨集,您可以在開發過程中獲得所需的信息,並在運行時動態調整 LOG 輸出。