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_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"

View File

@ -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);
}

View File

@ -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é");
}

View File

@ -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;

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