仔细研究了下这个GUI,确实比较容易上手,代码易懂,而且自绘的控件都还比较美观。本来打算用rtt+lvgl来做一个demo的,奈何文件系统这块一直不成功,于是就用了freeRTOS。这次我突然想到一个工具,对,就是cubemx,这个真的好用。就用鼠标勾选几个配置,然后就能生成一个工程文件,编译后就能直接运行。大家可以尝试下

littlevgl里的控件大都自绘,非贴图,算是目前见到的自绘控件里比较漂亮的。

从想要做这个demo,到做到现在这个效果,前前后后花了我1个多月,自己去找素材,想着做哪些功能,然后怎么设计界面,学习这个GUI,学习它的模拟器使用,开发环境的配置,相关工具的使用,耗了不少心血,最终还有些效果未实现。做GUI是真的难。
     下面就来介绍下这个demo:

1、开机首页,做了6个模块,按钮使用的是imgbtn控件,这个控件是在5.1后的版本加的,按钮未按下需要贴一张图片,按钮按下后还需贴一张图片,由于我未贴图片,所以按钮按下后会显示NO DATA。

2、相册应用。也是采用的imgbtn控件,对网上找到的图片做了一些裁剪,做了这样一个设计,自我感觉挺好看。三个相册,天行九歌,天涯明月刀OL,LOL,只做了天行九歌的,找了天行九歌里所有美女的图片。这个相册应用有很大的bug,当切换两三张图片后,就会死机,我想可能是切图时没有释放内存或者文件没有关闭导致,因为我使用了文件系统。这个还需要跟作者沟通反馈。做了个小动效,标题会从photos那个位置滑到返回键那里。

 

3、音乐播放器。定制了很多控件样式,也遇到了一个坑,就是控件对齐的时候,如果先是设置控件对齐,再设置控件的大小,那么控件对齐将会跟你想要的效果不一样。解决方法有2个,先设置大小,再设置对齐。歌曲列表控件做了半透明,飞入的效果。但遗憾的是未能实现歌词的效果,GUI库里没这个控件,得自己开发了,有兴趣的小伙伴可以开发一下。

4、灯光控制。这个GUI有个有意思的控件,就是LED控件,可以绘制一个圆形的led,然后打开这个led和关闭这个led分别有各自的效果,所以就做了这个demo,刚好来控制板子上的RGB灯。下图一是关灯的效果,二是开灯的效果,颜色值都是随便取的。图三是RGB灯的效果。

5、设置界面。这个应用做了很多事,一一细看。这里的图标都是随便选的GUI内置的,可以自己根据需求做合适的图标字体放上去。lvgl的官网有介绍如何添加自己的图标字体到工程里。https://docs.littlevgl.com/en/html/overview/font.html 。左侧导航栏可以按住上下滑动,做了一个上拉到底和下拉到顶的特效。

5.1、开发板状态。这里做了4个板块,SD卡存储空间,flash存储空间,内存使用,cpu使用。展示了很多控件,cont,bar,img,arc,chart等等。当点击sdcard板块时,会弹出新的对话框,展示sd卡里的内容。这里我只做了UI效果,并未做文件系统读取的部分,需要实际使用的小伙伴可以把这部分添上。也做了动态刷新cpu使用率的效果,但是代码部分被我注释了,小伙伴们可自己取消注释。

5.2、常规设置。这里做了几个功能的设置,分别是音量,呼吸灯开关,呼吸灯频率,屏幕亮度,语言,蜂鸣器。都只做了UI,没有跟实际硬件交互,小伙伴可自行加上这部分。本来是想做个汉化的,用它的字体生成工具生成了一个bin文件的字体,但是却未在GUI里找到解析bin文件字体的代码,所以就作罢。因为我做的是个完整的汉字字库,所以项目里塞不下,只能做成bin文件放在sd卡。解决的方法有2个,可以只做常用的那2000多个汉字,用它那个工具转换成C文件做到工程里;另外一种就是自己做FreeType字体的解码,参考网上的例程,比如挖坑网里有人做了,这样就不用再转化字体了。

