1. ESP32 IDF 的文件直接复制的话,清除构建后,再次编译会报错。主要是因为managed_components文件下安装的组件,需要删了再次安装就没事了。
2. 头文件下有红波浪线的问题:
3. 编译的时候一直报错 #include "esp_event.h"
即使屏蔽掉了,后面的头文件也报错。
原来是因为 CMakeLists.txt 的原因:
idf_component_register(SRCS ${srcs}
INCLUDE_DIRS ${include_dirs}
REQUIRES lvgl)
把 REQUIRES lvgl 删掉就行了。
4. 移植CST816T触摸屏时,出现下面的问题:
跳转到 esp_lcd_touch_new_i2c_cst816s 文件下,把ESP_RETURN_ON_FALSE(io, ESP_ERR_INVALID_ARG, TAG, "Invalid io"); 注释掉即可。
5.LVGL怎么动态显示数据,我使用的是GUI guider ,在generate文件下找到项目初始化的.c文件:
static void screen_2_event_handler (lv_event_t *e)
{
lv_event_code_t code = lv_event_get_code(e);
switch (code) {
case LV_EVENT_GESTURE:
{
lv_dir_t dir = lv_indev_get_gesture_dir(lv_indev_get_act());
switch(dir) {
case LV_DIR_BOTTOM:
{
lv_indev_wait_release(lv_indev_get_act());
ui_load_scr_animation(&guider_ui, &guider_ui.screen, guider_ui.screen_del, &guider_ui.screen_2_del, setup_scr_screen, LV_SCR_LOAD_ANIM_MOVE_BOTTOM, 200, 200, false, true);
lv_timer_pause(timer1); // 暂停定时器,否则会报错
break;
}
}
break;
}
default:
break;
}
}
void events_init_screen_2(lv_ui *ui)
{
lv_obj_add_event_cb(ui->screen_2, screen_2_event_handler, LV_EVENT_ALL, ui);
timer1 = lv_timer_create(updata_mainlable, 500, NULL); // 创建一个0.5秒(500毫秒)的定时器,绑定到回调函数 timer_callback
}
就在生成的代码里面加上两句就行:
timer1 = lv_timer_create(updata_mainlable, 500, NULL); //每隔0.5秒更换一次数据
lv_timer_pause(timer1); // 多界面切换一定要有,否则会一直重启
再回到对应界面的 setup_src_xxxx.c 文件下,添加回调函数,函数内容根据自己来改:
void updata_mainlable(lv_timer_t *timer){
lv_arc_set_value(guider_ui.screen_2_arc_1, adc_voltage_value);
}
下面是最初生成的代码,把这个地方的数据 “10” ,换成自己变量即可,同时 ui->screen_2_arc_1 改成 guider_ui.screen_2_arc_1。
lv_arc_set_value(ui->screen_2_arc_1, 10);
最后在gui_guider.h文件中声明一下创建的函数。
6.获取每日天气信息,出现以下错误:
E (14029) esp-tls-mbedtls: mbedtls_ssl_setup returned -0x7F00
E (14029) esp-tls: create_ssl_handle failed
E (14029) esp-tls: Failed to open new connection
E (14039) transport_base: Failed to open a new connection
E (14049) HTTP_CLIENT: Connection failed, sock < 0
E (14049) example: Error perform http request ESP_ERR_HTTP_CONNECT
首先使能debug功能:
显示下面两个问题:
mbedtls: ssl_tls.c:1393 alloc(16717 bytes) failed
inflateInit2 err! err=-4
decompress failed:-4
-
内存不足:
- 系统或进程可用内存不足。
- 有其他进程占用了大量内存。
因为我用的是ESP32 C3的模组,内存只有4MB。
xTaskCreate(get_dwather_task, "get_dwather_task", 8192, NULL, 5, NULL); // 一次性任务 获取每日天气信息
// xTaskCreate(get_rtweather_task, "get_rtweather_task", 8192, NULL, 5, NULL); // 一次性任务 获取实时天气信息
// xTaskCreate(get_airq_task, "get_airq_task", 8192, NULL, 5, NULL);
// 获取滑块的当前值
current_liangdu_Value = lv_slider_get_value(guider_ui.screen_2_slider_1);
// 获取拾色器的值
if (event == LV_EVENT_VALUE_CHANGED) {
lv_color_t current_color = lv_cpicker_get_color(obj);
printf("LV_EVENT_VALUE_CHANGED R(%d):G(%d):B(%d)\n", current_color.ch.red, current_color.ch.green, current_color.ch.blue);
}