通过ESP32 logging库来启发我们的思维吧~~

原创 专注于无线通信的蓬勃 2022-04-11 23:02

   零. 声明


本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:

第一篇:ESP-IDF基本介绍,主要会涉及模组,芯片,开发板的介绍,环境搭建,程序编译下载,启动流程等一些基本的操作,让你对ESP-IDF开发有一个总体的认识,比我们后续学习打下基础!

第二篇:ESP32-IDF外设驱动介绍,主要会根据esp-idf现有的driver,提供各个外设的驱动,比如LED,OLED,SPI LCD,TOUCH,红外,Codec ic等等,在这一篇中,我们不仅仅来做外设驱动,还会对常用的外设总线做一个介绍,让大家知其然又知其所以然!

第三篇:目前比较火热的GUI LVGL介绍,主要会设计LVGL7.1,LVGL8的移植介绍,并且也会介绍各个组件,知道原理后,最后,我们会推出一款组态软件来构建我们的GUI,来提升我们的效率!

第四篇:ESP32-蓝牙,熟悉我的,应该都知道,我即使从事蓝牙协议栈的开发的,所以这个是我们独有的优势,在这一篇章,我们会提供不仅仅是蓝牙应用方法的知识,也会应用结合蓝牙底层协议栈的理论,让你彻底从上到下打通蓝牙任督二脉!

第五篇:Wi-Fi介绍,熟悉我的,应该也知道,我们也做过一款sdio wifi的驱动教程板子,所以在wifi这方面我们也是有独有的优势,在这一篇章,我们同样不仅仅提供Wi-Fi应用方面的知识,也会结合底层理论,让你对Wi-Fi有一个清晰的认知!

另外,我们的教程包括但是不局限于以上篇章,为了给你一个更好的导航,以下信息尤其重要,请详细查看!!

------------------------------------------------------------------------------------------------------------------------------------------

购买开发板(点击我)

文档目录(点击我)

Github代码仓库(点击我)

蓝牙交流扣扣群:539357317

微信公众号↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

​​

------------------------------------------------------------------------------------------------------------------------------------------

一.概述

日志库有两种管理日志详细程度的方法:

编译阶段,通过菜单设置;

运行阶段,使用esp_log_level_set()函数设置。

日志等级有:错误,警告,信息,调试和详细(详细度从最低到最高)。

在编译阶段,使用CONFIG_LOG_DEFAULT_LEVEL选项过滤。所有等级状态高于CONFIG_LOG_DEFAULT_LEVELD的日志将会被处理器移除。

在运行阶段,所有低于CONFIG_LOG_DEFAULT_LEVEL的日志被默认使能。esp_log_level_set()函数可以用来减少每个模块的日志等级。模块通过标签识别,这些标签是可读的零结尾的ASCII字符串。

注意:esp_log_level_set()函数不能提高到超过CONFIG_LOG_DEFAULT_LEVEL设置的等级。在编译阶段,为了给特殊文件提高日志等级,可以使用LOG_LOCAL_LEVEL宏(详见下)。

二.如何使用库

在每个C文件里使用日志功能,需要这样定义TAG变量:

static const char* TAG = "MyModule";

然后使用一条日志宏来产生输出,比如:

ESP_LOGW(TAG, "Baud rate error %.1f%%. Requestd: %d baud, actual: %d", error * 100, baud_req, baud_real);

以下是一些不同复杂度的日志宏:

. ESP_LOGE - error(lowest)

. ESP_LOGW - warning

. ESP_LOGI -info

. ESP_LOGD -debug

. ESP_LOGV -verbose(highest)

另外有一个_EARLY变量对应以上每一个宏(比如ESP_EARLY_LOGE)。这些变量可以在启动代码中运行,在堆栈分配和系统调用被初始化前。当编译引导程序时,普通的ESP_LOGx宏不像ESP_EARLY_LOGx那么有效。所以ESP_EARLY_LOGx明确的唯一用处是在启动代码里,比如堆栈分配初始化代码。

为了覆盖一个文件或部件作用范围的默认详细度,定义LOG_LOCAL_LEVEL宏。在文件作用范围,在 inclueing esp_log.h 前定义它,比如:

#define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE 
#include "esp_log.h"

在部件范围,在部件的makefile里定义:

CFLAGS  = -D LOG_LOCAL_LEVEL=ESP_LOG_DEBUG

在运行阶段,为了配置每个模块的日志输出,增加条用 esp_log_level_set() 函数:

esp_log_level_set("*", ESP_LOG_ERROR);        // 设置所有的部件日志详细度为ERROR 
esp_log_level_set("wifi", ESP_LOG_WARN);      // 使能来自WiFi栈的警告日志 
esp_log_level_set("dhcpc", ESP_LOG_INFO);     // 使能来自DHCP客户端的信息日志

API的比较简单,具体可以详细参照下以下链接:Logging library - ESP32 - — ESP-IDF Programming Guide latest documentation

我们比较常用的就是以下几个吧

ESP_LOGE(tag, format, ...)
ESP_LOGW(tag, format, ...)
ESP_LOGI(tag, format, ...)
ESP_LOGD(tag, format, ...)
ESP_LOGV(tag, format, ...)
ESP_LOG_BUFFER_HEX(tag, buffer, buff_len)

三.使用logging库

1.menuconfig配置

Default log verbosity: 编译的log等级,决定哪些log能输出

Use ANSI terminal colors in log output: log等级是否有颜色输出。

NOTED:当然也要串口工具也要支持此功能才行,否则在颜色tag部分会输出乱码

Log Timestamps:日志时间戳

2.代码

我们在上面已经说明了怎么使用,我们直接来贴代码,然后看效果

#include "esp_log.h"

static const char* TAG = "Wireless Link";

void esp32_logging_lib_show()
{
    ESP_LOGE(TAG, "I am error log");
    ESP_LOGW(TAG, "I am warning log");
    ESP_LOGI(TAG, "I am info log");
    ESP_LOGD(TAG, "I am debug log");
    ESP_LOGV(TAG, "I am verbose log");
}

void app_main(void)
{
    esp32_logging_lib_show();
}

效果:

由于我们menuconfig设置的是info,所以debug跟verbose没有显示

四.自己写一个log系统

我们看到上面这么炫酷,又是可以增加log等级,又是可以根据log等级显示不同的颜色的,那么他们是怎么实现的呢?我们要做到知其然又知其所以然,他的logging系统代码很简单,你们可以自己追下,我们来写一个简单的logging系统来看下效果吧,目的是起到抛砖引玉的作用:

wl_log.h的代码如下:

#include <stdio.h>


/* Define trace levels */
#define WL_TRACE_LEVEL_NONE    0          /* No trace messages to be generated    */
#define WL_TRACE_LEVEL_ERROR   1          /* Error condition trace messages       */
#define WL_TRACE_LEVEL_WARNING 2          /* Warning condition trace messages     */
#define WL_TRACE_LEVEL_INFO   3           /* Debug messages for info            */
#define WL_TRACE_LEVEL_DEBUG   4          /* Full debug messages                  */
#define WL_TRACE_LEVEL_VERBOSE 5          /* Verbose debug messages               */

#define MAX_TRACE_LEVEL        6

#define DEFAULT_LOG_LEVEL WL_TRACE_LEVEL_INFO

#define LOG_COLOR_YELLOW "\033[40;33m"
#define LOG_COLOR_RED "\033[40;31m"
#define LOG_COLOR_BLUE "\033[40;36m"
#define LOG_COLOR_PURPLE "\033[40;35m"
#define LOG_COLOR_RESET "\033[0m"


#define LOGCOMMON(tag, fmt, ...) printf(LOG_COLOR_BLUE"[ %s ] "LOG_COLOR_RESET fmt "\n", tag, ##__VA_ARGS__);
#define LOGWARN(tag, fmt, ...) printf(LOG_COLOR_BLUE"[ %s ] "LOG_COLOR_RESET LOG_COLOR_YELLOW fmt LOG_COLOR_RESET"\n", tag, ##__VA_ARGS__);
#define LOGERR(tag, fmt, ...) printf(LOG_COLOR_BLUE"[ %s ] "LOG_COLOR_RESET LOG_COLOR_RED fmt LOG_COLOR_RESET"\n", tag, ##__VA_ARGS__);

