乐鑫ESP32移植LVGL 7.10

news/2024/11/2 7:36:41/

 零. 声明


本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:

第一篇:ESP-IDF基本介绍,主要会涉及模组,芯片,开发板的介绍,环境搭建,程序编译下载,启动流程等一些基本的操作,让你对ESP-IDF开发有一个总体的认识,比我们后续学习打下基础!

第二篇:ESP32-IDF外设驱动介绍,主要会根据esp-idf现有的driver,提供各个外设的驱动,比如LED,OLED,SPI LCD,TOUCH,红外,Codec ic等等,在这一篇中,我们不仅仅来做外设驱动,还会对常用的外设总线做一个介绍,让大家知其然又知其所以然!

第三篇:目前比较火热的GUI LVGL介绍,主要会设计LVGL7.1,LVGL8的移植介绍,并且也会介绍各个组件,知道原理后,最后,我们会推出一款组态软件来构建我们的GUI,来提升我们的效率!

第四篇:ESP32-蓝牙,熟悉我的,应该都知道,我即使从事蓝牙协议栈的开发的,所以这个是我们独有的优势,在这一篇章,我们会提供不仅仅是蓝牙应用方法的知识,也会应用结合蓝牙底层协议栈的理论,让你彻底从上到下打通蓝牙任督二脉!

第五篇:Wi-Fi介绍,熟悉我的,应该也知道,我们也做过一款sdio wifi的驱动教程板子,所以在wifi这方面我们也是有独有的优势,在这一篇章,我们同样不仅仅提供Wi-Fi应用方面的知识,也会结合底层理论,让你对Wi-Fi有一个清晰的认知!

另外,我们的教程包括但是不局限于以上篇章,为了给你一个更好的导航,以下信息尤其重要,请详细查看!!

------------------------------------------------------------------------------------------------------------------------------------------

购买开发板(点击我)

文档目录(点击我)

Github代码仓库(点击我)

蓝牙交流扣扣群:539357317

微信公众号↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

​​​​

------------------------------------------------------------------------------------------------------------------------------------------

我们在这篇文章已经详细介绍了LVGL 8.2的移植,

燃起来 ESP32移植LVGL最新版本8.2_Wireless_Link的博客-CSDN博客

在这个章节我们来介绍下移植LVGL 7.10,我们为什么在移植了最新的LVGL版本后,还要花心思去移植一个比较旧的版本呢?原因:我们后续计划用"LVGL组态软件(也就是俗称的拖控件软件)"来生成代码,因为NXP出的最新的gui guider中的LVGL7版本是基于LVGL 7.10,所以我们就来移植这个版本啦,有了这个版本,地基在,我们用组态软件生成上层UI代码,直接copy过来用,那样多爽歪歪啊·!

NOTED:跟LVGL 8.2重复的我不做介绍,基本是一样哈·,我们直接介绍下差异部分

差异点有如下几个:

1.Git拉取的分支不同

2.没有error: 'LV_HOR_RES_MAX' undeclared 编译错误

3.lvgl代码中没有demo source code,所以也没有对应的demo menuconfig

4.app实现不同(因为没有demo,所以我们就自己编写一个简单的app)

OK,我们来介绍下以上几点(下文所说的小节步骤都是基于我们LVGL8.2的文章来说的,所以要结合起来一起看):

1.Git拉取的分支不同

第一小节,步骤5),我们拉取代码的分支命令如下:

git clone -b release/v7 https://gitee.com/my_lvgl/lvgl

2.没有error: 'LV_HOR_RES_MAX' undeclared 编译错误

没有第二小节的编译错误1,因为在menuconfig中有配置选项

3.lvgl代码中没有demo source code,所以也没有对应的demo menuconfig

我们不需要做第五小节

4.app实现不同(因为没有demo,所以我们就自己编写一个简单的app)

代码如下:

