diff --git a/thermo_sensor/main/thermo_sensor.c b/thermo_sensor/main/thermo_sensor.c index 3de6729..5a14e3d 100644 --- a/thermo_sensor/main/thermo_sensor.c +++ b/thermo_sensor/main/thermo_sensor.c @@ -23,10 +23,6 @@ static lv_display_t *sh_display = NULL; static lv_obj_t *label = NULL; bmp280_t dev_bmp_280; -static void lvgl_tick_cb(void *arg) { - lv_tick_inc(10); -} - void lvgl_task(void *pvParameters) { while (1) { lv_timer_handler(); @@ -42,7 +38,7 @@ void sensor_task(void *pvParameters) { // Najpierw OLED, potem (blokujący) HTTP — żeby ekran // odświeżył się nawet gdy serwer nie odpowiada. char buf[256]; - snprintf(buf, sizeof(buf), "Temp: %.2f C\nHumid: %.2f %%\nPress: %.2f hPa", + snprintf(buf, sizeof(buf), "Temp: %.1f C\nHumid: %.1f %%\nPress: %.1f hPa", CURR_READOUT.temperature, CURR_READOUT.humidity, CURR_READOUT.pressure / 100.); @@ -81,24 +77,14 @@ void app_main() httpd_register_uri_handler(server, &ygg_press_uri); httpd_register_uri_handler(server, &ygg_hum_uri); - ESP_ERROR_CHECK(i2cdev_init()); - sh_display = ygg_sh1106_init(); - // LVGL potrzebuje regularnego ticka, inaczej redraw nigdy się nie wykona - // (to był powód, dla którego wisiało "FIRST"). - const esp_timer_create_args_t lvgl_tick_args = { - .callback = lvgl_tick_cb, - .name = "lvgl_tick", - }; - esp_timer_handle_t lvgl_tick_handle = NULL; - ESP_ERROR_CHECK(esp_timer_create(&lvgl_tick_args, &lvgl_tick_handle)); - ESP_ERROR_CHECK(esp_timer_start_periodic(lvgl_tick_handle, 10 * 1000)); lv_obj_t *scr = lv_display_get_screen_active(sh_display); label = lv_label_create(scr); - ygg_set_display_label(sh_display, label, "FIRST"); + ygg_set_display_label(sh_display, label, "PLEASE WAIT..."); ygg_bmp280_init(&dev_bmp_280); + xTaskCreatePinnedToCore(lvgl_task, "lvgl", 4096, NULL, 4, NULL, APP_CPU_NUM); xTaskCreatePinnedToCore(sensor_task, "bmp280_test", 8192, NULL, 5, NULL, APP_CPU_NUM); } diff --git a/thermo_sensor/main/ygg_bmp280.c b/thermo_sensor/main/ygg_bmp280.c index b1353f9..fa37928 100644 --- a/thermo_sensor/main/ygg_bmp280.c +++ b/thermo_sensor/main/ygg_bmp280.c @@ -5,6 +5,7 @@ #include "ygg_state.h" void ygg_bmp280_init(bmp280_t *dev) { + ESP_ERROR_CHECK(i2cdev_init()); bmp280_params_t params; bmp280_init_default_params(¶ms); memset(dev, 0, sizeof(bmp280_t)); diff --git a/thermo_sensor/main/ygg_sh1106.c b/thermo_sensor/main/ygg_sh1106.c index d101c77..f5fcb30 100644 --- a/thermo_sensor/main/ygg_sh1106.c +++ b/thermo_sensor/main/ygg_sh1106.c @@ -1,11 +1,10 @@ +#include #include "ygg_sh1106.h" #include "lvgl.h" #include "i2cdev.h" -#include "esp_log.h" #include "esp_lcd_io_i2c.h" #include "esp_lcd_panel_ops.h" #include "esp_timer.h" -#include "esp_lcd_panel_io.h" #include "esp_lcd_panel_sh1106.h" #define I2C_HOST I2C_NUM_0 @@ -57,8 +56,22 @@ static void example_lvgl_flush_cb(lv_display_t *disp, const lv_area_t *area, uin lv_display_flush_ready(disp); } +static void lvgl_tick_cb(void *arg) { + lv_tick_inc(10); +} + +void ygg_init_tick_cb() { + const esp_timer_create_args_t lvgl_tick_args = { + .callback = lvgl_tick_cb, + .name = "lvgl_tick", + }; + esp_timer_handle_t lvgl_tick_handle = NULL; + ESP_ERROR_CHECK(esp_timer_create(&lvgl_tick_args, &lvgl_tick_handle)); + ESP_ERROR_CHECK(esp_timer_start_periodic(lvgl_tick_handle, 10 * 1000)); +} + lv_display_t* ygg_sh1106_init() { - //ESP_ERROR_CHECK(i2cdev_init()); + ESP_ERROR_CHECK(i2cdev_init()); static i2c_dev_t oled_i2c_dev; memset(&oled_i2c_dev, 0, sizeof(oled_i2c_dev)); @@ -130,7 +143,7 @@ lv_display_t* ygg_sh1106_init() { lv_display_set_buffers(display, buf, NULL, draw_buffer_sz, LV_DISPLAY_RENDER_MODE_FULL); lv_display_set_flush_cb(display, example_lvgl_flush_cb); - lv_obj_t *scr = lv_display_get_screen_active(display); + ygg_init_tick_cb(); return display; }