#define WL_LOGE(tag,fmt,...) do{ if(DEFAULT_LOG_LEVEL >= WL_TRACE_LEVEL_ERROR){LOGERR(tag,fmt,##__VA_ARGS__);} }while(0)
#define WL_LOGW(tag,fmt,...) do{ if(DEFAULT_LOG_LEVEL >= WL_TRACE_LEVEL_WARNING){LOGWARN(tag, fmt,##__VA_ARGS__);} }while(0)
#define WL_LOGI(tag,fmt,...) do{ if(DEFAULT_LOG_LEVEL >= WL_TRACE_LEVEL_INFO){LOGCOMMON(tag, fmt,##__VA_ARGS__);} }while(0)
#define WL_LOGD(tag,fmt,...) do{ if(DEFAULT_LOG_LEVEL >= WL_TRACE_LEVEL_DEBUG){LOGCOMMON(tag, fmt,##__VA_ARGS__);} }while(0)
#define WL_LOGV(tag,fmt,...) do{ if(DEFAULT_LOG_LEVEL >= WL_TRACE_LEVEL_VERBOSE){LOGCOMMON(tag, fmt,##__VA_ARGS__);} }while(0)

main.c的效果如下:

#include "esp_log.h"
#include "wl_log.h"

static const char* TAG = "Wireless Link";

void esp32_logging_lib_show()
{
    ESP_LOGE(TAG, "I am esp32 error log");
    ESP_LOGW(TAG, "I am esp32 warning log");
    ESP_LOGI(TAG, "I am esp32 info log");
    ESP_LOGD(TAG, "I am esp32 debug log");
    ESP_LOGV(TAG, "I am esp32 verbose log");
}

void wl_logging_lib_show()
{
    WL_LOGE(TAG, "I am wireless link(wl) error log");
    WL_LOGW(TAG, "I am wireless link(wl) warning log");
    WL_LOGI(TAG, "I am wireless link(wl) info log");
    WL_LOGD(TAG, "I am wireless link(wl) debug log");
    WL_LOGV(TAG, "I am wireless link(wl) verbose log");
}

void app_main(void)
{
    esp32_logging_lib_show();
    wl_logging_lib_show();
}

输出效果

这个并不是让你在esp32中让你使用自己的log系统(当然你也可以),而是介绍下log系统想分log等级以及模块其实没有那么复杂的!!