/* LVGL Example project** Basic project to test LVGL on ESP32 based projects.** This example code is in the Public Domain (or CC0 licensed, at your option.)** Unless required by applicable law or agreed to in writing, this* software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR* CONDITIONS OF ANY KIND, either express or implied.*/
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_freertos_hooks.h"
#include "freertos/semphr.h"
#include "esp_system.h"
#include "driver/gpio.h"/* Littlevgl specific */
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif#include "lvgl_helpers.h"#include "lvgl_widgets_test.h"/**********************      DEFINES*********************/
#define TAG "demo"
#define LV_TICK_PERIOD_MS 1/***********************  STATIC PROTOTYPES**********************/
static void lv_tick_task(void *arg);
static void guiTask(void *pvParameter);
static void create_demo_application(void);/***********************   APPLICATION MAIN**********************/
void app_main()
{/* If you want to use a task to create the graphic, you NEED to create a Pinned task* Otherwise there can be problem such as memory corruption and so on.* NOTE: When not using Wi-Fi nor Bluetooth you can pin the guiTask to core 0 */xTaskCreatePinnedToCore(guiTask, "gui", 4096 * 2, NULL, 0, NULL, 1);
}/* Creates a semaphore to handle concurrent call to lvgl stuff* If you wish to call *any* lvgl function from other threads/tasks* you should lock on the very same semaphore! */
SemaphoreHandle_t xGuiSemaphore;static void guiTask(void *pvParameter)
{(void)pvParameter;xGuiSemaphore = xSemaphoreCreateMutex();lv_init();/* Initialize SPI or I2C bus used by the drivers */lvgl_driver_init();lv_color_t *buf1 = heap_caps_malloc(DISP_BUF_SIZE * sizeof(lv_color_t), MALLOC_CAP_DMA);assert(buf1 != NULL);/* Use double buffered when not working with monochrome displays */
#ifndef CONFIG_LV_TFT_DISPLAY_MONOCHROMElv_color_t *buf2 = heap_caps_malloc(DISP_BUF_SIZE * sizeof(lv_color_t), MALLOC_CAP_DMA);assert(buf2 != NULL);
#elsestatic lv_color_t *buf2 = NULL;
#endifstatic lv_disp_buf_t disp_buf;uint32_t size_in_px = DISP_BUF_SIZE;#if defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_IL3820 || defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_JD79653A || defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_UC8151D || defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_SSD1306size_in_px *= 8;
#endif/* Initialize the working buffer depending on the selected display.* NOTE: buf2 == NULL when using monochrome displays. */lv_disp_buf_init(&disp_buf, buf1, buf2, size_in_px);lv_disp_drv_t disp_drv;lv_disp_drv_init(&disp_drv);disp_drv.flush_cb = disp_driver_flush;/* When using a monochrome display we need to register the callbacks:* - rounder_cb* - set_px_cb */
#ifdef CONFIG_LV_TFT_DISPLAY_MONOCHROMEdisp_drv.rounder_cb = disp_driver_rounder;disp_drv.set_px_cb = disp_driver_set_px;
#endifdisp_drv.buffer = &disp_buf;disp_drv.hor_res = LV_HOR_RES_MAX;disp_drv.ver_res = LV_VER_RES_MAX;lv_disp_drv_register(&disp_drv);/* Register an input device when enabled on the menuconfig */
#if CONFIG_LV_TOUCH_CONTROLLER != TOUCH_CONTROLLER_NONElv_indev_drv_t indev_drv;lv_indev_drv_init(&indev_drv);indev_drv.read_cb = touch_driver_read;indev_drv.type = LV_INDEV_TYPE_POINTER;lv_indev_drv_register(&indev_drv);
#endif/* Create and start a periodic timer interrupt to call lv_tick_inc */const esp_timer_create_args_t periodic_timer_args = {.callback = &lv_tick_task,.name = "periodic_gui",};esp_timer_handle_t periodic_timer;ESP_ERROR_CHECK(esp_timer_create(&periodic_timer_args, &periodic_timer));ESP_ERROR_CHECK(esp_timer_start_periodic(periodic_timer, LV_TICK_PERIOD_MS * 1000));/* Create the demo application */create_demo_application();while (1){/* Delay 1 tick (assumes FreeRTOS tick is 10ms */vTaskDelay(pdMS_TO_TICKS(10));/* Try to take the semaphore, call lvgl related function on success */if (pdTRUE == xSemaphoreTake(xGuiSemaphore, portMAX_DELAY)){lv_task_handler();xSemaphoreGive(xGuiSemaphore);}}/* A task should NEVER return */free(buf1);
#ifndef CONFIG_LV_TFT_DISPLAY_MONOCHROMEfree(buf2);
#endifvTaskDelete(NULL);
}static void create_demo_application(void)
{lvgl_widgets_test();
}static void lv_tick_task(void *arg)
{(void)arg;lv_tick_inc(LV_TICK_PERIOD_MS);
}

