【ESP-IDF】日志

【ESP-IDF】日志

  • 介绍ESP-IDF中的日志模块
  • 实际场景中的应用

介绍ESP-IDF中的日志模块

首先我们来介绍一下ESP-IDF中用于日志模块的头文件:esp_log.h

我们在代码中使用#include “esp_log.h”引入即可,关于它的解释见如下:

你好,这是一个C语言的预处理指令,用于包含一个头文件到你的源代码中。头文件通常包含了一些函数声明,宏定义,类型定义等,方便你使用其他模块或库的功能。在这个例子中,你包含了esp_log头文件,它是ESP-IDF提供的一个日志模块,可以让你在串口或JTAG输出不同级别的日志信息,帮助你调试你的应用程序。你可以参考这个文档来了解更多关于esp_log模块的用法:https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/system/log.html

简单来说,以下做一些示例讲解:

#include 
#include "esp_log.h
void app_main(void)
{
    // E Error
    ESP_LOGE("交通灯", "不亮了");
    // W Warn
    ESP_LOGW("交通灯", "灯泡寿命还有5%%");
    // I Information
    ESP_LOGI("交通灯", "交通灯寿命还有75%%");

    // D Debug
    ESP_LOGD("交通灯", "灯泡亮度1000,已使用200小时");
    // V verbose
    ESP_LOGV("交通灯", "灯丝还有5丝厚度,氧化程度0.23,寿命正常");

    ESP_LOGE("人行横道", "有人闯红灯!");
    ESP_LOGW("人行横道", "现在是红灯,禁止通行");
    ESP_LOGI("人行横道", "20秒后是绿灯");
}

其中,前面三项EWI是给用户看的,是用户需要的信息,而后面两项DV是给程序员看的
因此我们可以发现,在输出时,后两项不会在终端输出
【ESP-IDF】日志_第1张图片
那么如何能够显示出程序员能看到的信息呢?

首先我们进入menuconfig,输入log,找到log output


修改info改为verbose,可以发现全部输出了

【ESP-IDF】日志_第2张图片
【ESP-IDF】日志_第3张图片

实际场景中的应用

对于我们带有显示屏的应用来说,我们可以搭配上一个按钮进行程序员调试触发,当点击按钮或者输入相应调试密码时,则将esp_log输出信息的等级调高(即可看到DV),如下代码所示:

#include 
#include  // stdbool.h是一个C标准库的头文件,它定义了bool类型和true/false常量,用于表示布尔值。
#include "esp_log.h"
const char *tagTraffic = "交通灯";
bool secretlog = true;
void app_main(void)
{
    if (secretlog)
    {
        // 将日志输出等级调为VERBOSE
        esp_log_level_set(tagTraffic, ESP_LOG_VERBOSE);
    }
    else
    {
        // 将日志输出等级调为INFO
        esp_log_level_set(tagTraffic, ESP_LOG_INFO);
    }
    // E Error
    ESP_LOGE(tagTraffic, "不亮了");
    // W Warn
    ESP_LOGW(tagTraffic, "灯泡寿命还有5%%"); // "%"是一个特殊字符,在字符串输出时需要用两个即"%%"才能让程序识别
    // I Information
    ESP_LOGI(tagTraffic, "交通灯寿命还有75%%");
    // D Debug
    ESP_LOGD(tagTraffic, "灯泡亮度1000,已使用200小时");
    // V verbose
    ESP_LOGV(tagTraffic, "灯丝还有5丝厚度,氧化程度0.23,寿命正常");

    ESP_LOGE("人行横道", "有人闯红灯!");
    ESP_LOGW("人行横道", "现在是红灯,禁止通行");
    ESP_LOGI("人行横道", "20秒后是绿灯");
}

你可能感兴趣的:(笔记,ESP-IDF)