LVGL项目实战之UI规划

LVGL项目实战之UI规划

**

实物购买:TB 南山府嵌入式

**

我们在在做项目之前,先需要确定项目的需求以及可能实现的功能,我们只有确定这些才能够对整体的框架进行把握。

本小结就说一下我们这个项目的一个整体的框架结构以及功能。

1-硬件构成

首先我们这是一个报警主机:
在我们的开发板上主要有以下组成:

涂鸦WiFi433接收模块eeprom
音频播放单元LCD按键
串口STM32主控LED
程序下载口

通过上面的功能构成了我们整个报警主机系统。

这些单元主要实现以下功能:

模块单元功能
涂鸦WiFi作用功能:提供联网通信(对接涂鸦平台,使手机端对接联网)
433接收作用功能:接收从设备(门磁、遥控)信号
eeprom作用功能:存储433接收到的数据(主要包括设备码、名称、类型等)
音频播放作用功能:模拟人声播放提示音(报警音、布放、撤防等)
LCD作用功能:显示图形界面内容数据(人机界面交互)
按键作用功能:页面、菜单切换等状态
主控STM32F103作用功能:主控制单元
串口作用功能:显示调试信息
LED灯作为状态指示灯

总体框架图如下:
在这里插入图片描述

2-软件UI构成

在上一结我们把硬件的总体框架进行了说明。这一节我们对UI的整体框架进行说明。

本项目有两个版本:一个是不带UI库的纯裸屏(界面有点丑);一个是使用UI库的LVGL(界面好看许多)

我们这里主要对LVGL界面进行说明,非UI库的这里不在说明。同时那个也有对应的视频大家可以去看一下。这里也不再讲述涂鸦WiFi的移植,只对LVGL的实现进行讲解,后面都是一样的。

首先在实现UI之前我们要知道,我们要实现什么样的UI,怎么实现,解决这两个就行了。

在这里呢,我们这个项目就涉及到两块,一个是桌面的设计,一个是系统设置的设计。接下来我们就来说说这些。

2.1 桌面UI

首先开始的是桌面上的显示和设计。在我们这个项目中,桌面显示一些主要的信息。

我们首先想一想,我们这个项目是一个报警主机,既然是报警主机,那么要有报警主机的状态显示。同时我们也有WiFi,WiFi的连接状态也要进行显示。还有你需要判断接收到的433信号是遥控还是门磁的这么一个状态。

这些基本的有了,那么我们需不需要在显示一些其他的内容呢?比如时间?天气?等等。

当然,因为我们这个屏幕较小且内存较小无法显示更多的东西,所以我们只要显示时间就可以了。当然我只是告诉你们一种思路。

也可以显示一些其他的,比如说开机动画、厂商logo等,大家可以顺着这个思路进行。这里我并没有实现,原因呢还是内存的问题,因为这个项目的初衷就是为了让大家有一个对项目的基本了解,这个项目也是一个剪切版本。实际的功能比这稍微复杂一点。

要点:

桌面的功能就这些,那么报警有几种功能呢?这个在设计之初就已经确立。四种嘛。

所以桌面总体功能如下:

在这里插入图片描述

2.2 设置页面UI

设置里面其实也简单,根据我们开发板上面的单元。首先我们各个单元功能你要知道是干啥的。

知道这些之后才好设计。

我们有433接收单元,这个主要就是对从机进行配对的,既然是配对,那么我们是不是需要一个设备配对的菜单项。有配对,那么你添加设备要知道你添加的设备是遥控设备还是门磁设备呢?如果添加失败呢?这个你是不是要进行设计。

所有就有下面的图结构:

在这里插入图片描述

既然我们已经添加设备了,那需不需要把整个设备都给他列举出来,列出的目的是什么,首先我们能第一个想到的,就是查看设备信息,比如设备名称、设备码等。然后就是我这个设备不要了,那么久把这个设备进行删除。当然也需要编辑之类的,主要是修改设备类型(其实这个不要也行,因为我们的遥控码和我们的门磁码按键值是不一样的)。

所以就有如下图示:
在这里插入图片描述

然后我们有一个WiFi。你有WiFi的总要联网,你不可能拿着WiFi放那他自己就联网了。我们想一下,我们这个WiFi主要是做什么同时怎么去连接的,连接我们怎么去实现呢?要如何去实现。所以在这里我们的WiFi要实现联网状态的显示。

如下图所示:
在这里插入图片描述

我们在想想,你平时买手机如果弄的比较乱是不是想恢复以下出厂。对不,恢复到原厂的设置。这个实现比较简单。

还有就是主机厂商等的信息,这个要有吧,你作为一个厂家,你不希望把你的东西有你的名字。我是希望我的东西有我的名字,就像小学生,新书发下来,先把名字写上,代表这就是我们东西了。
在这里插入图片描述

3-总体软件框架

通过上面的分析呢,我们知道了我们整个UI界面框架的搭建。这样更利于大家分析。

这里提供一个整体的软件UI框架大纲:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/48921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言实现二叉树以及二叉树的详细介绍

目录 1.树概念及结构 1.1树的概念 1.2树的相关概念 1.3树的表示 2.二叉树概念及结构 2.1二叉树的概念 2.2特殊的二叉树 2.3二叉树的性质 2.4二叉树的存储结构 3.二叉树顺序结构--特殊的二叉树--堆及其实现 3.1堆的概念及结构 3.2堆的实现 3.2.1堆的结构 3.2.2堆…

《JavaSE》---21.<简单认识Java的集合框架包装类泛型>