专注于无线通信的蓬勃 朝气蓬勃——不积跬步 无以至千里, 不积小流 无以成江海
评论 (0)
  • 深圳触觉智能RK3506开发板现已上市,开启预售!搭载瑞芯微RK3506B/J超低功耗工业处理器(1.5GHz三核A7+M0,主频1.5GHz);支持1280×1280显示、双百兆网口、星闪无线三模,板载高达2路CAN FD与5路串口。RK3506适用场景简介工业控制‌:RK3506适用于工业控制、工业通信、人机交互等应用场景。其多核异构架构(3xCortex-A7+Cortex-M0)和外设接口丰富,支持Buildroot、Yocto系统,适合轻量级HMI应用‌。‌工业通信‌:RK3506均支
    Industio_触觉智能 2025-03-07 10:04 158浏览
  • ​CS6212是一款可分别用于USB Type-C主机/显示端口源应用的带重定时的有源开关。这设备符合USB 3.2标准版本1.0和USB Type-C标准上的VESA DisplayPort Alt模式 1.0版,支持通过GPIO或12C进行灵活的模式切换。此设备支持USB 3.2第2x1代 运行速度高达10Gbps,DisplayPort 1.4运行速度高达HBR3 8.1Gbps。CS6212管脚分布及功能定义:CS6212支持重定时器训练,并支持USB 3.2标准中定义的状态状态机(RT
    QQ1540182856 2025-03-07 10:09 197浏览
  • Sub-GHz,即工作频段低于1GHz的无线通信技术,常见频段有315MHz、433MHz、868MHz与915MHz等。其可借助无线电波在自由空间传播的特性,把数据调制到射频载波上进行传输,达成物联网设备间的无线通信,是物联网设备实现高效、稳定、无缝交互的“通信基石”。典型射频信号(无线电波)收发电路简示在工业自动化、智慧城市、智慧农业与智能家居等物联网领域中,LoRa、Wi-SUN、Z-Wave、Sigfox等工业级通信协议大多运行在Sub-GHz频段。而正是通过Sub-GHz射频技术,传感
    华普微HOPERF 2025-03-07 11:39 223浏览
  • 3月9日,海信电视举行“巅峰画质 影游旗舰”新品发布会,正式发布E8Q旗舰系列电视新品,搭载全球首颗信芯AI画质芯片H7、全新升级的黑曜屏Ultra、330Hz系统级高刷、U+Mini LED光晕控制系统、影院级帝瓦雷声学系统五大行业首发科技,为极致影游爱好者打造电视画质的巅峰之作。海信电视E8Q系列提供65/75/85/100/116英寸五个版本,其中E8Q Pro零售指导价为75英寸/13599元、85英寸/17999元、100英寸/27999元;E8Q零售指导价为65英寸/7499元、75
    华尔街科技眼 2025-03-09 20:52 97浏览
  • 近年来,越来越多的企业在5S管理的基础上,开始追求6S、7S甚至8S管理,仿佛S越多,管理就越先进,企业就越优秀。于是,6S增加了“安全”,7S又加上了“节约”,8S甚至引入了“学习”……看似更加全面,实则很多企业只是机械地增加S,却忽略了管理的核心目标:提升效率、降低浪费、优化工作环境。优思学院认为,5S本身已经是一套成熟的精益管理工具,它的核心理念不仅简单高效,而且易于实施和推广。如果企业只是为了赶时髦,盲目增加S,而没有真正理解5S的本质,那么这些额外的“S”很可能会变成管理上的负担,而不
    优思学院 2025-03-07 12:43 264浏览
  • 文/Leon编辑/cc孙聪颖2025 年全国两会正如火如荼地进行,这一备受瞩目的年度盛会,再度成为社会各界聚焦的核心。会议期间,代表们积极建言献策,诸多建议迅速引发舆论热潮,频繁登上热搜榜单。其议题范畴极为广泛,紧密围绕产业革新、民生保障与就业促进、教育优化升级、AI 技术规范与发展等多个关键领域展开探讨。这些热点议题不仅精准呼应了当下经济社会发展的紧迫需求,更深度契合了民众对美好生活的向往与诉求,因此在网络空间中激起千层浪,吸引了海量网民的高度关注 。全国人大代表、美的集团首席财务官钟铮,今年
    华尔街科技眼 2025-03-08 20:11 96浏览
  • ASL6328芯片支持高达 6.0 Gbps 运行速率的交流和直流耦合输入T-MDS 信号,具备可编程均衡和抖动清理功能。ASL6328 是一款单端口 HDMI/DVI 电平转换 / 中继器,具有重新定时功能。它包含 TypeC双模式 DP 线缆适配器寄存器,可用于识别线缆适配器的性能。抖动清理 PLL(锁相环)能够消除输入抖动,并完全重置系统抖动容限,因此能更好地满足更高数据速率下 HDMI 抖动合规性要求。设备的运行和配置可通过引脚设置或 I2C 总线实现。自动断电和静噪功能提供了灵活的电
    QQ1540182856 2025-03-06 14:26 144浏览
  • 文/郭楚妤编辑/cc孙聪颖在这个瞬息万变的时代,流量的到来毫无预兆,不知哪片云会带来降雨。哪怕行事极为低调,也可能在不经意间成为舆论焦点。原本团结、紧张、严肃的全国两会,就因一位来自商界的人大代表周云杰的意外走红,变得活泼起来。周云杰是海尔集团董事局主席、首席执行官,在两会期间以一种意想不到的方式进入大众视野,成为网络热议的焦点人物。故事得从 3 月 5 日讲起。当日,第十四届全国人民代表大会第三次会议首场 “代表通道” 集中采访活动在北京人民大会堂举行。小米公司创始人雷军以全国人大代表的身份亮
    华尔街科技眼 2025-03-08 20:30 108浏览
  • 多人同时共享相同无线网络,以下场景是否是您熟悉的日常?姐姐:「妈~我在房间在线上课,影音一直断断续续的怎么上课啊!」奶奶:「媳妇啊~我在在线追剧,影片一直卡卡的,实在让人生气!」除此之外,同时间有老公在跟客户开在线会议,还有弟弟在玩在线游戏,而妈妈自己其实也在客厅追剧,同时间加总起来,共有五个人同时使用这个网络!我们不论是在家里、咖啡厅、餐厅、商场或是公司,都会面临到周遭充斥着非常多的无线路由器(AP),若同时间每位使用者透过手机、平板或是笔电连接到相同的一个网络,可想而知网络上的壅塞及相互干扰
    百佳泰测试实验室 2025-03-06 16:50 169浏览
  • 一、系统概述MYD-LD25X搭载的Debian系统包含以太网、WIFI/BT、USB、RS485、RS232、CAN、AUDIO、HDMI显示和摄像头等功能,同时也集成了XFCE轻量化桌面、VNC远程操控、SWITCH网络交换和TSN时间敏感网络功能,为工业设备赋予“超强算力+实时响应+极简运维”的体验!类别名称描述源码TF-AArm Trusted Firmware 2.8OP-TEEOP-TEE 3.19BootloaderU-boot 2022.10KernelLinux Ke
    米尔电子嵌入式 2025-03-07 14:08 323浏览
  • 服务器应用环境与客户需求PCIe 5.0高速接口技术的成熟驱动着生成式AI与高效能运算等相关应用蓬勃发展。在随着企业对服务器性能的要求日益严苛,服务器更新换代的周期也持续加快。在此背景下,白牌与DIY(Do It Yourself)服务器市场迎来了新的发展契机,但同时也面临着更趋复杂的技术挑战。传统上,白牌与DIY服务器以其高度客制化与成本效益优势受到市场青睐。然而,随着PCIe 5.0等高速技术的导入,服务器系统的复杂度大幅提升,对组装技术与组件兼容性也就提出更高的要求。举个简单的例子来说,P
    百佳泰测试实验室 2025-03-06 17:00 181浏览
  • 深圳触觉智能SOM3506核心板现已上市,搭载瑞芯微RK3506B/J超低功耗处理器(1.5GHz三核A7+M0),低功耗满载仅0.7W,支持40℃~85℃工作环境,即日起宽温级59元/工业级68元,特价开售!芯片介绍RK3506是瑞芯微Rockchip在2024年第四季度全新推出的Arm嵌入式芯片平台,三核Cortex-A7+单核Cortex-M0多核异构设计,CPU频率达1.5Ghz, M0 MCU为200Mhz。RK3506适用场景简介工业控制‌:RK3506适用于工业控制、工业通信、人机
    Industio_触觉智能 2025-03-07 10:03 190浏览
  • 文/Leon编辑/cc孙聪颖2025年全国两会进行时,作为“十四五”规划收官之年,本届两会释放出坚定目标、稳中求进、以进促稳等信号。其中,企业家们的建议备受关注,关系到民营经济在2025年的走向。作为国内科技制造业的“老兵”,全国人大代表、TCL集团创始人及董事长李东生在本届两会中提出三份代表建议,包括《关于优化中国科技制造业融资环境的建议》、《关于加强AI深度伪造欺诈管理的建议》和《关于降低灵活就业人员社会保险参保门槛的建议》,表现出对科技制造、AI发展和劳动者保障方面的关注。会后,李东生接受
    华尔街科技眼 2025-03-06 19:41 157浏览
  •        深夜的公园里,当路灯熄灭后,传统监控摄像头只能拍出模糊的黑白画面,仿佛老式胶片电影里的场景。而搭载为旌瑶光ISP的摄像头,却能像猫科动物一样,在几乎全黑的环境中捕捉到行人衣服的颜色、树叶的纹理,甚至快速跑动的宠物狗毛发细节。这种从“黑白默片”到“全彩4K电影”的跨越,背后是为旌瑶光ISP对传统红外补光技术的颠覆性创新。一、传统方案之困:被红外光“绑架”的夜视世界        传统安防摄像头依赖红外
    中科领创 2025-03-07 16:50 435浏览
  • 在企业管理和职场环境中,权力是一个常被提及却又让人感到微妙的话题。有人觉得它充满吸引力,有人却对它避之不及。然而,不管你对权力的态度如何,理解它、掌握它,甚至善用它,都是职场成功的重要一环。今天,我们就来深入探讨权力的本质,特别是个人权力和社会权力的区别,以及如何在职场中逐步建立属于自己的影响力。权力的两种面貌:你掌控自己,还是掌控他人?说到权力,首先要区分它的两种类型。个人权力是你对自己生活的掌控感。比如,你能自由决定自己的职业方向,不用总是请示他人。这种权力让人感到踏实和满足,是我们在生活中
    优思学院 2025-03-07 15:56 289浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