> 文章列表 > 【ESP-IDF】日志

【ESP-IDF】日志

【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 <stdio.h>
#include "esp_log.h
void app_main(void)
{// E ErrorESP_LOGE("交通灯", "不亮了");// W WarnESP_LOGW("交通灯", "灯泡寿命还有5%%");// I InformationESP_LOGI("交通灯", "交通灯寿命还有75%%");// D DebugESP_LOGD("交通灯", "灯泡亮度1000,已使用200小时");// V verboseESP_LOGV("交通灯", "灯丝还有5丝厚度,氧化程度0.23,寿命正常");ESP_LOGE("人行横道", "有人闯红灯!");ESP_LOGW("人行横道", "现在是红灯,禁止通行");ESP_LOGI("人行横道", "20秒后是绿灯");
}

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

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

【ESP-IDF】日志
修改info改为verbose,可以发现全部输出了

【ESP-IDF】日志
【ESP-IDF】日志

实际场景中的应用

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

#include <stdio.h>
#include <stdbool.h> // stdbool.h是一个C标准库的头文件,它定义了bool类型和true/false常量,用于表示布尔值。
#include "esp_log.h"
const char *tagTraffic = "交通灯";
bool secretlog = true;
void app_main(void)
{if (secretlog){// 将日志输出等级调为VERBOSEesp_log_level_set(tagTraffic, ESP_LOG_VERBOSE);}else{// 将日志输出等级调为INFOesp_log_level_set(tagTraffic, ESP_LOG_INFO);}// E ErrorESP_LOGE(tagTraffic, "不亮了");// W WarnESP_LOGW(tagTraffic, "灯泡寿命还有5%%"); // "%"是一个特殊字符,在字符串输出时需要用两个即"%%"才能让程序识别// I InformationESP_LOGI(tagTraffic, "交通灯寿命还有75%%");// D DebugESP_LOGD(tagTraffic, "灯泡亮度1000,已使用200小时");// V verboseESP_LOGV(tagTraffic, "灯丝还有5丝厚度,氧化程度0.23,寿命正常");ESP_LOGE("人行横道", "有人闯红灯!");ESP_LOGW("人行横道", "现在是红灯,禁止通行");ESP_LOGI("人行横道", "20秒后是绿灯");
}