ESP32 SPI LCD ili9488移植LVGL 8.0
零. 声明
本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:
第一篇: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 8.0,我们为什么在移植了最新的LVGL版本后,还要花心思去移植一个比较旧的版本呢?原因:我们后续计划用"LVGL组态软件(也就是俗称的拖控件软件)"来生成代码,因为NXP出的最新的gui guider中的LVGL8版本是基于LVGL 8.0.2,所以我们就来移植这个版本啦,有了这个版本,地基在,我们用组态软件生成上层UI代码,直接copy过来用,那样多爽歪歪啊·!
NOTED:跟LVGL 8.2重复的我不做介绍,基本是一样哈·,我们直接介绍下差异部分
差异点有如下几个:
1.Git拉取的分支不同
2.lvgl代码中没有demo source code,所以也没有对应的demo menuconfig
3.app实现不同(因为没有demo,所以我们就自己编写一个简单的app)
OK,我们来介绍下以上几点(下文所说的小节步骤都是基于我们LVGL8.2的文章来说的,所以要结合起来一起看):
1.Git拉取的分支不同
第一小节,步骤5),我们拉取代码的分支命令如下:
git clone -b release/v8.0 https://gitee.com/my_lvgl/lvgl
2.lvgl代码中没有demo source code,所以也没有对应的demo menuconfig
我们不需要做第五小节
3.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"/********************** 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_draw_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_draw_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.draw_buf = &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)
{lv_obj_t* btn = lv_btn_create(lv_scr_act());if (btn != NULL){lv_obj_set_size(btn, 100, 50);lv_obj_set_pos(btn, 10, 10);lv_obj_t* label = lv_label_create(btn);if (label != NULL){lv_label_set_text(label, "Click me!");lv_obj_center(label);}}lv_obj_t * label1 = lv_label_create(lv_scr_act());lv_label_set_long_mode(label1, LV_LABEL_LONG_WRAP); /*Break the long lines*/lv_label_set_recolor(label1, true); /*Enable re-coloring by commands in the text*/lv_label_set_text(label1, "#0000ff Re-color# #ff00ff words# #ff0000 of a# label, align the lines to the center ""and wrap long text automatically.");lv_obj_set_width(label1, 150); /*Set smaller width to make the lines wrap*/lv_obj_set_style_text_align(label1, LV_TEXT_ALIGN_CENTER, 0);lv_obj_align(label1, LV_ALIGN_CENTER, 0, -40);lv_obj_t * label2 = lv_label_create(lv_scr_act());lv_label_set_long_mode(label2, LV_LABEL_LONG_SCROLL_CIRCULAR); /*Circular scroll*/lv_obj_set_width(label2, 150);lv_label_set_text(label2, "This is wireless link lvgl 8.0 demo ");lv_obj_align(label2, LV_ALIGN_CENTER, 0, 40);
}static void lv_tick_task(void *arg)
{(void)arg;lv_tick_inc(LV_TICK_PERIOD_MS);
}
运行效果如下:
ESP32 SPI LCD ili9488移植LVGL 8.0相关推荐
- 燃起来 ESP32移植LVGL最新版本8.2
零. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:ESP-IDF基本介绍,主要会涉及模组,芯片,开发板的介绍,环境搭建,程序编译下载,启动流程等一些基本的操作,让你对 ...
- arduino tft 方向_ESP32在Arduino环境下玩转 LVGL,ESP32移植LVGL详细教程
微信关注 "DLGG创客DIY"设为"星标",重磅干货,第一时间送达. ❝ 转载自慕容流年 https://me.csdn.net/qq_41868901 ❞ ...
- ESP32驱动LCD液晶屏选型、262K什么意思?SPI写LCD的GRAM时序、MCU液晶屏驱动IC的寄存器功能
最近转战ESP32,ESP32-D0WDQ6 型号的GPIO只有那么20个左右,且还有几个GPIO只能做输入,非常捉襟见肘.所以如果要驱动LCD液晶屏,绝大多数都会选择SPI接口的MCU屏. 为了编写 ...
- 乐鑫ESP32移植LVGL 7.10
零. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:ESP-IDF基本介绍,主要会涉及模组,芯片,开发板的介绍,环境搭建,程序编译下载,启动流程等一些基本的操作,让你对 ...
- STM32移植Littlevgl(LVGL)V8.0.2使用文件系统+BMP解码显示外部FLASH中图片
说明:选择BMP解码图片的方式,是因为此方式不需要占用太多的RAM 一.主要参数及版本 MCU:STM32F103ZET6 LCD:2.8寸ILI9341,使用FSMC驱动 SPI FLASH:W25 ...
- 【RTT】移植:LVGL 8.0.2
开发板:潘多拉开发板 系统版本:v4.0.3 LVGL版本:8.0.2 注:这篇文章就简单记录下编译成功,跑了一个 demo 的过程,至于是否完全移植成功,不确定哈,毕竟 LVGL 还 ...
- 安信可ESP32 LVGL_V8 最快移植攻略
安信可ESP32 LVGL_V8 最快移植攻略 文章目录: 安信可ESP32 LVGL_V8 最快移植攻略 软件环境 硬件环境 ESP-S3-12K开发板介绍 开发板的参数 ESP32S3的SPI L ...
- linux(全志)初始环境到移植lvgl
一. 格式化TF卡 1. linux命令行格式化 1.1 找到U盘位置(已挂载) sudo fdisk -l 如图,我的在/dev/sdb 1.2 格式化U盘 sudo mkfs -t vfat /d ...
- MCUXpresso开发NXP RT1060(3)——移植LVGL到NXP RT1060
目录 开发环境 目录 一.开发环境 二.准备工作 三.移植步骤 1.修改lv_conf.h 2.显示功能移植 3.触摸功能移植 4.tick及timer 四.结果展示 五.参考资料 一.开发环境 1. ...
- 移植OpenHarmony 3.0到ARM单片机
9月30日,OpenHarmony 3.0 LTS版本发布. 本文将介绍如何移植OpenHarmony 3.0到星空派开发板上. 1. 星空派开发板介绍 星空派(GD)开发板是由旗点科技推出的一款GD ...
最新文章
- Less 常用基础知识
- 操作系统 实验3【动态分区存储管理】
- 个人阅读 代码大全的阅读与提问
- 工具类集和_gblfy版本
- Intel Core Enhanced Core架构/微架构/流水线 (15) - 先进智能缓存
- java 反射 systemproperties,Android添加自己的系统属性(反射调用SystemProperties)
- python字符串转义表
- Go没有枚举类型(enums),用const常量的iota替代
- 软件设计方案说明书模板
- 支付人必读:一文彻底搞清楚银联和现代支付系统运行过程
- SMBUS和i2cBus,PMBus 区别
- linux全局启动tomcat,linux下启动tomcat服务
- 余额宝收益用计算机该怎么算,余额宝收益计算器怎么用
- 小程序在开发者工具、真机测试时好好的,体验版 页面空白无法通过审核
- 10分钟快速搭建多方视频会议系统
- csdn广告屏蔽方法
- 100道经典AI面试题帮你搞定算法offer!
- 万年历黄历星座查询v3.6.9引流吸粉 实用工具 流量变现小程序
- Spark血缘字段解析
- 可以测试成果的背单词软件,实测背单词最好的软件排名,选了4款最管用的单词软件送给你!...
热门文章
- 图片无损压缩软件哪个好用:试试完全免费的JPG-C 图片批量修整压缩减肥工具吧 | 最新jpg批量修整工具下载
- [原创]如何免费使用宝塔专业版
- Matlab~30个算法
- 小米球(Ngrok)实现内网穿透,让外网可以进行访问本地部署的 API
- 最适合人工智能的编程语言:JAVA人工智能程序编程
- pip可识别的requirements.txt的写法
- 蓝桥杯历届真题题目+解析+代码+答案(2013-2020)(JavaA、B、C组)(C++语言)(Python)
- CCNA培训视频教程下载
- windows 常用自由、开源、免费软件(不断更新)
- 求cosx计算公式 【问题描述】 已知cosx的近似计算公式如下: cosx = 1 - x2/2! + x4/4! - x6/6! + ... + (-1)nx2n/(2n)!