From d9ac74a59574236508f22ddb4712ad124fdb7464 Mon Sep 17 00:00:00 2001 From: Marc Pasteur Date: Mon, 23 Feb 2026 18:16:34 +0100 Subject: [PATCH] fix meteo (images...) --- components/domotic_display/CMakeLists.txt | 2 +- components/domotic_display/ihm.c | 43 +++++++++++++++-------- components/domotic_display/ihm_gateway.c | 29 ++++++++------- components/eventsManager/eventsManager.c | 2 +- main/main.c | 20 ++++++++++- 5 files changed, 63 insertions(+), 33 deletions(-) diff --git a/components/domotic_display/CMakeLists.txt b/components/domotic_display/CMakeLists.txt index c71a176..4364f13 100644 --- a/components/domotic_display/CMakeLists.txt +++ b/components/domotic_display/CMakeLists.txt @@ -32,7 +32,7 @@ if(${IDF_TARGET} STREQUAL "esp32p4" OR ${IDF_TARGET} STREQUAL "esp32s3") lvgl_port_create_c_image("images/mqtt_ok.png" "images/" "AUTO" "NONE") lvgl_port_create_c_image("images/mqtt_ko.png" "images/" "ARGB8888" "NONE") lvgl_port_add_images(${COMPONENT_LIB} "images/") - #littlefs_create_partition_image(littlefs images_meteo FLASH_IN_PROJECT) + littlefs_create_partition_image(littlefs images_meteo FLASH_IN_PROJECT) elseif(${IDF_TARGET} STREQUAL "linux") idf_component_register(SRC_DIRS . fonts images INCLUDE_DIRS "include" diff --git a/components/domotic_display/ihm.c b/components/domotic_display/ihm.c index d94fb42..5ab32e4 100644 --- a/components/domotic_display/ihm.c +++ b/components/domotic_display/ihm.c @@ -119,12 +119,12 @@ void draw_temp(char * tempHumid){ void draw_meteo(meteo_event_payload_t *meteo){ //if(display_lock("updateTime")){ //lv_label_set_text(jour, dateHeure); - lv_subject_set_pointer(&forecastH1Subj, &meteo->daily[0]); - lv_subject_set_pointer(&forecastH2Subj, &meteo->daily[1]); - lv_subject_set_pointer(&forecastH3Subj, &meteo->daily[2]); - lv_subject_set_pointer(&forecastD1Subj, &meteo->forecast[0]); - lv_subject_set_pointer(&forecastD2Subj, &meteo->forecast[1]); - lv_subject_set_pointer(&forecastD3Subj, &meteo->forecast[2]); + lv_subject_set_pointer(&forecastH1Subj, &meteo->forecast[0]); + lv_subject_set_pointer(&forecastH2Subj, &meteo->forecast[1]); + lv_subject_set_pointer(&forecastH3Subj, &meteo->forecast[2]); + lv_subject_set_pointer(&forecastD1Subj, &meteo->daily[0]); + lv_subject_set_pointer(&forecastD2Subj, &meteo->daily[1]); + lv_subject_set_pointer(&forecastD3Subj, &meteo->daily[2]); //display_unlock("updateTime"); //} @@ -244,13 +244,14 @@ void init_display_ihm(){ keyboard = lv_sdl_keyboard_create(); #else lvgl_port_cfg_t lvgl_cfg = ESP_LVGL_PORT_INIT_CONFIG(); - lvgl_cfg.task_priority=4; + lvgl_cfg.task_priority=18; + lvgl_cfg.task_stack=12000; bsp_display_cfg_t cfg = { .lvgl_port_cfg = lvgl_cfg, .buffer_size = 1024*600,//BSP_LCD_DRAW_BUFF_SIZE, .double_buffer = 1, .hw_cfg = { - .dsi_bus.lane_bit_rate_mbps= 1000 + .dsi_bus.lane_bit_rate_mbps= BSP_LCD_MIPI_DSI_LANE_BITRATE_MBPS }, .flags = { .buff_dma = false, @@ -259,8 +260,8 @@ void init_display_ihm(){ } }; ESP_LOGE(TAG,"On demarre le display"); - lv_display_t *dsp = bsp_display_start(); - //lv_display_t *dsp = bsp_display_start_with_config(&cfg); + //lv_display_t *dsp = bsp_display_start(); + lv_display_t *dsp = bsp_display_start_with_config(&cfg); /*bsp_display_lock(0); bsp_display_rotate(dsp,LV_DISP_ROTATION_90); @@ -499,7 +500,13 @@ static void weatherdataJour_obs_cb(lv_observer_t *observer, lv_subject_t *subjec { // Retrieve weatherdata - const struct meteodailyforecast_data *data = subject->value.pointer; + struct meteodailyforecast_data *data = subject->value.pointer; + + ESP_LOGE(TAG,"Est valide : %d - %s", data->isValid, data->previsions.desc); + ESP_LOGE(TAG,"Est valide : %d - %s", data->isValid, data->previsions.desc); + ESP_LOGE(TAG,"Est valide : %d - %s", data->isValid, data->previsions.desc); + + bool isMinimal = observer->user_data; ESP_LOGI(TAG, "CB meteo jour declenché. Meteo valide : %b - Mode minimal : %d", data->isValid, isMinimal); if(!data->isValid){ @@ -538,6 +545,8 @@ static void weatherdataJour_obs_cb(lv_observer_t *observer, lv_subject_t *subjec } } } + //free(data); + } } @@ -547,7 +556,7 @@ static void weatherdataHeure_obs_cb(lv_observer_t *observer, lv_subject_t *subje { ESP_LOGV("MeteoFrance", "CB meteo horaire declenché"); // Retrieve weatherdata - const struct meteoforecast_data *data = subject->value.pointer; + struct meteoforecast_data *data = subject->value.pointer; if(data->isValid){ //printffd(data); @@ -566,6 +575,7 @@ static void weatherdataHeure_obs_cb(lv_observer_t *observer, lv_subject_t *subje lv_label_set_text(datefld, buffer); lv_label_set_text(lv_obj_get_child(temp_desc_icon, 2), data->previsions.desc); lv_label_set_text_fmt(lv_obj_get_child(temp_desc_icon, 0), "%.1f°C", data->previsions.value); + //free(data); }else{ ESP_LOGE(TAG, "Pas de odnnées valides"); @@ -576,14 +586,17 @@ static void weatherdataHeure_obs_cb(lv_observer_t *observer, lv_subject_t *subje void showMeteoIcon(const char *icon, lv_obj_t *desc_icon, int childNr) { lv_obj_t *img = lv_obj_get_child(desc_icon, childNr); - //char *str1 = "A:/littlefs/"; - char *str1 = "A:/home/marc/domotic/components/domotic_display/images_meteo"; + #if CONFIG_IDF_TARGET_LINUX + char *str1 = "A:/home/marc/esp/domotic/domotic/components/domotic_display/images_meteo/"; + #else + char *str1 = "A:/littlefs/"; + #endif int sizeOfStr; sizeOfStr = strlen(str1) + strlen(icon) + 6; char *result = malloc(sizeOfStr); snprintf(result,sizeOfStr, "%s%s.png", str1, icon); ESP_LOGV(TAG,"On affiche l'image %s", result); - lv_image_set_src(img, "A:/home/marc/esp/domotic/domotic/components/domotic_display/images_meteo/p4j.png"); + lv_image_set_src(img, result); free(result); } diff --git a/components/domotic_display/ihm_gateway.c b/components/domotic_display/ihm_gateway.c index 0855d96..1c76ab6 100644 --- a/components/domotic_display/ihm_gateway.c +++ b/components/domotic_display/ihm_gateway.c @@ -115,24 +115,21 @@ void traiteEvt(void *arg) case IHM_EVT_METEO_RECUE:{ //(void *)evt->pvData; // Pointeur sur tableau //(void *)evt->pvData - ESP_LOGE("MeteoFrance", "------------------------------------- Set des subjects J --------------------------------"); + ESP_LOGE(TAG, "Reception evt MF"); + + // On ne veut liberer la memoire que lorsque l'evenement aura été traité! + evt->bNeedToFreeData=false; meteo_event_payload_t *datas = (meteo_event_payload_t *) evt->pvData; + ESP_LOGE(TAG,"Est valide : %d - %s", datas->daily[0].isValid, datas->daily[0].previsions.desc); + ESP_LOGE(TAG,"Est valide : %d - %s", datas->daily[1].isValid, datas->daily[1].previsions.desc); + ESP_LOGE(TAG,"Est valide : %d - %s", datas->daily[2].isValid, datas->daily[2].previsions.desc); + ESP_LOGE(TAG,"Est valide : %d - %s", datas->forecast[0].isValid, datas->forecast[0].previsions.desc); + ESP_LOGE(TAG,"Est valide : %d - %s", datas->forecast[1].isValid, datas->forecast[1].previsions.desc); + ESP_LOGE(TAG,"Est valide : %d - %s", datas->forecast[2].isValid, datas->forecast[2].previsions.desc); draw_meteo(datas); - // Prévisions des 3 prochains jours - //lv_subject_set_pointer(&forecastD1Subj, &dailyDatas[0]); - //lv_subject_set_pointer(&forecastD2Subj, &dailyDatas[1]); - //lv_subject_set_pointer(&forecastD3Subj, &dailyDatas[2]); - - ESP_LOGE("MeteoFrance", "------------------------------------- Set des subjects H--------------------------------"); - // Prévisions des 3 prochains jours - //ESP_LOGV("MeteoFrance", "Pointeur %lli", datas[0].datetime); - //lv_subject_set_pointer(&forecastH1Subj, &datas[0]); - //lv_subject_set_pointer(&forecastH2Subj, &datas[1]); - // lv_subject_set_pointer(&forecastH3Subj, &datas[2]); - //lv_subject_set_int(&meteoStatus, 0); //display_unlock("weather_data_retreived"); - ESP_LOGE(TAG, "------------------------------------- Fin Set des subjects --------------------------------"); + ESP_LOGE(TAG, "Fin Reception evt MF"); break; } @@ -141,8 +138,10 @@ void traiteEvt(void *arg) break; } // Nettoyage mémoire sécurisé - if (evt->bNeedToFreeData && evt->pvData) + if (evt->bNeedToFreeData && evt->pvData){ + ESP_LOGE(TAG, "Libération mémoire"); free(evt->pvData); + } free(evt); ESP_LOGV(TAG, "Evt traité"); } diff --git a/components/eventsManager/eventsManager.c b/components/eventsManager/eventsManager.c index 672555d..29b46a9 100644 --- a/components/eventsManager/eventsManager.c +++ b/components/eventsManager/eventsManager.c @@ -135,7 +135,7 @@ void send_event(domo_events evt, void* pDatas) { } memcpy(payload->daily, incoming->daily, sizeof(incoming->daily)); - memcpy(payload->forecast, incoming->daily, sizeof(incoming->forecast)); + memcpy(payload->forecast, incoming->forecast, sizeof(incoming->forecast)); ihmEvt->eEventType = IHM_EVT_METEO_RECUE; ihmEvt->pvData = payload; ihmEvt->bNeedToFreeData = true; diff --git a/main/main.c b/main/main.c index 568785e..5cd06db 100644 --- a/main/main.c +++ b/main/main.c @@ -853,6 +853,24 @@ void lightSensorTask(void *pvParameter){ } */ } +#include "esp_littlefs.h" + +void littlefs_mount(void) +{ + esp_vfs_littlefs_conf_t conf = { + .base_path = "/littlefs", + .partition_label = "littlefs", // ← DOIT matcher partitions.csv + .format_if_mount_failed = false + }; + + esp_err_t ret = esp_vfs_littlefs_register(&conf); + + if (ret != ESP_OK) { + printf("LittleFS mount failed: %s\n", esp_err_to_name(ret)); + } else { + printf("LittleFS mounted at /littlefs\n"); + } +} void app_main(void) { @@ -861,7 +879,7 @@ void app_main(void) ihm_gateway_init(); startEvtManager(); - + littlefs_mount(); boucleMeteo(); #if CONFIG_IDF_TARGET_LINUX