Skip to content

Commit 026a00a

Browse files
committed
feat(example): Add display visualisation to the sensor example
1 parent ed0272c commit 026a00a

File tree

2 files changed

+126
-2
lines changed

2 files changed

+126
-2
lines changed

examples/sensors/main/main.c

Lines changed: 126 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,17 @@ static const char *TAG = "example";
2323
static sensor_handle_t imu_sensor_handle = NULL;
2424
static sensor_handle_t humiture_sensor_handle = NULL;
2525

26-
void sensor_event_handler(void *handler_args, esp_event_base_t base, int32_t id, void *event_data)
26+
static lv_obj_t *acc_x_bar, *acc_y_bar, * acc_z_bar;
27+
static lv_obj_t *gyr_x_bar, *gyr_y_bar, * gyr_z_bar;
28+
static lv_style_t bar_style;
29+
30+
static lv_obj_t *chart = NULL;
31+
static lv_chart_series_t *temp_series = NULL;
32+
static lv_chart_series_t *humid_series = NULL;
33+
34+
static void chart_add_value(lv_chart_series_t *series, const int32_t value);
35+
36+
static void sensor_event_handler(void *handler_args, esp_event_base_t base, int32_t id, void *event_data)
2737
{
2838
sensor_data_t *sensor_data = (sensor_data_t *)event_data;
2939

@@ -47,6 +57,7 @@ void sensor_event_handler(void *handler_args, esp_event_base_t base, int32_t id,
4757
sensor_data->sensor_name,
4858
sensor_data->sensor_addr,
4959
sensor_data->humidity);
60+
chart_add_value(humid_series, (int32_t)(sensor_data->humidity * 10.0f));
5061
break;
5162
case SENSOR_TEMP_DATA_READY:
5263
ESP_LOGI(TAG, "Timestamp = %llu - %s_0x%x TEMP_DATA_READY - "
@@ -55,6 +66,7 @@ void sensor_event_handler(void *handler_args, esp_event_base_t base, int32_t id,
5566
sensor_data->sensor_name,
5667
sensor_data->sensor_addr,
5768
sensor_data->temperature);
69+
chart_add_value(temp_series, (int32_t)(sensor_data->temperature * 10.0f));
5870
break;
5971
case SENSOR_ACCE_DATA_READY:
6072
ESP_LOGI(TAG, "Timestamp = %llu - %s_0x%x ACCE_DATA_READY - "
@@ -63,6 +75,9 @@ void sensor_event_handler(void *handler_args, esp_event_base_t base, int32_t id,
6375
sensor_data->sensor_name,
6476
sensor_data->sensor_addr,
6577
sensor_data->acce.x, sensor_data->acce.y, sensor_data->acce.z);
78+
lv_bar_set_value(acc_x_bar, (int32_t)(sensor_data->acce.x * 10.0f), LV_ANIM_OFF);
79+
lv_bar_set_value(acc_y_bar, (int32_t)(sensor_data->acce.y * 10.0f), LV_ANIM_OFF);
80+
lv_bar_set_value(acc_z_bar, (int32_t)(sensor_data->acce.z * 10.0f), LV_ANIM_OFF);
6681
break;
6782
case SENSOR_GYRO_DATA_READY:
6883
ESP_LOGI(TAG, "Timestamp = %llu - %s_0x%x GYRO_DATA_READY - "
@@ -71,15 +86,125 @@ void sensor_event_handler(void *handler_args, esp_event_base_t base, int32_t id,
7186
sensor_data->sensor_name,
7287
sensor_data->sensor_addr,
7388
sensor_data->gyro.x, sensor_data->gyro.y, sensor_data->gyro.z);
89+
lv_bar_set_value(gyr_x_bar, (int32_t)(sensor_data->gyro.x * 10.0f), LV_ANIM_OFF);
90+
lv_bar_set_value(gyr_y_bar, (int32_t)(sensor_data->gyro.y * 10.0f), LV_ANIM_OFF);
91+
lv_bar_set_value(gyr_z_bar, (int32_t)(sensor_data->gyro.z * 10.0f), LV_ANIM_OFF);
7492
break;
7593
default:
7694
ESP_LOGI(TAG, "Timestamp = %" PRIi64 " - event id = %" PRIi32, sensor_data->timestamp, id);
7795
break;
7896
}
7997
}
8098

99+
static void chart_add_value(lv_chart_series_t *series, const int32_t value)
100+
{
101+
assert(chart != NULL);
102+
assert(series != NULL);
103+
lv_chart_set_next_value(chart, series, value);
104+
uint32_t p = lv_chart_get_point_count(chart);
105+
uint32_t s = lv_chart_get_x_start_point(chart, series);
106+
int32_t *a = lv_chart_get_series_y_array(chart, series);
107+
a[(s + 1) % p] = LV_CHART_POINT_NONE;
108+
a[(s + 2) % p] = LV_CHART_POINT_NONE;
109+
lv_chart_refresh(chart);
110+
}
111+
112+
static void chart_init(lv_obj_t *scr)
113+
{
114+
chart = lv_chart_create(scr);
115+
lv_chart_set_update_mode(chart, LV_CHART_UPDATE_MODE_CIRCULAR);
116+
lv_obj_set_style_size(chart, 0, 0, LV_PART_INDICATOR);
117+
lv_obj_set_size(chart, BSP_LCD_H_RES, (BSP_LCD_V_RES * 2) / 5);
118+
lv_obj_align(chart, LV_ALIGN_TOP_MID, 0, BSP_LCD_V_RES / 10);
119+
120+
lv_chart_set_point_count(chart, 250);
121+
lv_chart_set_axis_range(chart, LV_CHART_AXIS_PRIMARY_Y, 100, 400);
122+
lv_chart_set_axis_range(chart, LV_CHART_AXIS_SECONDARY_Y, 0, 1000);
123+
lv_chart_set_div_line_count(chart, 5, 0);
124+
125+
temp_series = lv_chart_add_series(chart, lv_palette_main(LV_PALETTE_RED), LV_CHART_AXIS_PRIMARY_Y);
126+
humid_series = lv_chart_add_series(chart, lv_palette_main(LV_PALETTE_BLUE), LV_CHART_AXIS_SECONDARY_Y);
127+
128+
lv_obj_t *chart_label = lv_label_create(scr);
129+
lv_label_set_recolor(chart_label, true);
130+
lv_label_set_text_static(chart_label, "#ff0000 Temperature#");
131+
lv_obj_align(chart_label, LV_ALIGN_TOP_LEFT, BSP_LCD_H_RES / 8, BSP_LCD_V_RES / 32);
132+
chart_label = lv_label_create(scr);
133+
lv_label_set_recolor(chart_label, true);
134+
lv_label_set_text_static(chart_label, "#0000ff Humidity#");
135+
lv_obj_align(chart_label, LV_ALIGN_TOP_RIGHT, -BSP_LCD_H_RES / 8, BSP_LCD_V_RES / 32);
136+
}
137+
138+
static lv_obj_t *imu_bars_new(lv_obj_t *scr, const lv_style_t *style, const uint32_t range)
139+
{
140+
lv_obj_t *bar = lv_bar_create(scr);
141+
lv_bar_set_range(bar, -range, range);
142+
lv_bar_set_mode(bar, LV_BAR_MODE_SYMMETRICAL);
143+
lv_obj_add_style(bar, style, 0);
144+
return bar;
145+
}
146+
147+
static void imu_create_axis_label(lv_obj_t *bar, const char *text)
148+
{
149+
lv_obj_t *bar_label;
150+
bar_label = lv_label_create(lv_obj_get_screen(bar));
151+
lv_label_set_text_static(bar_label, text);
152+
lv_obj_align_to(bar_label, bar, LV_ALIGN_OUT_LEFT_MID, -BSP_LCD_H_RES / 32, 0);
153+
}
154+
155+
static void imu_bars_init(lv_obj_t *scr)
156+
{
157+
lv_obj_t *static_label;
158+
159+
lv_style_init(&bar_style);
160+
lv_style_set_width(&bar_style, BSP_LCD_H_RES / 3);
161+
lv_style_set_height(&bar_style, BSP_LCD_V_RES / 16);
162+
163+
acc_x_bar = imu_bars_new(scr, &bar_style, 15);
164+
acc_y_bar = imu_bars_new(scr, &bar_style, 15);
165+
acc_z_bar = imu_bars_new(scr, &bar_style, 15);
166+
lv_obj_align(acc_z_bar, LV_ALIGN_BOTTOM_LEFT, BSP_LCD_H_RES / 8, -BSP_LCD_V_RES / 16);
167+
lv_obj_align_to(acc_y_bar, acc_z_bar, LV_ALIGN_OUT_TOP_MID, 0, -BSP_LCD_V_RES / 16);
168+
lv_obj_align_to(acc_x_bar, acc_y_bar, LV_ALIGN_OUT_TOP_MID, 0, -BSP_LCD_V_RES / 16);
169+
170+
static_label = lv_label_create(scr);
171+
lv_label_set_text_static(static_label, "Accelerometer");
172+
lv_obj_align_to(static_label, acc_x_bar, LV_ALIGN_OUT_TOP_MID, 0, -BSP_LCD_V_RES / 32);
173+
imu_create_axis_label(acc_x_bar, "X");
174+
imu_create_axis_label(acc_y_bar, "Y");
175+
imu_create_axis_label(acc_z_bar, "Z");
176+
177+
gyr_x_bar = imu_bars_new(scr, &bar_style, 5000);
178+
gyr_y_bar = imu_bars_new(scr, &bar_style, 5000);
179+
gyr_z_bar = imu_bars_new(scr, &bar_style, 5000);
180+
lv_obj_align(gyr_z_bar, LV_ALIGN_BOTTOM_RIGHT, -BSP_LCD_H_RES / 16, -BSP_LCD_V_RES / 16);
181+
lv_obj_align_to(gyr_y_bar, gyr_z_bar, LV_ALIGN_OUT_TOP_MID, 0, -BSP_LCD_V_RES / 16);
182+
lv_obj_align_to(gyr_x_bar, gyr_y_bar, LV_ALIGN_OUT_TOP_MID, 0, -BSP_LCD_V_RES / 16);
183+
184+
static_label = lv_label_create(scr);
185+
lv_label_set_text_static(static_label, "Gyroscope");
186+
lv_obj_align_to(static_label, gyr_x_bar, LV_ALIGN_OUT_TOP_MID, 0, -BSP_LCD_V_RES / 32);
187+
imu_create_axis_label(gyr_x_bar, "X");
188+
imu_create_axis_label(gyr_y_bar, "Y");
189+
imu_create_axis_label(gyr_z_bar, "Z");
190+
}
191+
81192
void app_main(void)
82193
{
194+
#if BSP_CAPS_DISPLAY
195+
bsp_display_start();
196+
bsp_display_lock(0);
197+
lv_obj_t *main_scr = lv_screen_active();
198+
#if BSP_CAPS_HUMITURE
199+
chart_init(main_scr);
200+
#endif
201+
#if BSP_CAPS_IMU
202+
imu_bars_init(main_scr);
203+
#endif
204+
bsp_display_unlock();
205+
bsp_display_backlight_on();
206+
#endif
207+
83208
#if BSP_CAPS_IMU
84209
bsp_sensor_config_t imu_config = {
85210
.type = IMU_ID,

examples/sensors/sdkconfig.bsp.esp-box-3

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ CONFIG_LV_USE_CLIB_STRING=y
2020
# Performance monitor
2121
CONFIG_LV_USE_OBSERVER=y
2222
CONFIG_LV_USE_SYSMON=y
23-
CONFIG_LV_USE_PERF_MONITOR=y
2423

2524
## LVGL8 - uncomment, when using LVGL8 ##
2625
# CONFIG_LV_USE_PERF_MONITOR=y

0 commit comments

Comments
 (0)