fix meteo (images...)

This commit is contained in:
Marc Pasteur 2026-02-23 18:16:34 +01:00
parent 28c5870ca6
commit d9ac74a595
5 changed files with 63 additions and 33 deletions

View File

@ -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_ok.png" "images/" "AUTO" "NONE")
lvgl_port_create_c_image("images/mqtt_ko.png" "images/" "ARGB8888" "NONE") lvgl_port_create_c_image("images/mqtt_ko.png" "images/" "ARGB8888" "NONE")
lvgl_port_add_images(${COMPONENT_LIB} "images/") 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") elseif(${IDF_TARGET} STREQUAL "linux")
idf_component_register(SRC_DIRS . fonts images idf_component_register(SRC_DIRS . fonts images
INCLUDE_DIRS "include" INCLUDE_DIRS "include"

View File

@ -119,12 +119,12 @@ void draw_temp(char * tempHumid){
void draw_meteo(meteo_event_payload_t *meteo){ void draw_meteo(meteo_event_payload_t *meteo){
//if(display_lock("updateTime")){ //if(display_lock("updateTime")){
//lv_label_set_text(jour, dateHeure); //lv_label_set_text(jour, dateHeure);
lv_subject_set_pointer(&forecastH1Subj, &meteo->daily[0]); lv_subject_set_pointer(&forecastH1Subj, &meteo->forecast[0]);
lv_subject_set_pointer(&forecastH2Subj, &meteo->daily[1]); lv_subject_set_pointer(&forecastH2Subj, &meteo->forecast[1]);
lv_subject_set_pointer(&forecastH3Subj, &meteo->daily[2]); lv_subject_set_pointer(&forecastH3Subj, &meteo->forecast[2]);
lv_subject_set_pointer(&forecastD1Subj, &meteo->forecast[0]); lv_subject_set_pointer(&forecastD1Subj, &meteo->daily[0]);
lv_subject_set_pointer(&forecastD2Subj, &meteo->forecast[1]); lv_subject_set_pointer(&forecastD2Subj, &meteo->daily[1]);
lv_subject_set_pointer(&forecastD3Subj, &meteo->forecast[2]); lv_subject_set_pointer(&forecastD3Subj, &meteo->daily[2]);
//display_unlock("updateTime"); //display_unlock("updateTime");
//} //}
@ -244,13 +244,14 @@ void init_display_ihm(){
keyboard = lv_sdl_keyboard_create(); keyboard = lv_sdl_keyboard_create();
#else #else
lvgl_port_cfg_t lvgl_cfg = ESP_LVGL_PORT_INIT_CONFIG(); 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 = { bsp_display_cfg_t cfg = {
.lvgl_port_cfg = lvgl_cfg, .lvgl_port_cfg = lvgl_cfg,
.buffer_size = 1024*600,//BSP_LCD_DRAW_BUFF_SIZE, .buffer_size = 1024*600,//BSP_LCD_DRAW_BUFF_SIZE,
.double_buffer = 1, .double_buffer = 1,
.hw_cfg = { .hw_cfg = {
.dsi_bus.lane_bit_rate_mbps= 1000 .dsi_bus.lane_bit_rate_mbps= BSP_LCD_MIPI_DSI_LANE_BITRATE_MBPS
}, },
.flags = { .flags = {
.buff_dma = false, .buff_dma = false,
@ -259,8 +260,8 @@ void init_display_ihm(){
} }
}; };
ESP_LOGE(TAG,"On demarre le display"); ESP_LOGE(TAG,"On demarre le display");
lv_display_t *dsp = bsp_display_start(); //lv_display_t *dsp = bsp_display_start();
//lv_display_t *dsp = bsp_display_start_with_config(&cfg); lv_display_t *dsp = bsp_display_start_with_config(&cfg);
/*bsp_display_lock(0); /*bsp_display_lock(0);
bsp_display_rotate(dsp,LV_DISP_ROTATION_90); 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 // 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; bool isMinimal = observer->user_data;
ESP_LOGI(TAG, "CB meteo jour declenché. Meteo valide : %b - Mode minimal : %d", data->isValid, isMinimal); ESP_LOGI(TAG, "CB meteo jour declenché. Meteo valide : %b - Mode minimal : %d", data->isValid, isMinimal);
if(!data->isValid){ 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é"); ESP_LOGV("MeteoFrance", "CB meteo horaire declenché");
// Retrieve weatherdata // Retrieve weatherdata
const struct meteoforecast_data *data = subject->value.pointer; struct meteoforecast_data *data = subject->value.pointer;
if(data->isValid){ if(data->isValid){
//printffd(data); //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(datefld, buffer);
lv_label_set_text(lv_obj_get_child(temp_desc_icon, 2), data->previsions.desc); 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); lv_label_set_text_fmt(lv_obj_get_child(temp_desc_icon, 0), "%.1f°C", data->previsions.value);
//free(data);
}else{ }else{
ESP_LOGE(TAG, "Pas de odnnées valides"); 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) void showMeteoIcon(const char *icon, lv_obj_t *desc_icon, int childNr)
{ {
lv_obj_t *img = lv_obj_get_child(desc_icon, childNr); lv_obj_t *img = lv_obj_get_child(desc_icon, childNr);
//char *str1 = "A:/littlefs/"; #if CONFIG_IDF_TARGET_LINUX
char *str1 = "A:/home/marc/domotic/components/domotic_display/images_meteo"; char *str1 = "A:/home/marc/esp/domotic/domotic/components/domotic_display/images_meteo/";
#else
char *str1 = "A:/littlefs/";
#endif
int sizeOfStr; int sizeOfStr;
sizeOfStr = strlen(str1) + strlen(icon) + 6; sizeOfStr = strlen(str1) + strlen(icon) + 6;
char *result = malloc(sizeOfStr); char *result = malloc(sizeOfStr);
snprintf(result,sizeOfStr, "%s%s.png", str1, icon); snprintf(result,sizeOfStr, "%s%s.png", str1, icon);
ESP_LOGV(TAG,"On affiche l'image %s", result); 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); free(result);
} }

View File

@ -115,24 +115,21 @@ void traiteEvt(void *arg)
case IHM_EVT_METEO_RECUE:{ case IHM_EVT_METEO_RECUE:{
//(void *)evt->pvData; // Pointeur sur tableau //(void *)evt->pvData; // Pointeur sur tableau
//(void *)evt->pvData //(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; 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); 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); //lv_subject_set_int(&meteoStatus, 0);
//display_unlock("weather_data_retreived"); //display_unlock("weather_data_retreived");
ESP_LOGE(TAG, "------------------------------------- Fin Set des subjects --------------------------------"); ESP_LOGE(TAG, "Fin Reception evt MF");
break; break;
} }
@ -141,8 +138,10 @@ void traiteEvt(void *arg)
break; break;
} }
// Nettoyage mémoire sécurisé // 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->pvData);
}
free(evt); free(evt);
ESP_LOGV(TAG, "Evt traité"); ESP_LOGV(TAG, "Evt traité");
} }

View File

@ -135,7 +135,7 @@ void send_event(domo_events evt, void* pDatas) {
} }
memcpy(payload->daily, incoming->daily, sizeof(incoming->daily)); 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->eEventType = IHM_EVT_METEO_RECUE;
ihmEvt->pvData = payload; ihmEvt->pvData = payload;
ihmEvt->bNeedToFreeData = true; ihmEvt->bNeedToFreeData = true;

View File

@ -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) void app_main(void)
{ {
@ -861,7 +879,7 @@ void app_main(void)
ihm_gateway_init(); ihm_gateway_init();
startEvtManager(); startEvtManager();
littlefs_mount();
boucleMeteo(); boucleMeteo();
#if CONFIG_IDF_TARGET_LINUX #if CONFIG_IDF_TARGET_LINUX