AWTK 串口屏开发(2) - 数据绑定高级用法

news2024/9/25 1:20:04

AWTK 串口屏 智能家居示例

1. 功能

这个例子稍微复杂一点,界面这里直接使用了 立功科技 ZDP1440 HMI 显示驱动芯片 例子中的 UI 文件和资源,重点关注数据绑定。在这里例子中,模型(也就是数据)里包括一台空调和一台咖啡机:

变量名数据类型功能说明
空调_开关布尔空调开关
空调_模式整数空调模式 (0: 制冷;1: 制热;2: 送风;2: 除湿;4: 自动)
空调_风速整数0-4 共五档
空调_垂直风向整数垂直风向 (0: 自动;1:上;2:中;3:下)
空调_水平风向整数水平风向(0:自动;1:左;2:中;3:右)
空调_温度整数温度(0-40)
咖啡_开关布尔咖啡开关
咖啡_类型整数类型 (0: 卡布奇诺;1: 拿铁;2: 美式;3: 意式)
咖啡_温度整数温度(0-100)
咖啡_口味整数口味 (0: 浓郁;1: 丝滑;2: 清淡;3: 平衡;4: 温和)
咖啡_热奶整数热奶 (0: 少量;1: 较少;2: 较多;3: 大量)
咖啡_奶泡整数奶泡 (0: 少量;1: 较少;2: 较多;3: 大量)
咖啡_水量整数水量 (50-350ml)
咖啡_剩余时间整数制作时间(格式:分钟:秒)
咖啡_开始制作布尔开始制作

2. 创建项目

从模板创建项目,将 hmi/template_app 拷贝 hmi/home_automation 即可。

项目最好不要放到其它目录,因为放到其它目录需要修改配置文件中的路径,等熟悉之后再考虑放到其它目录。路径中也不要中文和空格,避免不必要的麻烦。

3. 制作界面

界面和资源就直接用 立功科技 ZDP1440 HMI 显示驱动芯片 例子了:

  • 主界面

在这里插入图片描述

  • 空调界面

在这里插入图片描述

  • 咖啡机界面

在这里插入图片描述

3. 添加绑定规则

里面的控件太多,为了不至于太累赘,不同类型的绑定只举一个例子:

完整示例可以参考 hmi/demo_home2

3.1 温度设置

这种两个按钮带一个静态文本的组合很常见。

在这里插入图片描述

  • 中间的静态文本
绑定属性绑定规则说明
v-data:value{空调_温度+‘℃’}
  • 右边的按钮(增加)
绑定属性绑定规则说明
v-on:click{fscript, Args=set(空调_温度,min(空调_温度+1, 40))}这里用函数 set 将变量空调_温度增加 1 度。min 函数保证变量的值不会超出 40。
  • 左边的按钮(减少)
绑定属性绑定规则说明
v-on:click{fscript, Args=set(空调_温度,max(空调_温度-1, 40))}这里用函数 set 将变量空调_温度减少 1 度。max 函数保证变量的值不会小于 0。

v-on:click 是一个常见的事件,最好记住,可以提高效率。

3.2 模式选择

这个用一组单选按钮实现,将多个单选按钮放到 group_box 里(将多个单选按钮放到 view 里也可以,只是需要为每个单选按钮编写绑定规则)。

在这里插入图片描述

  • 如果绑定规则写到 group_box 上。这样写即可:
绑定属性绑定规则说明
v-data:value{空调_模式}
  • 如果使用 view 作为容器,则麻烦一点。需要为每个单选按钮编写两条绑定规则:
绑定属性绑定规则说明
v-data:value{空调_模式 == 0}这里的 0 是单选按钮的序数,根据实际情况调整
v-on:click{fscript, Args=set(空调_模式,0)}这里的 0 是单选按钮的序数,根据实际情况调整

这种方式虽然麻烦,但是可以处理变量的值不是从 0 开始或者不连续的情况。

3.3 模式显示

模式用一个静态文本显示。问题在于,模式在内部用一个正整数表示,而显示的是一个用户可以理解的字符串。所以需要一个转换函数 one_of:

在这里插入图片描述

绑定属性绑定规则说明
v-data:valuev-data:value="{one_of(‘制冷;制热;送风;除湿;自动’, 空调_模式)}这里的 one_of 的功能是从指定的字符串数组中取出对应的子串。

3.4 剩余时间

剩余时间用一个静态文本显示。问题在于,剩余时间在内部用一个正整数表示(秒数),而显示的是“分钟:秒”。所以需要一个转换表达式:

在这里插入图片描述