其中lvgl_widgets_test();是我们在另外一个专栏讲的代码,连接如下:

https://blog.csdn.net/xiaoxiaopengbo/category_10805173.html?spm=1001.2014.3001.5482


http://www.ppmy.cn/news/345218.html

相关文章

合宙ESP32-C3精简版完全食用指南

ESP32-C3 精简版食用指南 Luatos ESP32 LCD拓展板ESP32-C3硬件资源实拍图与引脚3. 开发指南使用注意事项 LCD拓展板LCDKEY Luatos ESP32 LCD拓展板 ESP32-C3 硬件资源 尺寸长宽 21mm*51mm1路SPI FLASH&#xff0c;板载4MB&#xff0c;支持最高 16MB (dio 模式)2路UART接口…

乐鑫 ESP32-C5 技术特性

乐鑫 ESP32-C5 是全球首款集成 2.4&5 GHz 双频 Wi-Fi 6 和 Bluetooth 5 (LE) 的 RISC-V SoC&#xff0c;专为需要高效无线传输的物联网应用设计。 乐鑫信息科技 (688018.SH) 推出全球首款集成 2.4&5 GHz 双频 Wi-Fi 6 和 Bluetooth 5 (LE) 的 RISC-V SoC ESP32-C5。ESP…

乐鑫ESP32-C3项目(9)- 上电启动流程的简要分析

参考资料&#xff1a; 技术规格书 技术参考书 调试openocd手册 应用程序的启动流程 - ESP32-C3 - — ESP-IDF 编程指南 latest 文档 一&#xff0c;芯片复位运行的流程 1&#xff0c;上电复位执行一级引导程序&#xff08;固化在芯片ROM&#xff0c;无法修改&#xff09; …

【极致通话降噪】高通QCC3071 三麦克风通话降噪方案

随着TWS&#xff08;True wireless stereo&#xff09;耳机市场的不断成长。用户对于产品体验的需求也从简单的快速链接&#xff0c;升级到更高的标准&#xff0c;譬如&#xff0c;截至今年市面上涌现了大量的以清晰通话为卖点的TWS耳机。 在日常生活中&#xff0c;噪声是影响…

ベルベット / 贝姐

目录 基本资料面板值&#xff08;无天冥加成&#xff09;天冥奖励 战斗宣言&#xff08;VC&#xff09;技能珠子附&#xff1a;噬魔状态说明 回到人物索引 基本资料 NS(4~5★)协奏3入队 (Ver 2.7.50)エンプレスクロウの史籍&#xff08;地精灵试炼报酬&#xff09; 天冥属性…

ESP32播放MP3音乐-无需SD卡-WM8978-ESP32解码MP3

ESP32播放MP3音乐&#xff08;无需SD卡和外置RAM&#xff09; 无需SD卡&#xff0c;FLASH大小4MB&#xff0c;非常适合用于智能家居的语音提示或者在线播放音乐。 一般来说&#xff0c;一个语音提示文件的MP3格式的大小约5KB&#xff0c;而未压缩的wav格式的大小则为60KB左右…

ESP32S3蓝牙学习系列---Beacon信标之Eddystone

Beacon技术和Eddystone Beacon是一种基于BLE的技术&#xff0c;以固定间隔广播发送固定格式的数据。信号强弱以RSSI相对强度来表示&#xff0c;遇到障碍物信号会很弱。 Beacon信标本质是一种蓝牙广播标准&#xff0c;该标准不是蓝牙技术联盟所制定的标准&#xff0c;它被称为“…

合宙ESP32C3上手使用

概述 经典款是有ch343 ttl 转usb 需要安装驱动 GPIO20/21 新款使用usb 直连不需要驱动 USB GPIO18/19 ESP32C3 是ESP-RISC-V CPU 是基于 RISC-V ISA 的 32 位内核&#xff0c;包括基本整数 (I)&#xff0c;乘法/除法 (M) 和压缩 (C) 标准扩展。ESP-RISC-V CPU 内核具有 4 级有序…