5.3,5.4,未做
           5.5、关于开发板。介绍了开发板的配置和本项目使用的一些资源。

5.6、关闭应用

6、时间设置。文字部分其实是个按钮,点击文字部分会弹出相应的对话框。时间文字的字体是用字体转换工具生成的60号字体,这里有点需要注意的是,转换字体时一定要加上 --no-compress  这个参数,否则文字将不会显示。设置对话框使用了roller控件。

7、天气预报。重点来了,这个其实只是一张贴图!!!本来想做一个网络应用的,但是不知道做啥了。

到此就讲完了。本来想把这个demo做完的,因为接下来还有别的事要做,就做到这个样子吧。接下来讲讲lvgl的知识点和坑。
     1、lv_win_clean,该函数清除的是窗口标题栏上的所有控件,包括标题和关闭按钮之类,我一直以为是清除窗口里的内容,直到我泪流满面。到现在我还没明白清除标题栏上的这些控件有什么用,因为一般标题栏上的这些控件都是不需要变动的。我需要的是点击了窗口里的某个控件,然后清除窗口里的内容,创建新的内容,比如显示sd卡里的文件列表时,点击其中一个文件夹,然后显示它里面的文件。
     2、style必须以static的形式声明
     3、控件没有ID,名字,当你在其他窗口获得上一个窗口的某个子控件的时候,需要把这个子控件声明成全局变量。
     4、tabview如果设置成滚动条在侧边,那么它的内容区域会出现大小错误
     5、做相册应用时,当使用文件系统切换上一张和下一张照片时,会出现bug,可能是内存没释放或者没有关闭文件导致的。使用的函数是lv_img_set_src(img, name);
     6、字体工具可以将字体生成bin文件,但如何调用这个bin文件暂未找到。
     7、图片旋转依赖画布,使用不方便。
     8、如何获得屏幕的触摸坐标?从lvgl的论坛上找到了答案。

[C] 纯文本查看 复制代码

?

代码清单

1

2

3

4

5

6

7

void event_handler(lv_obj_t * obj, lv_event_t event)

{

    if(event == LV_EVENT_PRESSING) {

        lv_indev_t * indev = lv_indev_get_act();

        printf("x:%d, y:%d\n", indev->proc.types.pointer.vect.x, indev->proc.types.pointer.vect.y);

    }

}

本来我是想做一个“画板”的app的,但是一直不知道怎么获取屏幕坐标,后来在论坛上看到有人问这个,刚好作者也给出了解答,于是我又准备做这个app。
      但是新的坑又来了,lvgl不支持动态画线,line控件的两个坐标值必须是静态的常量。卒!

这个demo算是基于野火挑战者开发板也就是stm32f429 v1版,但是由于使用了大量的图片,而且图片都是放在SD卡的原因,再加上429不适合刷图,所以在开发板上跑的不太流畅。其实这个gui本身还是很流畅的,尤其是我给它加了DMA2D以后。文件系统用的fatfs,作者已经做好了相应的接口,只需要移植好fatfs,然后注册一个文件系统就行了。字体和图片是用的离线工具转换的,6.0版的工具需要安装PHP环境,按照lvgl在github上的教程来安装,感觉linux比windows要好装很多,需要花点时间。

这里放一段使用模拟器运行的效果视频:https://www.bilibili.com/video/av67166877/   也是我B站第一个视频。
     最后声明,本项目无任何商业行为,仅供学习,图片素材全来源于网络,如有侵权,请联系删除。

