乐鑫matter通讯方案蓝牙wifi一体芯片esp-insights工程运行示例
在esp-insights 工程中运行示例 diagnostics_smoke_test
1.下载 ESP Insights 组件
下载 ESPInsights 组件的工程代码,命令如下:
$git clone --recursive https://github.com/espressif/esp-insights.git
2.配置 ESP-IDF
ESP Insights 组件当前支持 master 分支和 v4.3.x、v4.2.x、v4.1x 的release 版本。对于版本 v4.3.2.需要按照如下命令打补丁 (Patch):
$ cd SIDF PATH
$ git apply -v <path/to/esp-insights>/idf-patches/Diagnostics-support-in-espidf- tag-v4.3.2.patch
对于版本 v4.2.2 和 v4.1.1,需要按照如下命令打补丁:
$cd $IDF_PATH
$git apply -v <path/to/esp-insights>/idf-patches/Diagnostics-support-in-esp-idf-tag-v4.1.1-and-tag-v4.2.2.patch
用户可以根据自己需求,选择乐鑫matter通讯方案蓝牙wifi一体芯片HTTPS 协议或者 MQTT 协议传输诊断数据,具体配置选择可以参考如下命令:
$ idf.py menuconfig
对应的配置目录为Component config-ESP Insights-Insights default transports。如果选择 HTTPS 协议传输诊断数据,则需要用户登录 https://dashboard.insights.espressif.com/home/insights 界面查看设备的诊断日志。
3,编译烧录运行
上报 Coredump信息
在固件崩溃的情况下,Insights 代理将崩溃产生的核心信息存储到 Flash 中,并在后续启动时将其报告给乐鑫matter通讯方案蓝牙wifi一体芯片ESPInsights 云。这使得开发者可以查看设备生成的所有崩溃日志。
崩溃的整个堆栈 Backtrace 也将被捕获和报告。为了优化设备与 ESP Insights 云的通信,固件仅发送核心摘要信息。核心摘要信息包含程序计数器、异常原因、异常地址、通用寄存器和回溯。
该功能需要进行如下配置,开发者可以将如下配置添加至工程的默认配置文件(sdkconfig.defaults) 里。
1.CONFIG_ESP32_ENABLE_COREDUMP=Y
2.CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH=Y
3.CONFIG_ESP32_COREDUMP_DATA_FORMAT_ELF=Y
4.CONFIG ESP32_COREDUMP_CHECKSUM_CRC32-Y
5.CONFIG_ESP32_CORE_DUMP_MAX_TASKS_NUM=64
为了将崩溃产生的核心信息存储到乐鑫matter通讯方案蓝牙wifi一体芯片Flash 中,需要额外的分区用于存储。将下面一行信息添加到项目的分区表文件 (partitions.csv) 中。
1.coreddump,data,coredump,,64K
定制感兴趣的日志
Esp_log 组件是ESP-IDF 中的默认日志输出组件。通常 ESP_LOGE 和ESP_LOGW 用于记录固件中的错误和警告。使用esp_log组件记录的所有日志都由Insights代理跟踪并报告给ESPInsights 云。这允许开发者通过乐鑫matter通讯方案蓝牙wifi一体芯片ESPInsights_Dashboard 查看这些错误,为开发者提供有关可能发生的情况的详细信息。
开发者通过 esp diag log hook enable()函数和esp diag log_hook_disable()函数可以配置上报的日志等级。
1./*enable tracking error logsx/
2.esp_diag_log_hook enable(ESP_DIAG_LOG_TYPE_ERROR);
3.
4./*enable tracking all log levels*/
5.esp_diag_log_hook_enable(ESP_DIAG_LOG_TYPE_ERROR I ESP_DIAG_LOG_TYPE_WARNING|
6.ESP_DIAG_LOG_TYPE_EVENT):
7.
8./*disable tracking custom events*/
9.esp_diag_log_hook_disable(ESP_DIAG_LOG_TYPE_EVENT);
通常情况下,当设备发生崩溃之前都会打印一些错误或者警告等级的日志,这个时候往往可能无法将日志上报至云端,Insights 代理提供了一种方法来保持该日志,并且在上电重启时将日志上报给 ESP Insights 云。ESP32-C3 配备了RTC 内存,Insights 代理使用此内存来存储系统上发生的严重错误。在重新上电时,乐鑫matter通讯方案蓝牙wifi一体芯片Insights 代理都将检查 RTC 内存是否存在任何未报告的错误,并将其报告给 ESP Insights 云。
上报设备重启原因
Insights代理默认支持上报设备重启的原因,Insights代理会在每次启动后报告记录在 RTC内存的重启原因。这使得开发者可以识别设备是否因崩溃、看门狗触发、软件复位或终端用户的电源重置而引起重启。
上报自定义的指标值
Insights代理支持向ESPInsights云上报指标,然后通过ESPInsights仪表板查看图表,这些图表绘制了所上报的指标在一段时间内的变化情况。
通过配置 CONFIG_DIAG_ENABLE_METRICS=y 选项来开启上述功能。Insights 代理支持原先定义好的指标,如内存和 Wi-Fi信号强度等,另外也支持用户自定义的指标。
1.内存指标
Insights 代理支持报告当前可用内存、大可用块和峰值内存。这些参数记录的是内部 RAM以及外部 RAM(如果设备具有 PSRAM)的内存情况。乐鑫matter通讯方案蓝牙wifi一体芯片Insights 代理还支持记录内存分配失败的情况,不过需要使用 ESP-IDF 版本v4.2及更高版本。
通过配置CONFIG_DIAG_ENABLE_HEAP_METRICS=y 选项可支持上述功能。
2.Wi-Fi指标
Insights代理还支持报告Wi-Fi指标,可记录Wi-Fi信号强度(RSSI)和低的RSSI信息。Insights代理每30s统计一次 RSSI如果之前统计的和当前统计的相差 5dB,就会上报至 ESP Insights云。从ESP-IDF v4.3 版本开始,当 RSSI值低于预先配置的闽值时,Insights 代理也会记录低的 RSSI。乐鑫matter通讯方案蓝牙wifi一体芯片使用esP_wifi_set_rssi_threshold()函数可以配置阈值。还有一个函数可以在任何给定时间点收集和报告 Wi-Fi信号的指标,即:
1./*Reports RSSI to cloud and also prints to console*/
2. esp_diag_wifi_metrics_dump();
3.自定义指标
开发者可以通过如下函数添加自定义指标。
1./*Register a metrics to track room temperature*/
2.esp diag metrics register("temp","templ","Room temperature","room",
3.ESP_DIAG_DATA TYPE_UINT);
4.
5./*Record a data point for room temperature*/Fuint32 t room temp = get_room_temperature();
6.uint32 t room temp = get_room_temperature();
7.esp diag_metrics_add_uint("templ", &room_temp);
esp_diag_metrics_register()函数的原型如下:
1.esp_err_t esp_diag_metrics_register(const char *tag const char *key;
2.const char *label,const char *path,
3.esp_diag_data_type_t type);
在函数 esp_diag_metrics_register()的原型中,参数 tag 表示该指标的标签,用户可以自行定义;参数 key表示该指标的唯一标识,用于查找、设置该指标值的标识;参数label是显示在 ESP Insights 仪表盘的标签:参数 path 表示对 key 的分层路径,必须用“.”分隔如 wifi、heap.internal、heap.external;参数 type 表示数据类型,类型支持如下枚举值:
1.typedef enum {
2.ESP_DIAG_DATA_TYPE_BOOL,/*!< Data type boolean*/
3.ESP_DIAG_DATA_TYPE_INT, /*!< Data type integer*/
4.ESP_DIAG_DATA_TYPE_UNIT, /*!< Data type unsigned integer*/
5.ESP_DIAG_DATA_TYPE_FLOAT,/*!< Data type float*/
6.ESP_DIAG_DATA_TYPE_STR,/*!< Data type string*/
7.ESP_DIAG_DATA_TYPE_IPV4,/*!< Data type IPv4 address*/
8.ESP_DIAG_DATA_TYPE_MAC,/*!< Data type MAC address*/
9.}esp_diag_data_type_t;
4.变量
变量与指标类似,一般都不需要统计一段时间内变量的变化,因为变量一般表示设备的信息如设备的IP 地址。乐鑫matter通讯方案蓝牙wifi一体芯片通过配置CONEIG_DIAG_ENABLE_VARIABLES=y 选项可以统计变量信息。和指标一样,除了支持原先定义好的变量,如 IP、Wi-Fi 等信息,也支持用户自定义变量。
(1)网络变量。目前支持 Wi-Fi和IP 中的变量,Wi-Fi中的变量包括BSSID、SSID、Wi-Fi 断开连接的原因、当前信道、Wi-Fi 连接认证模式和连接状态;IP 中的变量包括网关地址、IPv4 地址和子网掩码。
(2)自定义变量。开发者可以通过如下函数添加自定义变量:
1./*Register a variable to track stations associated with ESP32 AP*/
2.esp_diag_variable_register(“wifi”,”sta_cnt”,”STAs associated”,
3.”wifi.sta”,ESP_DIAG_DATA_TYPE_UINT);
4.
5./*Assuming WIFI_EVENT_AP_STACONNECTED and WIFI_EVEN_ AP_STADISCONNECTED
6.events track the number of associated stations*/
7.esp_diag_variable_add_uint("sta_cnt",&sta_cnt);
函数 esp_diag_variable_register ()的原型如下:
1.esp_err_t esp_diag_variable_register(const char *tag,const char *key,
2.const chat *label,const char *path,
3.esp_diag_data_type_t type);
函数 esp_diag_variable_register()的参数含义和函数 esp_diag_metrics_register()的参数相同。