支持LVGL的micropython固件编译(一)

       LVGL是一款嵌入式开发比较常用的开源GUI库,lvgl本身采用c以面向对象的方式开发,这种高级特性可以很好的适应高级语言,所以采用python开发也是不错的选择。现在我们就尝试下使用micropython开发lvgl应用。官方对micropython已经做了移植支持,采用pycparser工具将lvgl  c源码进行封装出一个中间c文件做为mpy模组接口。lvgl官方github上已经做好了带有移植lvlg的micropython例子,我们直接下载下来编译即可使用。

开发环境

软件:Ubuntu 18.04虚拟机

1.安装依赖的环境

sudo apt-get install git make gcc libncurses5-dev flex bison gperf python-serial
如果已经安装过了,不会再次安装

2.下载源码

github仓库地址:GitHub - lvgl/lv_micropython: Micropython bindings to LVGL for Embedded devices, Unix and JavaScript

网络好的同学可以直接

git clone https://github.com/lvgl/lv_micropython.git

下代码,网不好的话可以科学上网,或者用gitee中转一下的方法拉代码,在个人gitee账号里采用从GitHub导入仓库的方法建立gitee上的仓库,然后在从gitee上拉代码,下面以我的为例。

git clone https://gitee.com/l_y_r/lv_micropython.git

我的gitee仓库可能不会经常同步github仓库,需要最新代码建议自己处理下。

代码下好后编译会发现很多报错,很多依赖库找不到,因为我们还没有更新子模组,很多库都是空文件。更新子模组:

cd lv_micropython
git submodule update --init
cd lv_micropython/lib/lv_bindings/
git submodule update --init

这时候网不好的同学可能会比较痛苦,要更新下载的子模组比较多,因为这些子模组包含了mpy所有端口依赖的子模组,而且依然是从github拉取的。

不过如果你跟我一样只是玩unix端口编译的话,可以选择只更新以下几个子模组:

cd lv_micropython/
git submodule init lib/berkeley-db-1.xx
git submodule init lib/axtls
git submodule init lib/mbedtls
git submodule init lib/micropython-lib
git submodule init lib/lv_bindings
git submodule update

cd lv_micropython/lib/lv_bindings/
git submodule init lvgl
git submodule init pycparser
git submodule update

cd lv_micropython/lib/lv_bindings/driver/png/
git submodule init lodepng
git submodule update

submodule update失败就多试几次,就可以了。

3.编译

编译mpy-cross工具:

cd lv_micropython
make -C mpy-cross

编译unix端口的mpy:

make -C ports/unix/

编译好后测试下

./ports/unix/micropython

结果如下图:

支持LVGL的micropython固件编译(一)_第1张图片

可以发现目前的lv_micropython是采用1.14版本的,执行help('modules')查看支持的模组报错,这是因为我们编出来的standard版本得mpy没有启用help指令,修改源码启用即可。ctrl-D退出mpy的repl。

打开ports\unix\variants\standard\mpconfigvariant.h文件,在下面加入这几句,然后保存。

#define MICROPY_PY_BUILTINS_MEMORYVIEW_ITEMSIZE (1)
#define MICROPY_PY_BUILTINS_NEXT2      (1)
#define MICROPY_PY_BUILTINS_RANGE_BINOP (1)
#define MICROPY_PY_BUILTINS_HELP       (1)
#define MICROPY_PY_BUILTINS_HELP_MODULES (1)

重新编译mpy:

cd lv_micropython/ports/unix
make clean
make -j

执行编好的固件看下结果:

支持LVGL的micropython固件编译(一)_第2张图片

help('modules')已经可以使用了,通过查看内置的模组跟标准的mpy对比发现我们这个里面含有SDL,fb, evdev,lodepng, imagetools, lvgl, lv_colors等模组,这些就是lvgl添加的组件。

其中lvgl模组就是mpy版本的GUI库,其他各个模组的用处后面用到的时候在做讲解。

4.Demo测试

lvgl官方提供的测试例子在这个路径下:lib\lv_bindings\examples

可以用编译出来的micropython解释器去执行该目录下的测试脚本。

举个栗子:

打开/lib/lv_bindings/examples/advanced_demo.py文件,在末尾加入以下代码:


if __name__ == '__main__':
    import time
    while True:
        time.sleep(1)

执行

./micropython ../../lib/lv_bindings/examples/advanced_demo.py

结果如图:

支持LVGL的micropython固件编译(一)_第3张图片

至此我们支持lvgl开发的micropython固件就编译好了,在这种带有桌面GUI的ubuntu系统上,lvgl图形加载是依靠SDL实现的,分析demo代码就能知道SDL模组作为了屏幕显示的驱动,把我们的图形加载到屏幕。micropython这种东西我们肯定是要放在板子上玩的,下一篇继续讲如何给跑linux系统的arm板编译移植。

支持LVGL的micropython固件编译(二)arm板移植

你可能感兴趣的:(lvgl,python,micropython,python,github,git,micropython)