diff --git a/main/main.c b/main/main.c index 010d289..c5aa0d4 100644 --- a/main/main.c +++ b/main/main.c @@ -30,7 +30,7 @@ #define EXAMPLE_LCD_LVGL_DIRECT_MODE (1) #define EXAMPLE_LCD_LVGL_AVOID_TEAR (1) #define EXAMPLE_LCD_RGB_BOUNCE_BUFFER_MODE (1) -#define EXAMPLE_LCD_DRAW_BUFF_DOUBLE (0) +#define EXAMPLE_LCD_DRAW_BUFF_DOUBLE (1) #define EXAMPLE_LCD_DRAW_BUFF_HEIGHT (100) #define EXAMPLE_LCD_RGB_BUFFER_NUMS (2) #define EXAMPLE_LCD_RGB_BOUNCE_BUFFER_HEIGHT (10) @@ -93,6 +93,10 @@ static esp_lcd_touch_handle_t touch_handle = NULL; static lv_display_t *lvgl_disp = NULL; static lv_indev_t *lvgl_touch_indev = NULL; + lv_obj_t * chart; + lv_chart_series_t * ser1; + + static esp_err_t app_lcd_init(void) { esp_err_t ret = ESP_OK; @@ -300,15 +304,21 @@ static void app_main_display(void) char tempExtStr[6]; char tempIntStr[6]; -char hauteurCuveStr[6]; +char hauteurCuveStr[9]; +char hauteurCuveEvolStr[9]; lv_subject_t tempIntSubj; lv_subject_t tempExtSubj; lv_subject_t hauteurCuveSubj; +lv_subject_t hauteurCuveEvolSubj; char *upEvent = "monter"; char *downEvent = "descendre"; -char* topicTempExt="house/temp/282A802600008059"; +char *topicTempExt="house/temp/282A802600008059"; +char *topicHauteurCuve="house/cuve/hauteur"; +char *topicTempInt="house/temp/287DCF1E00008020"; +char *topicHauteurCuveEvol="house/cuve/hauteurEvol"; + esp_mqtt_client_handle_t client; static void event_handler(lv_event_t *e) @@ -342,7 +352,8 @@ void draw_ihm() { lv_subject_init_string(&tempExtSubj, tempExtStr, NULL, 6, "--"); lv_subject_init_string(&tempIntSubj, tempIntStr, NULL, 6, "--"); - lv_subject_init_string(&hauteurCuveSubj, hauteurCuveStr, NULL, 6, "--"); + lv_subject_init_string(&hauteurCuveSubj, hauteurCuveStr, NULL, 9, "--"); + lv_subject_init_string(&hauteurCuveEvolSubj, hauteurCuveEvolStr, NULL, 9, "--"); // keys.clear(); lv_obj_clean(lv_scr_act()); @@ -353,8 +364,8 @@ void draw_ihm() // lv_style_set_bg_opa(&style_btn, LV_OPA_50); // lv_style_set_border_width(&style_btn, 2); // lv_style_set_border_color(&style_btn, lv_color_black()); - lv_style_set_width(&style_btn, 120); - lv_style_set_height(&style_btn, 120); + lv_style_set_width(&style_btn, 180); + lv_style_set_height(&style_btn, 180); // Un style pour les conteneurs (température, cuve ...) static lv_style_t style_container; @@ -362,14 +373,14 @@ void draw_ihm() lv_style_set_pad_all(&style_container, 5); // lv_style_set_height(&style_container,LV_SIZE_CONTENT); lv_style_set_height(&style_container, 80); - lv_style_set_width(&style_container, 130); + lv_style_set_width(&style_container, 200); lv_style_set_bg_color(&style_container, lv_palette_lighten(LV_PALETTE_BLUE_GREY, 4)); lv_style_set_align(&style_container, LV_ALIGN_BOTTOM_LEFT); lv_style_set_flex_cross_place(&style_container, LV_FLEX_ALIGN_END); static lv_style_t style_lbvValue; lv_style_init(&style_lbvValue); - lv_style_set_text_font(&style_lbvValue, &lv_font_montserrat_26); + lv_style_set_text_font(&style_lbvValue, &lv_font_montserrat_40); lv_obj_set_flex_flow(lv_screen_active(), LV_FLEX_FLOW_ROW); lv_obj_set_style_pad_column(lv_screen_active(), 1, 0); @@ -437,6 +448,7 @@ void draw_ihm() lv_obj_align(btnUp, LV_ALIGN_CENTER, 0, -40); lv_obj_remove_flag(btnUp, LV_OBJ_FLAG_PRESS_LOCK); lv_obj_t *label = lv_label_create(btnUp); + lv_obj_add_style(label, &style_lbvValue, 0); lv_label_set_text(label, LV_SYMBOL_UP); lv_obj_center(label); @@ -446,8 +458,22 @@ void draw_ihm() lv_obj_align(btnDwn, LV_ALIGN_CENTER, 0, -40); lv_obj_remove_flag(btnDwn, LV_OBJ_FLAG_PRESS_LOCK); label = lv_label_create(btnDwn); + lv_obj_add_style(label, &style_lbvValue, 0); lv_label_set_text(label, LV_SYMBOL_DOWN); lv_obj_center(label); + + /*Create a chart*/ + chart = lv_chart_create(lv_screen_active()); + lv_obj_set_size(chart, 200, 200); + lv_chart_set_type(chart, LV_CHART_TYPE_LINE); /*Show lines and points too*/ + lv_chart_set_range(chart, LV_CHART_AXIS_PRIMARY_Y, 0, 130); + ser1 = lv_chart_add_series(chart, lv_palette_main(LV_PALETTE_GREEN), LV_CHART_AXIS_PRIMARY_Y);; + ser1->y_points[0] = lv_rand(0, 40); + ser1->y_points[1] = lv_rand(0, 40); + ser1->y_points[2] = lv_rand(0, 40); + + lv_chart_refresh(chart); /*Required after direct set*/ + } /* The examples use WiFi configuration that you can set via project configuration menu @@ -592,6 +618,24 @@ static void log_error_if_nonzero(const char *message, int error_code) } } +void splitIt(char * payload, unsigned int length, int * datas){ + char *sep=","; + char *token; + char *saveptr1; + + token = strtok_r(payload, sep, &saveptr1); + datas[0]=atoi(token); + + token = strtok_r(NULL, sep, &saveptr1); + datas[1]=atoi(token); + + token = strtok_r(NULL, sep, &saveptr1); + datas[2]=atoi(token); + + token = strtok_r(NULL, sep, &saveptr1); + datas[3]=atoi(token); +} + /* * @brief Event handler registered to receive MQTT events * @@ -617,6 +661,15 @@ static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_ msg_id = esp_mqtt_client_subscribe(client, topicTempExt, 0); ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); + msg_id = esp_mqtt_client_subscribe(client, topicTempInt, 0); + ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); + + msg_id = esp_mqtt_client_subscribe(client, topicHauteurCuve, 0); + ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); + + msg_id = esp_mqtt_client_subscribe(client, topicHauteurCuveEvol, 0); + ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); + msg_id = esp_mqtt_client_subscribe(client, "/topic/qos1", 1); ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); @@ -642,8 +695,37 @@ static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_ ESP_LOGI(TAG, "MQTT_EVENT_DATA"); printf("TOPIC=%.*s\r\n", event->topic_len, event->topic); printf("DATA=%.*s\r\n", event->data_len, event->data); - lv_subject_copy_string(&tempExtSubj, event->data); + if(strncmp(event->topic, topicTempExt,27)==0){ + lvgl_port_lock(0); + lv_subject_copy_string(&tempExtSubj, event->data); + lvgl_port_unlock(); + }else if(strncmp(event->topic, topicTempInt,27)==0){ + lvgl_port_lock(0); + lv_subject_copy_string(&tempIntSubj, event->data); + lvgl_port_unlock(); + }else if(strncmp(event->topic, topicHauteurCuveEvol,22)==0){ + int datas[4] ={}; + splitIt(event->data, event->data_len, datas); + ser1->y_points[0]=130-datas[0]; + ser1->y_points[1]=130-datas[1]; + ser1->y_points[2]=130-datas[2]; + ser1->y_points[3]=130-datas[3]; + lvgl_port_lock(0); + lv_chart_refresh(chart); + lvgl_port_unlock(); + //lv_subject_copy_string(&hauteurCuveEvolSubj, event->data); + }else if(strncmp(event->topic, topicHauteurCuve,18)==0){ + lvgl_port_lock(0); + char *datas=NULL; + datas = (char *) malloc( event->data_len * sizeof(char) ); + stpncpy(datas, event->data, event->data_len); + datas[event->data_len]='\0'; + lv_subject_copy_string(&hauteurCuveSubj, datas); + lvgl_port_unlock(); + }else{ + ESP_LOGE(TAG, "None match :-("); + } break; case MQTT_EVENT_ERROR: ESP_LOGI(TAG, "MQTT_EVENT_ERROR"); @@ -716,6 +798,10 @@ void app_main(void) } ESP_ERROR_CHECK(ret); + /* Show LVGL objects */ + lvgl_port_lock(0); + app_main_display(); + lvgl_port_unlock(); ESP_LOGI(TAG, "ESP_WIFI_MODE_STA"); wifi_init_sta(); mqtt_app_start(); diff --git a/sdkconfig b/sdkconfig index 18049bc..1c95757 100644 --- a/sdkconfig +++ b/sdkconfig @@ -1773,7 +1773,7 @@ CONFIG_LV_FONT_MONTSERRAT_26=y # CONFIG_LV_FONT_MONTSERRAT_34 is not set # CONFIG_LV_FONT_MONTSERRAT_36 is not set # CONFIG_LV_FONT_MONTSERRAT_38 is not set -# CONFIG_LV_FONT_MONTSERRAT_40 is not set +CONFIG_LV_FONT_MONTSERRAT_40=y # CONFIG_LV_FONT_MONTSERRAT_42 is not set # CONFIG_LV_FONT_MONTSERRAT_44 is not set # CONFIG_LV_FONT_MONTSERRAT_46 is not set