绑定属性绑定规则说明
v-data:valueint(咖啡_剩余时间/60) + ‘:’ + 咖啡_剩余时间%60}表达是按浮点数计算的,这里的 int 将结果转换为正数。

5.5 隐藏视图

在点击开关按钮时,会自动显示或隐藏右边的设置视图。这是通过将视图的可见性(visible)绑定到开关的状态实现的:

绑定属性绑定规则说明
v-data:visible{空调_开关}

5.6 指定窗口的模型为 default

这是最简单也是最关键的一步:

绑定属性绑定规则说明
v-modeldefault

严格的意义上说,绑定规则也是一种代码,不过相比于 C 语言,它有下面的优势:

  • 无需编译,直接运行
  • 简单,通常只有一行。
  • 易懂,声明式的语法。

4. 初始化数据

修改资源文件 design/default/data/default_model.json, 将其内容改为:

{
  "空调_开关" : false,
  "空调_模式" : 3,
  "空调_风速" : 3,
  "空调_垂直风向" : 1,
  "空调_水平风向" : 1,
  "空调_温度": 25,
  "咖啡_开关" : false,
  "咖啡_类型" : 1,
  "咖啡_温度" : 60,
  "咖啡_口味" : 1,
  "咖啡_热奶" : 1,
  "咖啡_奶泡" : 1,
  "咖啡_水量" : 150,
  "咖啡_剩余时间" : 200,
  "咖啡_开始制作" : false
}

注意:

  • 如果文件内容有中文(非ASCII字符),一定要保存为 UTF-8 格式。

  • 重新打包资源才能生效。

5. 编译运行

运行 bin 目录下的 demo 程序。

在这里插入图片描述

6. 使用 MCU 模拟器与之进行交互

运行 mcu/simulator 目录下的 mcu_sim 程序,连接到 Localhost:2233。

  • 在界面上修改参数,会看到模拟器上收到了对应的事件:

在这里插入图片描述

  • 在模拟器中设置变量 咖啡_类型 的数据,HMI 端的界面也会自动更新。

在这里插入图片描述

7. 注意

  • 完整示例可以参考 hmi/demo_home2

  • 本项目并没有编写界面相关的代码,AWStudio 在 src/pages 目录下生成了一些代码框架,这些代码并没有用到,可以删除也可以不用管它,但是不能加入编译。

  • 本项目中的界面和资源来自 立功科技 ZDP1440 HMI 显示驱动芯片 例子,仅用于演示,不可用于商业用途。

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

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

相关文章

STM32与Freertos入门(六)队列

1、队列介绍 队列是FreeRTOS提供的一种重要的通信机制,用于在任务之间传递数据。 FreeRTOS队列是一种先进先出(FIFO)的数据结构,用于在任务之间传递消息或数据项。它允许一个任务将数据项发送到队列,而另一个任务则可…

Linux部署MySQL5.7和8.0版本 | CentOS和Ubuntu系统详细步骤安装

一、MySQL数据库管理系统安装部署【简单】 简介 MySQL数据库管理系统(后续简称MySQL),是一款知名的数据库系统,其特点是:轻量、简单、功能丰富。 MySQL数据库可谓是软件行业的明星产品,无论是后端开发、…

Reinfocement Learning 学习笔记PartⅡ

文章目录 Reinfocement Learning六、随机近似与随机梯度下降(Stochastic Approximation & Stochastic Gradient Descent)6.1 Robbins-Monro Algorithm6.2 随机梯度下降 七、时序差分方法(Temporal-Difference Learning)7.1 TD…

[算法总结] 十大排序算法

[算法总结] 十大排序算法 简介: 本文首发于我的个人博客:尾尾部落排序算法是最经典的算法知识。因为其实现代码短,应该广,在面试中经常会问到排序算法及其相关的问题。一般在面试中最常考的是快速排序和归并排序等基本的排序算法…

想做游戏开发,我应该会点啥?

在知乎上,经常能看到类似“如何入门游戏开发”这样的问题,这篇文章,我试着概括性的对游戏开发所需要的技能做一个总结,希望大家对游戏开发能有一个基本的认识~ 游戏开发基础要求高么? 和其他程序猿一样,要…

[MySQL]数据库概述

目录 1.什么是数据库 2.数据库分类 2.1关系型数据库 2.2非关系型数据库 1.什么是数据库 我们知道,存储数据可以使用文件来存储。那么为什么我们还要大费周章的去设计和使用数据库呢? 因为文件保存数据有以下几个缺点: 1.文件的安全性不…

Failed to install one or more provisioning profiles on the device

