Preprocess lvgl.h on Makefile, and allow overriding macros with LV_CFLAGS. Build and register ESP32 driver and ESP32-ILI9341 driver in ESP32 Makefile. Update lv-bindings sub module. Updated README with make command line and ESP32 example.

This commit is contained in:
Amir Gonnen 2019-02-14 00:56:00 +02:00
parent 9aded358b1
commit a307829f7b
6 changed files with 49 additions and 4 deletions

View File

@ -15,8 +15,13 @@ Please set `ESPIDF` parameter for the esp-idf install dir.
It needs to match Micropython expected esp-idf, otherwise a warning will be displayed (and build will probably fail)
For more details refer to [Setting up the toolchain and ESP-IDF](https://github.com/littlevgl/lv_micropython/blob/master/ports/esp32/README.md#setting-up-the-toolchain-and-esp-idf)
For example:
`make -C ports/esp32/ ESPIDF=~/esp/projects/lv_mpy_deps/esp-idf`
When using IL9341 driver, the width height and color need to be set to match ILI9341. This can be done from the command line.
Here is the command to build ESP32 + LittlevGL which is compatible with ILI9341 driver:
`make -C ports/esp32/ ESPIDF=~/esp/projects/lv_mpy_deps/esp-idf -j4 LV_CFLAGS="-DLV_HOR_RES=240 -DLV_VER_RES=320 -DLV_COLOR_DEPTH=16" deploy`
This make command will create ESP32 port of Micropython, and will try to deploy it through USB-UART bridge.
`LV_CFLAGS` are used to override width height and color, for ILI9341 compatibility.
## Super Simple Example
@ -52,6 +57,25 @@ indev_drv.read = SDL.mouse_read;
lv.indev_drv_register(indev_drv);
```
Here is an alternative example, for registering ILI9341 drivers on Micropython ESP32 port:
```python
# Import ESP32 driver (advnaces tick count and schedules tasks)
import lvesp32
# Import ILI9341, initialize it and register it to LittlevGL
import ILI9341 as ili
d = ili.display(miso=5, mosi=18, clk=19, cs=13, dc=12, rst=4, backlight=2)
d.init()
disp_drv = lv.disp_drv_t()
lv.disp_drv_init(disp_drv)
disp_drv.disp_flush = d.flush
disp_drv.disp_fill = d.fill
lv.disp_drv_register(disp_drv)
```
Now you can create the GUI itself
```python

@ -1 +1 @@
Subproject commit c60795596686072f0b28e794af6b1685115cbf86
Subproject commit 6f689638a714c46fa63232f2b98e1ed079664044

View File

@ -39,8 +39,13 @@
*===================*/
/* Horizontal and vertical resolution of the library.*/
#ifndef LV_HOR_RES
#define LV_HOR_RES (440)
#endif
#ifndef LV_VER_RES
#define LV_VER_RES (340)
#endif
/* Dot Per Inch: used to initialize default sizes. E.g. a button with width = LV_DPI / 2 -> half inch wide
* (Not so important, you can adjust it to modify default sizes and spaces)*/
@ -108,7 +113,10 @@
#define LV_INDEV_LONG_PRESS_REP_TIME 100 /*Repeated trigger period in long press [ms] */
/*Color settings*/
#ifndef LV_COLOR_DEPTH
#define LV_COLOR_DEPTH 32 /*Color depth: 1/8/16/32*/
#endif
#define LV_COLOR_16_SWAP 0 /*Swap the 2 bytes of RGB565 color. Useful if the display has a 8 bit interface (e.g. SPI)*/
#define LV_COLOR_SCREEN_TRANSP 0 /*1: Enable screen transparency. Useful for OSD or other overlapping GUIs. Requires ARGB8888 colors*/
#define LV_COLOR_TRANSP LV_COLOR_LIME /*Images pixels with this color will not be drawn (with chroma keying)*/

View File

@ -197,6 +197,12 @@ LIB_SRC_C += \
lib/oofatfs/option/unicode.c
endif
ifeq ($(MICROPY_PY_LVGL), 1)
LIB_SRC_C += \
lib/lv_bindings/driver/esp32/modlvesp32.c \
lib/lv_bindings/driver/esp32/modILI9341.c
endif
DRIVERS_SRC_C = $(addprefix drivers/,\
bus/softspi.c \
dht/dht.c \

View File

@ -180,6 +180,8 @@ extern const struct _mp_obj_module_t mp_module_machine;
extern const struct _mp_obj_module_t mp_module_network;
extern const struct _mp_obj_module_t mp_module_onewire;
extern const struct _mp_obj_module_t mp_module_lvgl;
extern const struct _mp_obj_module_t mp_module_lvesp32;
extern const struct _mp_obj_module_t mp_module_ILI9341;
#define MICROPY_PORT_BUILTIN_MODULES \
{ MP_OBJ_NEW_QSTR(MP_QSTR_esp), (mp_obj_t)&esp_module }, \
@ -210,6 +212,8 @@ extern const struct _mp_obj_module_t mp_module_lvgl;
{ MP_OBJ_NEW_QSTR(MP_QSTR_time), (mp_obj_t)&utime_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_zlib), (mp_obj_t)&mp_module_uzlib }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_lvgl), (mp_obj_t)&mp_module_lvgl }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_lvesp32), (mp_obj_t)&mp_module_lvesp32 }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_ILI9341), (mp_obj_t)&mp_module_ILI9341 }, \
#define MP_STATE_PORT MP_STATE_VM

View File

@ -124,13 +124,16 @@ LVGL_BINDING_DIR = $(TOP)/lib/lv_bindings
LVGL_DIR = $(LVGL_BINDING_DIR)/lvgl
INC += -I$(LVGL_DIR) -I$(LVGL_BINDING_DIR)/include
ALL_LVGL_SRC = $(shell find $(LVGL_DIR) -type f) $(TOP)/lib/lv_conf.h
LVGL_PP = $(BUILD)/lvgl/lvgl.pp.c
LVGL_MPY = $(BUILD)/lvgl/lv_mpy.c
QSTR_GLOBAL_DEPENDENCIES += $(LVGL_MPY)
CFLAGS_MOD += $(LV_CFLAGS)
$(LVGL_MPY): $(ALL_LVGL_SRC) $(LVGL_BINDING_DIR)/gen/gen_mpy.py
$(ECHO) "LVGL-GEN $@"
$(Q)mkdir -p $(dir $@)
$(Q)$(PYTHON) $(LVGL_BINDING_DIR)/gen/gen_mpy.py -X anim -X group -X task $(INC) -I $(LVGL_BINDING_DIR)/pycparser/utils/fake_libc_include $(LVGL_DIR)/lvgl.h > $@
$(Q)$(CPP) $(LV_CFLAGS) $(INC) -I $(LVGL_BINDING_DIR)/pycparser/utils/fake_libc_include $(LVGL_DIR)/lvgl.h > $(LVGL_PP)
$(Q)$(PYTHON) $(LVGL_BINDING_DIR)/gen/gen_mpy.py -X anim -X group -X task -E $(LVGL_PP) $(LVGL_DIR)/lvgl.h > $@
CFLAGS_MOD += -Wno-unused-function
SRC_MOD += $(subst $(TOP)/,,$(shell find $(LVGL_DIR) -type f -name "*.c") $(LVGL_MPY))