樂鑫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()的參數相同。