把provision文件导入mac,双击安装provision的时候,提示:Failed to install one or more provisioning profiles on the device。 大体意思是: 未能在设备上安装一个或多个配置配置文件。请确保为此设备配置配置文件。如果没有&am…

FGSM、PGD、BIM对抗攻击算法实现

本篇文章是博主在AI、无人机、强化学习等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学…

代码随想录算法训练营 | day52 动态规划 300.最长递增子序列,674.最长连续递增子序列,718.最长重复子数组

刷题 300.最长递增子序列 题目链接 | 文章讲解 | 视频讲解 题目:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。…

vue脚手架安装及使用

准备工作 安装node安装cnpm cnpm是npm的“廉价平替” 提高安装速度 npm install -g cnpm --registryhttps://registry.npm.taobao.org 安装脚手架 安装Vue脚手架 cnpm install -g vue/cli 用vue脚手架创建vue项目 找好创建项目的位置 创建项目 vue create test (test为项…

磁盘及文件系统(上)

这次博客我们将重点理解Ext2文件系统。 首先我们要理解什么是文件系统。 在之前我们一直理解的文件都是一个被打开的文件,而os为了能够管理这样的文件创建了struct_file这样的结构体对象在内核中描述被打开的文件,这个结构体对象中包含了被打开文件的基…

【PostgreSQL】从零开始:(一)初识PostgreSQL

从零开始:(一)初识PostgreSQL PostgreSQL数据库介绍为什么使用 PostgreSQL?那么多最终用户,云厂商为什么要贡献核心代码?基于PostgreSQL底层开发的好处:为什么要学习PostgreSQL?截止本文发布之日&#xff0…

鸿蒙系统(HarmonyOS)之方舟框架(ArkUI)介绍

鸿蒙开发官网:HarmonyOS应用开发官网 - 华为HarmonyOS打造全场景新服务 方舟开发框架(简称:ArkUI),是一套构建HarmonyOS应用界面的UI开发框架,它提供了极简的UI语法与包括UI组件、动画机制、事件交互等在内…

鸿蒙app获取文本控件按钮控件_修改控件名称_按钮触发事件_提示信息显示

鸿蒙app获取文本控件按钮控件_修改控件名称_按钮触发事件_ 点击启动:提示信息显示 package com.example.myapplication.slice;import com.example.myapplication.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; impor…

linux 文本信息查询grep;控制命令执行和管道操作符号

1、grep grep "keyword" /path/to/logfile获取查询结果最后一行 grep "runs/detect/train" test4.log | tail -n 12、linux控制命令执行和管道操作符号 &、|、; 和 &&、》、>、< ##例子&#xff1b;wandb disabled && yolo …

synchronized关键字的使用和原理

synchronized关键字的使用和原理 synchronized&#xff1a;对象锁&#xff0c;保证了临界区内代码的原子性&#xff0c;采用互斥的方式让同一时刻至多只有一个线程能持有对象锁&#xff0c;其它线程获取这个对象锁时会阻塞&#xff0c;保证拥有锁的线程可以安全的执行临界区内…

vue-实现高德地图-省级行政区地块显示+悬浮显示+标签显示

<template><div><div id"container" /><div click"showFn">显示</div><div click"removeFn">移除</div></div> </template><script> import AMapLoader from amap/amap-jsapi-load…

SpringBoot - application.yml 多环境切换解决方案

问题描述 这个问题玩过 SpringCloud 的小伙伴估计会想到用 bootstrap.yml 来解决这个问题。但是如果说为了解决这个问题引入了一堆的 SpringCloud Jar&#xff0c;就感觉杀鸡用牛刀。 于是今天我们想只有 application.yml 自己就可以解决这个问题&#xff0c;如何搞定&#x…

真正可行的vue3迁移到nuxt3方法(本人亲测,完全避坑)

终于到了总结经验的时候了&#xff0c;这绝对是全网唯一、完全真正可行的干货。 在我看来&#xff0c;知识就是要拿来分享的&#xff0c;分享给他人也是在提高自己。我绝对不会搞什么订阅或者vip专栏来搞钱坑害各位&#xff0c; 因为我在csdn写文章最主要的目的是为了记录和总…

Chrome限制第三方Cookie:未来无法再追踪你看过哪些敏感的“色色”内容了

当我们在浏览网络的时候&#xff0c;常听到「Cookie」这个词&#xff0c;但许多人可能不太清楚它到底是什么。最近&#xff0c;Google 宣布了一项重要更新&#xff0c;Google Chrome 将减少对第三方cookie 的支持&#xff0c;以提高用户隐私保护。 下面我会解释一下这个改变对…