本文以一個家居控制應(yīng)用程序為例,介紹 AWTK 串口屏的開發(fā)流程和 MVVM 數(shù)據(jù)綁定的高級用法。
1. 功能
這個例子稍微復(fù)雜一點,重點關(guān)注數(shù)據(jù)綁定。在這個例子中,模型(也就是數(shù)據(jù))里包括一臺空調(diào)和一臺咖啡機(jī):
變量名 | 數(shù)據(jù)類型 | 功能說明 |
空調(diào)_開關(guān) | 布爾 | 空調(diào)開關(guān) |
空調(diào)_模式 | 整數(shù) | 空調(diào)模式 (0: 制冷;1: 制熱;2: 送風(fēng);2: 除濕;4: 自動) |
空調(diào)_風(fēng)速 | 整數(shù) | 0-4 共五檔 |
空調(diào)_垂直風(fēng)向 | 整數(shù) | 垂直風(fēng)向 (0: 自動;1:上;2:中;3:下) |
空調(diào)_水平風(fēng)向 | 整數(shù) | 水平風(fēng)向(0:自動;1:左;2:中;3:右) |
空調(diào)_溫度 | 布爾 | 溫度(0-40) |
咖啡_開關(guān) | 整數(shù) | 咖啡開關(guān) |
咖啡_類型 | 整數(shù) | 類型 (0: 卡布奇諾;1: 拿鐵;2: 美式;3: 意式) |
咖啡_溫度 | 整數(shù) | 溫度(0-100) |
咖啡_口味 | 整數(shù) | 口味 (0: 濃郁;1: 絲滑;2: 清淡;3: 平衡;4: 溫和) |
咖啡_熱奶 | 整數(shù) | 熱奶 (0: 少量;1: 較少;2: 較多;3: 大量) |
咖啡_奶泡 | 整數(shù) | 奶泡 (0: 少量;1: 較少;2: 較多;3: 大量) |
咖啡_水量 | 整數(shù) | 水量 (50-350ml) |
咖啡_剩余時間 | 整數(shù) | 制作時間(格式:分鐘:秒) |
咖啡_開始制作 | 布爾 | 開始制作 |
2. 創(chuàng)建項目
從模板創(chuàng)建項目,將 hmi/template_app 拷貝 hmi/home_automation 即可。
項目最好不要放到其它目錄,因為放到其它目錄需要修改配置文件中的路徑,等熟悉之后再考慮放到其它目錄。路徑中也不要中文和空格,避免不必要的麻煩。
3. 制作界面
界面和資源就直接用了 ZDP1440 顯示驅(qū)動芯片例子:
- 主界面
- 空調(diào)界面
- 咖啡機(jī)界面
4. 添加綁定規(guī)則
里面的控件太多,為了不至于太累贅,不同類型的綁定只舉一個例子:
完整示例可以參考 hmi/demo_app3
4.1 溫度設(shè)置
這種兩個按鈕帶一個靜態(tài)文本的組合很常見。
中間的靜態(tài)文本
綁定屬性 | 綁定規(guī)則 | 說明 |
v-data:value | {空調(diào)_溫度+‘℃’} |
右邊的按鈕(增加)
綁定屬性 | 綁定規(guī)則 | 說明 |
v-on:click | {fscript, Args=set(空調(diào)_溫度,min(空調(diào)_溫度+1, 40))} | 這里用函數(shù) set 將變量空調(diào)_溫度增加 1 度。min 函數(shù)保證變量的值不會超出 40。 |
- 左邊的按鈕(減少)
綁定屬性 | 綁定規(guī)則 | 說明 |
v-on:click | {fscript, Args=set(空調(diào)_溫度,max(空調(diào)_溫度-1, 40))} | 這里用函數(shù) set 將變量空調(diào)_溫度減少 1 度。max 函數(shù)保證變量的值不會小于 0。 |
v-on:click 是一個常見的事件,最好記住,可以提高效率。
4.2 模式選擇
這個用一組單選按鈕實現(xiàn),將多個單選按鈕放到 group_box 里(將多個單選按鈕放到 view 里也可以,只是需要為每個單選按鈕編寫綁定規(guī)則)。
- 如果綁定規(guī)則寫到 group_box 上。這樣寫即可:
綁定屬性 | 綁定規(guī)則 | 說明 |
v-data:value | {空調(diào)_模式} |
如果使用 view 作為容器,則麻煩一點。需要為每個單選按鈕編寫兩條綁定規(guī)則:
綁定屬性 | 綁定規(guī)則 | 說明 |
v-data:value | {空調(diào)_模式 == 0} | 這里的 0 是單選按鈕的序數(shù),根據(jù)實際情況調(diào)整 |
v-on:click | {fscript, Args=set(空調(diào)_模式,0)} | 這里的 0 是單選按鈕的序數(shù),根據(jù)實際情況調(diào)整 |
這種方式雖然麻煩,但是可以處理變量的值不是從 0 開始或者不連續(xù)的情況。
4.3 模式顯示
模式用一個靜態(tài)文本顯示。問題在于,模式在內(nèi)部用一個正整數(shù)表示,而顯示的是一個用戶可以理解的字符串。所以需要一個轉(zhuǎn)換函數(shù)one_of:
綁定屬性 | 綁定規(guī)則 | 說明 |
v-data:value | v-data:value="{one_of(‘制冷;制熱;送風(fēng);除濕;自動’, 空調(diào)_模式)} | 這里的 one_of 的功能是從指定的字符串?dāng)?shù)組中取出對應(yīng)的子串。 |
4.4 剩余時間
剩余時間用一個靜態(tài)文本顯示。問題在于,剩余時間在內(nèi)部用一個正整數(shù)表示(秒數(shù)),而顯示的是“分鐘:秒”。所以需要一個轉(zhuǎn)換表達(dá)式:
綁定屬性 | 綁定規(guī)則 | 說明 |
v-data:value | int(咖啡_剩余時間/60) + ‘:’ + 咖啡_剩余時間%60} | 表達(dá)是按浮點數(shù)計算的,這里的 int 將結(jié)果轉(zhuǎn)換為正數(shù)。 |
4.5 隱藏視圖
在點擊開關(guān)按鈕時,會自動顯示或隱藏右邊的設(shè)置視圖。這是通過將視圖的可見性(visible)綁定到開關(guān)的狀態(tài)實現(xiàn)的:
綁定屬性 | 綁定規(guī)則 | 說明 |
v-data:visible | {空調(diào)_開關(guān)} |
4.6 指定窗口的模型為 default
這是最簡單也是最關(guān)鍵的一步:
綁定屬性 | 綁定規(guī)則 | 說明 |
v-model | default |
嚴(yán)格的意義上說,綁定規(guī)則也是一種代碼,不過相比于 C 語言,它有下面的優(yōu)勢:
無需編譯,直接運行。
簡單,通常只有一行。
易懂,聲明式的語法。
5. 初始化數(shù)據(jù)
修改資源文件 design/default/data/default_model.json, 將其內(nèi)容改為:
{ "空調(diào)_開關(guān)" : false, "空調(diào)_模式" : 3, "空調(diào)_風(fēng)速" : 3, "空調(diào)_垂直風(fēng)向" : 1, "空調(diào)_水平風(fēng)向" : 1, "空調(diào)_溫度": 25, "咖啡_開關(guān)" : false, "咖啡_類型" : 1, "咖啡_溫度" : 60, "咖啡_口味" : 1, "咖啡_熱奶" : 1, "咖啡_奶泡" : 1, "咖啡_水量" : 150, "咖啡_剩余時間" : 200, "咖啡_開始制作" : false}
注意:
- 如果文件內(nèi)容有中文(非ASCII字符),一定要保存為 UTF-8 格式。
- 重新打包資源才能生效。
6. 編譯運行
運行 bin 目錄下的 demo 程序。
7. 使用 MCU 模擬器與之進(jìn)行交互
運行 mcu/simulator 目錄下的 mcu_sim 程序,連接到 Localhost:2233。
- 在界面上修改參數(shù),會看到模擬器上收到了對應(yīng)的事件:
- 在模擬器中設(shè)置變量咖啡_類型的數(shù)據(jù),HMI 端的界面也會自動更新。
8. 注意
- 完整示例可以參考 hmi/demo_home2。
- 本項目并沒有編寫界面相關(guān)的代碼,AWStudio 在 src/pages 目錄下生成了一些代碼框架,這些代碼并沒有用到,可以刪除也可以不用管它,但是不能加入編譯。
-
控制
+關(guān)注
關(guān)注
5文章
1023瀏覽量
123778 -
串口屏
+關(guān)注
關(guān)注
8文章
586瀏覽量
38313 -
awtk
+關(guān)注
關(guān)注
0文章
50瀏覽量
381
發(fā)布評論請先 登錄
AWTK 串口屏開發(fā)(1) - Hello World

?【AWTK開源智能串口屏方案】方案介紹和工作原理

AWTK 串口屏開發(fā)(3) - 告警信息

AWTK 開源串口屏開發(fā)(6) - 定時器的用法

AWTK 開源串口屏開發(fā)(9) - 用戶和權(quán)限管理

【AWTK開源智能串口屏方案】MCU SDK使用與編譯運行

【AWTK開源智能串口屏方案】設(shè)計UI界面并上傳到串口屏

AWTK 開源串口屏開發(fā)(11) - 天氣預(yù)報

AWTK 開源串口屏開發(fā)(12) - 記事本應(yīng)用

AWTK 開源串口屏開發(fā)(15) - 通過 MODBUS 訪問遠(yuǎn)程數(shù)據(jù)

AWTK 開源串口屏開發(fā)(16) - 提供 MODBUS 服務(wù)

評論