0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

AWTK 串口屏开发(2) - 家居控制

ZLG致远电子 2023-12-16 08:24 次阅读

本文以一个家居控制应用程序为例,介绍 AWTK 串口屏的开发流程和 MVVM 数据绑定的高级用法。

1. 功能

这个例子稍微复杂一点,重点关注数据绑定。在这个例子中,模型(也就是数据)里包括一台空调和一台咖啡机:

变量名

数据类型

功能说明

空调_开关

布尔

空调开关

空调_模式

整数

空调模式 (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 显示驱动芯片例子:

  • 主界面

8a25d1e4-9ba9-11ee-9788-92fbcf53809c.png

  • 空调界面

8a2f440e-9ba9-11ee-9788-92fbcf53809c.png

  • 咖啡机界面

8a455e92-9ba9-11ee-9788-92fbcf53809c.png

4. 添加绑定规则

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

完整示例可以参考 hmi/demo_app3

4.1 温度设置

这种两个按钮带一个静态文本的组合很常见。8a4badc4-9ba9-11ee-9788-92fbcf53809c.png

中间的静态文本

绑定属性

绑定规则

说明

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 是一个常见的事件,最好记住,可以提高效率。

4.2 模式选择

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

8a526bf0-9ba9-11ee-9788-92fbcf53809c.png

  • 如果绑定规则写到 group_box 上。这样写即可:

绑定属性

绑定规则

说明

v-data:value

{空调_模式}

如果使用 view 作为容器,则麻烦一点。需要为每个单选按钮编写两条绑定规则:

绑定属性

绑定规则

说明

v-data:value

{空调_模式 == 0}

这里的 0 是单选按钮的序数,根据实际情况调整

v-on:click

{fscript, Args=set(空调_模式,0)}

这里的 0 是单选按钮的序数,根据实际情况调整

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

4.3 模式显示

模式用一个静态文本显示。问题在于,模式在内部用一个正整数表示,而显示的是一个用户可以理解的字符串。所以需要一个转换函数one_of:8a61bc72-9ba9-11ee-9788-92fbcf53809c.png

绑定属性

绑定规则

说明

v-data:value

v-data:value="{one_of(‘制冷;制热;送风;除湿;自动’, 空调_模式)}

这里的 one_of 的功能是从指定的字符串数组中取出对应的子串。

4.4 剩余时间

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

8a6fc8d0-9ba9-11ee-9788-92fbcf53809c.png

绑定属性

绑定规则

说明

v-data:value

int(咖啡_剩余时间/60) + ‘:’ + 咖啡_剩余时间%60}

表达是按浮点数计算的,这里的 int 将结果转换为正数。

4.5 隐藏视图

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

绑定属性

绑定规则

说明

v-data:visible

{空调_开关}

4.6 指定窗口的模型为 default

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

绑定属性

绑定规则

说明

v-model

default

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

无需编译,直接运行。

简单,通常只有一行。

易懂,声明式的语法。

5. 初始化数据

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

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

注意:

  • 如果文件内容有中文(非ASCII字符),一定要保存为 UTF-8 格式。
  • 重新打包资源才能生效。

6. 编译运行

运行 bin 目录下的 demo 程序。

8a76e2e6-9ba9-11ee-9788-92fbcf53809c.png

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

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

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

8a7ea1d4-9ba9-11ee-9788-92fbcf53809c.gif

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

8a8e8a22-9ba9-11ee-9788-92fbcf53809c.gif

8. 注意

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制
    +关注

    关注

    4

    文章

    1011

    浏览量

    122656
  • 串口屏
    +关注

    关注

    8

    文章

    532

    浏览量

    37421
  • awtk
    +关注

    关注

    0

    文章

    44

    浏览量

    226
