零. 声明

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

第一篇: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相关推荐

  1. 燃起来 ESP32移植LVGL最新版本8.2

    零. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:ESP-IDF基本介绍,主要会涉及模组,芯片,开发板的介绍,环境搭建,程序编译下载,启动流程等一些基本的操作,让你对 ...

  2. arduino tft 方向_ESP32在Arduino环境下玩转 LVGL,ESP32移植LVGL详细教程

    微信关注 "DLGG创客DIY"设为"星标",重磅干货,第一时间送达. ❝ 转载自慕容流年 https://me.csdn.net/qq_41868901 ❞ ...

  3. ESP32驱动LCD液晶屏选型、262K什么意思?SPI写LCD的GRAM时序、MCU液晶屏驱动IC的寄存器功能

    最近转战ESP32,ESP32-D0WDQ6 型号的GPIO只有那么20个左右,且还有几个GPIO只能做输入,非常捉襟见肘.所以如果要驱动LCD液晶屏,绝大多数都会选择SPI接口的MCU屏. 为了编写 ...

  4. 乐鑫ESP32移植LVGL 7.10

    零. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:ESP-IDF基本介绍,主要会涉及模组,芯片,开发板的介绍,环境搭建,程序编译下载,启动流程等一些基本的操作,让你对 ...

  5. STM32移植Littlevgl(LVGL)V8.0.2使用文件系统+BMP解码显示外部FLASH中图片

    说明:选择BMP解码图片的方式,是因为此方式不需要占用太多的RAM 一.主要参数及版本 MCU:STM32F103ZET6 LCD:2.8寸ILI9341,使用FSMC驱动 SPI FLASH:W25 ...

  6. 【RTT】移植:LVGL 8.0.2

      开发板:潘多拉开发板   系统版本:v4.0.3   LVGL版本:8.0.2   注:这篇文章就简单记录下编译成功,跑了一个 demo 的过程,至于是否完全移植成功,不确定哈,毕竟 LVGL 还 ...

  7. 安信可ESP32 LVGL_V8 最快移植攻略

    安信可ESP32 LVGL_V8 最快移植攻略 文章目录: 安信可ESP32 LVGL_V8 最快移植攻略 软件环境 硬件环境 ESP-S3-12K开发板介绍 开发板的参数 ESP32S3的SPI L ...

  8. linux(全志)初始环境到移植lvgl

    一. 格式化TF卡 1. linux命令行格式化 1.1 找到U盘位置(已挂载) sudo fdisk -l 如图,我的在/dev/sdb 1.2 格式化U盘 sudo mkfs -t vfat /d ...

  9. MCUXpresso开发NXP RT1060(3)——移植LVGL到NXP RT1060

    目录 开发环境 目录 一.开发环境 二.准备工作 三.移植步骤 1.修改lv_conf.h 2.显示功能移植 3.触摸功能移植 4.tick及timer 四.结果展示 五.参考资料 一.开发环境 1. ...

  10. 移植OpenHarmony 3.0到ARM单片机

    9月30日,OpenHarmony 3.0 LTS版本发布. 本文将介绍如何移植OpenHarmony 3.0到星空派开发板上. 1. 星空派开发板介绍 星空派(GD)开发板是由旗点科技推出的一款GD ...

最新文章

  1. Less 常用基础知识
  2. 操作系统 实验3【动态分区存储管理】
  3. 个人阅读 代码大全的阅读与提问
  4. 工具类集和_gblfy版本
  5. Intel Core Enhanced Core架构/微架构/流水线 (15) - 先进智能缓存
  6. java 反射 systemproperties,Android添加自己的系统属性(反射调用SystemProperties)
  7. python字符串转义表
  8. Go没有枚举类型(enums),用const常量的iota替代
  9. 软件设计方案说明书模板
  10. 支付人必读:一文彻底搞清楚银联和现代支付系统运行过程
  11. SMBUS和i2cBus,PMBus 区别
  12. linux全局启动tomcat,linux下启动tomcat服务
  13. 余额宝收益用计算机该怎么算,余额宝收益计算器怎么用
  14. 小程序在开发者工具、真机测试时好好的,体验版 页面空白无法通过审核
  15. 10分钟快速搭建多方视频会议系统
  16. csdn广告屏蔽方法
  17. 100道经典AI面试题帮你搞定算法offer!
  18. 万年历黄历星座查询v3.6.9引流吸粉 实用工具 流量变现小程序
  19. Spark血缘字段解析
  20. 可以测试成果的背单词软件,实测背单词最好的软件排名,选了4款最管用的单词软件送给你!...

热门文章

  1. 图片无损压缩软件哪个好用:试试完全免费的JPG-C 图片批量修整压缩减肥工具吧 | 最新jpg批量修整工具下载
  2. [原创]如何免费使用宝塔专业版
  3. Matlab~30个算法
  4. 小米球(Ngrok)实现内网穿透,让外网可以进行访问本地部署的 API
  5. 最适合人工智能的编程语言:JAVA人工智能程序编程
  6. pip可识别的requirements.txt的写法
  7. 蓝桥杯历届真题题目+解析+代码+答案(2013-2020)(JavaA、B、C组)(C++语言)(Python)
  8. CCNA培训视频教程下载
  9. windows 常用自由、开源、免费软件(不断更新)
  10. 求cosx计算公式 【问题描述】 已知cosx的近似计算公式如下: cosx = 1 - x2/2! + x4/4! - x6/6! + ... + (-1)nx2n/(2n)!