本篇文章将介绍AWTK-HMI中的MCU端开发方法,包括MCU SDK常用API的说明、使用流程及如何编译到Linux和STM32平台。
引言:AWTK-HMI是基于AWTK与AWTK-MVVM开发的低代码智能串口屏方案,本系列文章介绍如何从零开发HMI程序,包括搭建开发环境、创建HMI运行时工程、修改应用界面以及开发MCU程序。
MCU端简介
相对于HMI端(串口屏端),MCU端工程是用户自己的主控程序,通过调用MCU SDK的API,可以与HMI端通过串口或网口通信。MCU端程序本身也是支持跨平台,且不受硬件与系统限制的。
图 1 AWTK-HMI工作原理
从官方的Gitee下载awtk-hmi仓库到本地目录,可以在mcu/sdk/hmi目录中浏览MCU SDK的API。如果是低资源平台则可以浏览mcu/mini-sdk/hmi目录的代码文件。下载链接:https://www.gitee.com/zlgopen/awtk-hmi
MCU开发基本流程
在使用API前需要把MCU SDK加入到目标平台编译成库或者直接放到项目中进行编译,才可以在业务逻辑中调用这些API,关于如何编译文章后面章节会进行详细介绍。
MCU SDK常用API
首先讲述一下MCU SDK实际开发中常用的API,通过这些API,MCU端可以主动获取、设置串口屏的变量值,或接收串口屏的事件,实现双向交互。
1、hmi_create或hmi_create_with_serial,这一步是创建一个hmi_t对象用于跟串口屏端进行通信。若需要使用网口通信可以先调用tk_stream_factory_create_iostream并根据函数说明传进去正确的url参数,接着再将返回的tk_iostream_t对象作为hmi_create函数的参数;
2、hmi_set_prop,通过MCU端设置串口屏某个绑定变量值,如:设置空调开关或温度值;
3、hmi_get_prop,通过MCU端获取串口屏某个绑定变量值;
4、hmi_dispatch,用于获取了串口屏事件后分发到MCU端程序中,如:监听到串口屏发生了EVT_PROP_CHANGED事件,MCU端程序接收到该事件后输出对应的日志信息;
5、hmi_destroy用于MCU端与串口屏端断开连接时销毁hmi_t对象。
MCU SDK开发示例
下图是一段在STM32平台上简单的示例代码,主要逻辑是在程序主循环中检测按键并设置串口屏变量值,并且不断检测串口屏的事件,分发到MCU端程序中:
图 2 MCU SDK使用示例
除了上面所展示的API和例子,更多API说明和示例可以参考《MCU SDK》,完整示例工程可以浏览mcu/stm32目录中的几个STM32工程。参考链接:https://gitee.com/zlgopen/awtk-hmi/blob/master/docs/mcu_sdk.md
在嵌入式Linux平台使用MCU SDK
接下来介绍如何将MCU SDK编译到嵌入式Linux平台。编译环境需要准备交叉编译工具链、MCU SDK代码文件最新版awtk与awtk-linux-fb,awtk与awtk-linux-fb放在awtk-hmi目录中,详细的操作步骤如下:
1. 参考《【从0开始创建AWTK应用程序】编译应用到嵌入式Linux平台》文章在awtk-linux-fb内配置交叉编译工具并编译awtk;
2. 进入到awtk-hmi/mcu/sdk/hmi目录中,使用交叉编译工具编译得到hmi.o目标文件,下面为示例命令(宏定义可自己添加):
arm-zlgmcu-linux-uclibcgnueabi-gcc -c hmi.c -I../../../awtk/src -DLINUX
3. 将hmi.o目标文件打包成库文件
arm-zlgmcu-linux-uclibcgnueabi-ar rcs libhmi.a ./hmi.o
4. 编译test示例程序命令如下:
arm-zlgmcu-linux-uclibcgnueabi-gcc test.c -o test -I./ -I../../../awtk/src -L./ -L../../../awtk-linux-fb/bin -lawtk -lhmi
最终可以得到test示例程序,将该程序以及awtk-linux-fb/bin目录下的libawtk.so库文件拷贝到板子上运行即可
图 3 编译得到的libhmi.a库和test程序
在STM32或其它硬件平台使用MCU SDK
如果想将MCU端编译到STM32平台运行,相对比较简单,只需将AWTK部分代码文件以及MCU SDK所有代码文件加入到现有的keil工程中进行编译,具体操作可以参考mcu/stm32的README.md《STM32移植指南》介绍。
下图是使用Keil编译现有的MCU端移植工程到STM32F429平台的工程文件结构以及编译输出信息:
图 4 Keil工程中加入AWTK与MCU SDK代码文件
图 5 编译MCU端到STM32平台
其它的硬件平台和RTOS平台移植方法也是大同小异,将AWTK编译后再将MCU SDK编译成库文件,最后配置好SDK库与AWTK库路径以及链接选项,编译可执行程序即可。
在Windows平台使用MCU端模拟程序
在mcu/simulator目录下有一个MCU端模拟器例程,可以模拟发送和接收数据,该模拟程序支持通过串口或网口的方式与串口屏连接,并支持收发串口屏消息。具体如何启动HMI端程序并与模拟器通信可以看系列上一篇文章。
运行awtk-hmi目录中的“prepare.bat”下载最新版awtk与awtk-mvvm仓库,接着在mcu/simulator目录下执行以下命令便可运行模拟程序:
scons
python ./scripts/update.py all
./bin/mcu_sim.exe
图 6 Windows运行MCU端模拟程序