目录 前言 一、什么是集合框架 1.1类和接口总览 二、集合框架的重要性 2.1 开发中的使用 2.2 笔试及面试题 三、背后所涉及的数据结构 3.1 什么是数据结构 3.2 容器背后对应的数据结构 四、包装类 4.1 基本数据类型和对应的包装类 4.2 装箱和拆箱 1.最初的写法 2.…

org.springframework.context.ApplicationContext发送消息

1、创建消息的实体类 package com.demo;/*** 监听的实体类**/ public class EventMessage {private String name;public EventMessage(String name) {this.name name;}public String getName() {return name;}public void setName(String name) {this.name name;} }2、创建消…

【Linux】如何使用docker快速部署Stirling-PDF并实现远程处理本地文档

文章目录 前言1. 安装Docker2. 本地安装部署StirlingPDF3. Stirling-PDF功能介绍4. 安装cpolar内网穿透5. 固定Stirling-PDF公网地址 前言 本篇文章我们将在Linux上使用Docker在本地部署一个开源的PDF工具——Stirling PDF,并且结合cpolar的内网穿透实现公网随时随…

Java 集合框架:Java 中的双端队列 ArrayDeque 的实现

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 019 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…

共享模型之无锁

一、问题提出 1.1 需求描述 有如下的需求,需要保证 account.withdraw() 取款方法的线程安全,代码如下: interface Account {// 获取余额Integer getBalance();// 取款void withdraw(Integer amount);/*** 方法内会启动 1000 个线程&#xf…

GraphPad prism处理cck-8获得ic50

C组为空白对照组,a组为dmso对照组,b组为细胞加药组,八个梯度的药物浓度 一、数据转化 首先,打开软件,选项中选择x的第一项,y的第二项,单一药物浓度设定了几个孔就选几 把自己的药物浓度直接复制…

ubuntu22安装拼音输入法

专栏总目录 一、安装命令: sudo apt update sudo apt install fcitx sudo apt install fcitx-pinyin 二、切换输入法

游戏常用运行库安装包 Game Runtime Libraries Package

游戏常用运行库安装包(Game Runtime Libraries Package)是一个整合了多种游戏所需运行库的安装程序,旨在帮助玩家和开发者解决游戏无法正常运行的问题。该安装包支持从Windows XP到Windows 11的系统,并且具备自动检测系统并推荐合…

代码随想录训练第二十七天|LeetCode56.合并区间、LeetCode738.单调递增的数字、LeetCode968.监控二叉树

文章目录 56.合并区间思路 738.单调递增的数字思路 968.监控二叉树思路确定遍历顺序如何隔两个节点放一个摄像头 56.合并区间 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一…

Step-DPO 论文——数学大语言模型理解

论文题目:STEP-DPO: STEP-WISE PREFERENCE OPTIMIZATION FOR LONG-CHAIN REASONING OF LLMS 翻译为中文就是:“LLMs长链推理的逐步偏好优化” 论文由港中文贾佳亚团队推出,基于推理步骤的大模型优化策略,能够像老师教学生一样优…

String 和StringBuilder字符串操作快慢的举例比较

System.currentTimeMillis(); //当前时间与1970年1月1日午夜UTC之间的毫秒差。public class HelloWorld {public static void main(String[] args) {String s1 "";StringBuilder s2 new StringBuilder("");long time System.currentTimeMillis();long s…

git命令学习分享

分布式版本控制系统,本地仓库和远程仓库相互独立。 使用repository仓库进行控制,可以对里面的文件进行跟踪,复原。 git config --global --list:查看git配置列表 cd ** :进入** cd .. :退回上一级 echo…

AI Agent项目探索与实践记录

AI Agent项目探索与实践记录 1. 概述2. 总体结构2.1 记忆模块2.2 模型服务模块2.2.1 LLM服务2.2.2 retrieval服务2.2.3 rerank服务 2.3 Agent系统2.3.1 Planner2.3.2 Code/SQL Generator2.3.3 Code Executor2.3.4 Responser2.3.5 Round Compressor2.3.6 New Turn Discriminator…

基于Llama Index构建RAG应用(Datawhale AI 夏令营)

前言 Hello,大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者,本文参与活动是2024 DataWhale AI夏令营;😲 在本文中作者将通过: Gradio、Streamlit和LlamaIndex介绍 LlamaIndex 构…

全局 loading

好久不见! 做项目中一直想用一个统一的 loading 状态控制全部的接口加载,但是一直不知道怎么处理,最近脑子突然灵光了一下想到了一个办法。 首先设置一个全局的 loading 状态,优先想到的就是 Pinia 然后因为页面会有很多接口会…

数据结构——栈(链式结构)

一、栈的链式存储结构 如果一个栈存在频繁进栈和出栈操作,可以考虑链式结构。 栈的链式存储结构是指使用链表来实现栈这种数据结构。在链式存储结构中,栈的每个元素被封装成一个节点,节点之间通过指针相连,形成一个链表。栈顶元…

Linux下开放指定端口

比如需要开放82端口: #查询是否开通 firewall-cmd --query-port82/tcp#开放端口82 firewall-cmd --zonepublic --add-port82/tcp --permanent#重新加载防火墙 firewall-cmd --reload

java学习--代码块

package com.block.test01; class Main{public static void main(String[] args) {Block block new Block("你好,李焕英");new Block("你好",12,24);} } public class Block {String name;int begin_time;int end_time; //如果在调用构造器时都…

SwiftUI 5.0(iOS 17)滚动视图的滚动目标行为(Target Behavior)解惑和实战

概览 在 SwiftUI 的开发过程中我们常说:“屏幕不够,滚动来凑”。可见滚动视图对于超长内容的呈现有着多么秉轴持钧的重要作用。 这不,从 SwiftUI 5.0(iOS 17)开始苹果又为滚动视图增加了全新的功能。但是官方的示例可…