收藏 人收藏

    评论

    相关推荐

    AWTK 开源智能串口方案

    AWTK开源智能串口方案发布,旨在解决传统串口诸多痛点,为用户提供更开放、更易用、更强大的开源串口
    的头像 发表于 12-02 08:24 944次阅读
    <b class='flag-5'>AWTK</b> 开源智能<b class='flag-5'>串口</b><b class='flag-5'>屏</b>方案

    AWTK 串口开发(1) - Hello World

    本文以一个简单的温度设置程序为例,介绍AWTK串口开发流程和MVVM数据绑定的基本方法。功能这个例子很简单,制作一个调节温度的界面。在这里例子中,模型(也就是数据)里只有一个温度变
    的头像 发表于 12-08 15:52 501次阅读
    <b class='flag-5'>AWTK</b> <b class='flag-5'>串口</b><b class='flag-5'>屏</b><b class='flag-5'>开发</b>(1) - Hello World

    ​【AWTK开源智能串口方案】方案介绍和工作原理

    本篇文章介绍一下AWTK开源智能串口方案的基本原理和实际使用效果,包括主要特点、应用场景、工作原理以及简单的Demo演示。引言:AWTK-HMI是基于
    的头像 发表于 12-21 08:24 986次阅读
    ​【<b class='flag-5'>AWTK</b>开源智能<b class='flag-5'>串口</b><b class='flag-5'>屏</b>方案】方案介绍和工作原理

    AWTK 串口开发(3) - 告警信息

    告警信息是一个常用的功能。在AWTK开源串口中,内置告警信息模型,只需设计用户界面即可实现告警信息的显示和管理。1.功能告警信息是一个常用的功能,MCU在设备异常时,会发送告警信息到串口
    的头像 发表于 12-23 08:24 446次阅读
    <b class='flag-5'>AWTK</b> <b class='flag-5'>串口</b><b class='flag-5'>屏</b><b class='flag-5'>开发</b>(3) - 告警信息

    AWTK 串口开发(5) - MCU端 SDK 用法

    AWTK开源智能串口,不但开放了串口端全部源码,还提供了MCU端SDK,大大加快MCU软件的开发
    的头像 发表于 01-06 08:24 423次阅读
    <b class='flag-5'>AWTK</b> <b class='flag-5'>串口</b><b class='flag-5'>屏</b><b class='flag-5'>开发</b>(5) - MCU端 SDK 用法

    AWTK 开源串口开发(6) - 定时器的用法

    定时器是个常用的功能,AWTK串口提供了丰富的定时器函数,用于定时器的启动、停止、暂停、恢复、修改和重置等功能,本文以计时器的例子来介绍定时器的基本用法。定时器也是一个常用的功能,在AWTK
    的头像 发表于 01-13 08:24 568次阅读
    <b class='flag-5'>AWTK</b> 开源<b class='flag-5'>串口</b><b class='flag-5'>屏</b><b class='flag-5'>开发</b>(6) - 定时器的用法

    AWTK开源智能串口方案】HMI端程序移植编译及运行

    -HMI是基于AWTKAWTK-MVVM开发的低代码智能串口方案,本系列文章介绍如何从零开发
    的头像 发表于 01-18 08:24 913次阅读
    【<b class='flag-5'>AWTK</b>开源智能<b class='flag-5'>串口</b><b class='flag-5'>屏</b>方案】HMI端程序移植编译及运行

    AWTK 开源串口开发(9) - 用户和权限管理

    AWTK串口中,内置用户管理和权限控制的模型,无需编码即可实现登录、登出、修改密码、权限控制、创建用户、删除用户等功能,本文介绍一下用户
    的头像 发表于 02-19 12:10 503次阅读
    <b class='flag-5'>AWTK</b> 开源<b class='flag-5'>串口</b><b class='flag-5'>屏</b><b class='flag-5'>开发</b>(9) - 用户和权限管理

    AWTK开源智能串口方案】MCU SDK使用与编译运行

    代码智能串口方案,本系列文章介绍如何从零开发HMI程序,包括搭建开发环境、创建HMI运行时工程、修改应用界面以及开发MCU程序。MCU端简
    的头像 发表于 02-19 12:11 1195次阅读
    【<b class='flag-5'>AWTK</b>开源智能<b class='flag-5'>串口</b><b class='flag-5'>屏</b>方案】MCU SDK使用与编译运行

    AWTK开源智能串口方案】设计UI界面并上传到串口

    本篇文章将介绍如何使用AWStudio设计串口端的UI界面和添加绑定规则,以及怎么将资源文件上传到串口端。引言:AWTK-HMI是基于
    的头像 发表于 02-22 08:24 714次阅读
    【<b class='flag-5'>AWTK</b>开源智能<b class='flag-5'>串口</b><b class='flag-5'>屏</b>方案】设计UI界面并上传到<b class='flag-5'>串口</b><b class='flag-5'>屏</b>

    AWTK 开源串口开发(11) - 天气预报

    AWTK串口内置了XML/JSON/INI等各种数据文件的模型,并支持用HTTP/HTTPS从网络获取数据。不用编写一行代码,即可实现天气预报、股票行情、航班查询和快递查询等功能。天气预报是一个很
    的头像 发表于 03-05 08:24 395次阅读
    <b class='flag-5'>AWTK</b> 开源<b class='flag-5'>串口</b><b class='flag-5'>屏</b><b class='flag-5'>开发</b>(11) - 天气预报

    AWTK 开源串口开发(12) - 记事本应用

    传统的的串口中,开发一个记事本应用,即使可能,也是非常麻烦的事情。在AWTK串口中,内置文件
    的头像 发表于 03-09 08:23 345次阅读
    <b class='flag-5'>AWTK</b> 开源<b class='flag-5'>串口</b><b class='flag-5'>屏</b><b class='flag-5'>开发</b>(12) - 记事本应用

    AWTK 开源串口开发(14) - 界面重用

    AWTK串口支持同一个界面绑定不同的数据,本文以家居控制为例,介绍一下界面重用的方法。在家居
    的头像 发表于 03-23 08:23 356次阅读
    <b class='flag-5'>AWTK</b> 开源<b class='flag-5'>串口</b><b class='flag-5'>屏</b><b class='flag-5'>开发</b>(14) - 界面重用

    AWTK 开源串口开发(15) - 通过 MODBUS 访问远程数据

    AWTK串口内置MODBUSClient模型,支持用MODBUS协议从远程设备获取数据。不用编写代码即可实现对远程设备数据的显示和修改。在AWTK
    的头像 发表于 03-30 08:23 398次阅读
    <b class='flag-5'>AWTK</b> 开源<b class='flag-5'>串口</b><b class='flag-5'>屏</b><b class='flag-5'>开发</b>(15) - 通过 MODBUS 访问远程数据

    AWTK 开源串口开发(16) - 提供 MODBUS 服务

    AWTK串口内置MODBUS从站模型,不用编写一行代码即可让串口提供MODBUS服务,让远程设备通过MODBUS协议访问
    的头像 发表于 04-13 08:24 449次阅读
    <b class='flag-5'>AWTK</b> 开源<b class='flag-5'>串口</b><b class='flag-5'>屏</b><b class='flag-5'>开发</b>(16) - 提供 MODBUS 服务