freeRTOS+littlevgl的综合demo相关推荐

  1. WPF---数据绑定之ValidationRule数据校验综合Demo(七)

     一.概述 我们利用ValidationRule以及ErrorTemplate来制作一个简单的表单验证. 二.Demo 核心思想:我们在ValidationRule中的Validate函数中进行验证, ...

  2. The FreeRTOS Distribution(介绍、移植、类型定义)

    1 Understand the FreeRTOS Distribution 1.1 Definition :FreeRTOS Port FreeRTOS目前可以在20种不同的编译器构建,并且可以在3 ...

  3. 【RW007系列综合实战1】STM32+RW007实现BLE透传功能

    本期文章将分为5篇连载,前2篇将围绕模块功能详解展开,其后3篇将为大家讲解基于RW007相关DEMO的实现,文章目录如下: 今天我们将使用STM32F411-NUCLEO通过 RW007 BLE 功能 ...

  4. STM32F4基础工程移植FreeRTOS

    本篇目标:基于上一篇的基础工程(stm32f4_first_demo)上,移植freertos,建立移植工程(stm32f4_freertos). 资料准备: Freertos源文件 最后工程:项目工 ...

  5. 全网最全最细 FreeRTOS 手册详解——1-The FreeRTOS Distribution

    FreeRTOS :Real Time Engineers Ltd. <A_Hands-On_Tutorial_Guide> 作者:Richard Barry 本专栏是对 FreeRTOS ...

  6. FreeRTOS模拟器配置指南

    FreeRTOS模拟器 一. 下载源码 点击进入Free RTos的下载界面 下载完的目录结构应该是这样的. . ├── FreeRTOS 源码 │ ├── Demo 官方示例代码 │ ├── His ...

  7. 基于S32K144 移植 FreeRTOS 10.1.1

    转自:https://www.jianshu.com/p/d4c53f63c686 内容目录 一.FreeRTOS 源码的获取 二.移植 FreeRTOS 参考文献 一.FreeRTOS 源码的获取 ...

  8. Cortex M33处理器下移植FreeRTOS V10.2.0的操作记录

    1.前言 本文记录了本人使用Keil V5.28向Cortex M33处理器下的一款MCU进行FreeRTOS V10.2.0的移植操作,过程中描述如存在不当或错误之处欢迎指正. 2.FreeRTOS ...

  9. [FreeRTOS] configTICK_RATE_HZ

    configTICK_RATE_HZ     FreeRTOS的时钟Tick的频率,也就是FreeRTOS用到的定时中断的产生频率.这个频率越高则定时的精度越高,但是由此带来的开销也越大.FreeRT ...

最新文章

  1. 线性表之顺序表(C语言实现)
  2. OCR:精准、稳定、易用的文字识别
  3. 优达twitter 清理_云吸狗吸出的啊哈时刻
  4. oracle 11g备份,导入oracle 10g
  5. Windows Phone 7 Developer Tools amp; Training Kit 正式版发布!
  6. maven 打包数据库加密_SpringBoot项目application.yml文件数据库配置密码加密的方法...
  7. Rails测试《二》单元测试unit test
  8. css选择器参考手册
  9. linux离线卸载docker,Linux系统下Docker的安装与卸载
  10. access订单明细表怎么做_图书销售订单明细表
  11. html竖线分割符的特殊符号,网站标题用什么分隔符号
  12. 什么是外网IP、内网IP?
  13. 揭密中国500岁世外异人的真实生活
  14. 《奋斗》徐志森的财商课
  15. 登录页面+注册+连接数据库示例
  16. 75岁老人用excel表格画画,令人叹服!
  17. 两条边延长角会有什么变化_用图中这种测量工具可以量出图中零件上ab cd这两条轮廓线的延长线所成的角你能说出其中的道理吗...
  18. tigase服务器推送消息,Tigase HTTP API 上一个 第8章。配置Tigase服务器以加载组件
  19. 最新版YOLOv5 6.1使用教程
  20. Springboot银行客户管理系统 毕业设计-附源码250903

热门文章

  1. 【Java面试题】6年开发去A里面试P6竟被Mysql难住了,说一下你对行锁、临键锁、间隙锁的理解
  2. PointNet学习笔记(二)——支撑材料(理论证明)
  3. 尼康d850相机参数测试软件,尼康D850画质测试及样张
  4. Android调用高德地图app语音导航
  5. python预测糖尿病_使用机器学习的算法预测皮马印第安人糖尿病
  6. 贫穷可耻、贫穷有罪吗?
  7. 爬取Google Scholar论文列表,如何利用公开数据进行合著作者分析?
  8. 【日常学习】google scholar使用小技巧 订阅作者 follow最新文章
  9. Java生成二维码以及解码
  10. 北京极科极客科技有限公司 http://www.hiwifi.com/