Skip to content
This repository has been archived by the owner on Oct 12, 2020. It is now read-only.

Commit

Permalink
Fix lvgl crash + update example
Browse files Browse the repository at this point in the history
  • Loading branch information
OPHoperHPO committed Jul 20, 2020
1 parent c22e615 commit 067523c
Show file tree
Hide file tree
Showing 5 changed files with 117 additions and 109 deletions.
43 changes: 25 additions & 18 deletions MicroPython_BUILD/components/micropython/esp32/modlvesp32.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,13 @@

#include "py/obj.h"
#include "py/runtime.h"
#include "py/binary.h"
#include "libs/lvgl/lv_binding/lvgl/lvgl.h"
#include "freertos/FreeRTOS.h"
#include "freertos/timers.h"
#include "freertos/task.h"
#include "esp_freertos_hooks.h"
#include "esp_log.h"

static const char TAG[] = "[LVGL]";
static TimerHandle_t xTimer;

STATIC mp_obj_t mp_lv_task_handler(mp_obj_t arg)
{
Expand All @@ -22,29 +21,38 @@ STATIC mp_obj_t mp_lv_task_handler(mp_obj_t arg)

STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_lv_task_handler_obj, mp_lv_task_handler);

static void vTimerCallback(TimerHandle_t pxTimer)

static void lv_task(void* param)
{
while(1)
{
vTaskDelay(5);
mp_sched_schedule((mp_obj_t)&mp_lv_task_handler_obj, mp_const_none, NULL);
}
}



static void lv_tick_task(void)
{
lv_tick_inc(portTICK_RATE_MS);
mp_sched_schedule((mp_obj_t)&mp_lv_task_handler_obj, mp_const_none,NULL);
}

static TaskHandle_t lvglTaskHandle;
STATIC mp_obj_t mp_init_lvesp32()
{
lv_init();
BaseType_t xReturned;

xTimer = xTimerCreate(
"lvgl_timer",
1, // The timer period in ticks.
pdTRUE, // The timers will auto-reload themselves when they expire.
NULL, // User data passed to callback
vTimerCallback // Callback function
);
lv_init();

if (xTimer == NULL || xTimerStart( xTimer, 0 ) != pdPASS){
ESP_LOGE(TAG, "Failed creating or starting LVGL timer!");
}
esp_register_freertos_tick_hook(lv_tick_task);

return mp_const_none;
xReturned = xTaskCreate(lv_task, "LVGL Task", 4096, NULL, 5, &lvglTaskHandle);
if (xReturned != pdPASS){
vTaskDelete(lvglTaskHandle);
ESP_LOGE(TAG, "Failed creating LVGL task!");
}
return mp_const_none;
}

STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_init_lvesp32_obj, mp_init_lvesp32);
Expand All @@ -54,7 +62,6 @@ STATIC const mp_rom_map_elem_t lvesp32_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_lvesp32) },
{ MP_ROM_QSTR(MP_QSTR___init__), MP_ROM_PTR(&mp_init_lvesp32_obj) },
};


STATIC MP_DEFINE_CONST_DICT (
mp_module_lvesp32_globals,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
github:https://github.com/lewisxhe/AXP202X_Libraries
Updated by Anodev https://github.com/OPHoperHPO
'''

import time

from ustruct import unpack
Expand Down Expand Up @@ -78,7 +77,6 @@ def __init__(self, i2c, address=None):
self._irq = memoryview(self.buffer[0:5])
self.bus = i2c
self.init_device()
self.threadIRQupdate = None

def write_byte(self, reg, val):
self.bytebuf[0] = val
Expand Down
72 changes: 56 additions & 16 deletions MicroPython_BUILD/components/micropython/esp32/modules/ttgo.py
Original file line number Diff line number Diff line change
@@ -1,28 +1,29 @@
# -*- coding: utf-8 -*-
# Порт официальной библиотеки ttgo для часов LilyGo TTGO T-Watch 2020.
# Автор: Nikita Selin (Anodev)[https://github.com/OPHoperHPO]
import gc
import lvgl as lv
import lvgl_helper as lv_h
import lvesp32
import display
from ft5206 import FT5206
import bma423 as BMA423
from pcf8563 import PCF8563
import axp202
from machine import Pin, I2C, PWM
import lvgl_helper as lv_h
from machine import Pin, I2C, PWM, Timer


class TTGO:
def __init__(self):
self.__i2c__ = I2C(scl=22, sda=21)
self.__i2c2__ = I2C(id=1, scl=32, sda=23, speed=400000)
self.pmu = axp202.PMU(self.__i2c__)
self.init_power()
self.rtc = PCF8563(self.__i2c__)
self.tft = self.__init_display__()
self.bma = self.__init_bma__()
self.__i2c2__ = I2C(id=1, scl=32, sda=23, speed=400000)
self.touch = FT5206(self.__i2c2__)
self.motor = Motor()
self.rtc = PCF8563(self.__i2c__)
self.bma = self.__init_bma__()
self.ticker = Ticker()

def __init_bma__(self):
BMA423.init(self.__i2c__)
Expand All @@ -31,36 +32,43 @@ def __init_bma__(self):
def __init_display__(self):
return Display(self.pmu)

def pmu_attach_interrupt(self, callback):
@staticmethod
def pmu_attach_interrupt(callback):
irq = Pin(35, mode=Pin.IN, handler=callback, trigger=Pin.IRQ_FALLING)
return irq

def bma_attach_interrupt(self, callback):
@staticmethod
def bma_attach_interrupt(callback):
irq = Pin(39, mode=Pin.IN, handler=callback, trigger=Pin.IRQ_RISING)
return irq

def rtc_attach_interrupt(self, rtc_callback):
Pin(37, mode=Pin.IN, handler=rtc_callback, trigger=Pin.IRQ_FALLING)
@staticmethod
def rtc_attach_interrupt(rtc_callback):
irq = Pin(37, mode=Pin.IN, handler=rtc_callback, trigger=Pin.IRQ_FALLING)
return irq

def enable_audio_power(self, en=True):
self.pmu.setLDO3Mode(1)
self.pmu.setPowerOutPut(axp202.AXP202_LDO3, en)

def lvgl_begin(self):
lv.init()
self.ticker.init()
disp_buf1 = lv.disp_buf_t()
buf1_1 = bytes(240 * 10)
lv.disp_buf_init(disp_buf1, buf1_1, None, len(buf1_1) // 4)
disp_buf1.init(buf1_1, None, len(buf1_1) // 4)
disp_drv = lv.disp_drv_t()
lv.disp_drv_init(disp_drv)
disp_drv.init()
disp_drv.buffer = disp_buf1
disp_drv.flush_cb = lv_h.flush
disp_drv.hor_res = 240
disp_drv.ver_res = 240
lv.disp_drv_register(disp_drv)
disp_drv.register()
indev_drv = lv.indev_drv_t()
lv.indev_drv_init(indev_drv)
indev_drv.init()
indev_drv.type = lv.INDEV_TYPE.POINTER
indev_drv.read_cb = self.touch.lvgl_touch_read
lv.indev_drv_register(indev_drv)
indev_drv.register()

def init_power(self):
# Change the button boot time to 4 seconds
Expand Down Expand Up @@ -89,7 +97,7 @@ def __init__(self, pmu):
tft = display.TFT()
tft.init(tft.ST7789, width=240, invrot=3,
rot=1, bgr=False, height=240, miso=2, mosi=19, clk=18, cs=5, dc=27,
speed=40000000, color_bits=tft.COLOR_BITS16, backl_pin=12, backl_on=1, splash= False)
speed=40000000, color_bits=tft.COLOR_BITS16, backl_pin=12, backl_on=1, splash=False)
self.tft = tft
self.pmu = pmu
self.set_backlight_level(0) # Turn backlight off
Expand Down Expand Up @@ -157,6 +165,38 @@ def __rgb_tuple2rgb_int__(self, rgb_tuple):
return rgb_tuple[0] << 16 | rgb_tuple[1] << 8 | rgb_tuple[2]


class Ticker:
def __init__(self):
lv.init()
self.timer = Timer(1)
self.period = 15

def __cb__(self, timer):
lv.tick_inc(self.period)
lv.task_handler()

def init(self):
self.timer.init(period=self.period, mode=self.timer.PERIODIC, callback=self.__cb__)

def set_period(self, data=None):
if data:
self.period = int(data)
self.timer.period(int(data))
else:
return self.period

def resume(self):
self.timer.resume()

def pause(self):
if self.timer.isrunning():
self.timer.pause()

def deinit(self):
if self.timer.isrunning():
self.timer.deinit()


class Motor:
def __init__(self):
self.pwm = PWM(4, freq=1000, duty=0)
Expand Down
69 changes: 16 additions & 53 deletions MicroPython_BUILD/sdkconfig
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
#
CONFIG_TOOLPREFIX="xtensa-esp32-elf-"
CONFIG_PYTHON="python3"
CONFIG_MAKE_WARN_UNDEFINED_VARIABLES=y
CONFIG_MAKE_WARN_UNDEFINED_VARIABLES=

#
# Bootloader config
Expand Down Expand Up @@ -79,7 +79,7 @@ CONFIG_MONITOR_BAUD=115200
#
# MicroPython
#
CONFIG_MICROPY_HW_BOARD_NAME="LilyGO-TTGO-TWatch-2020"
CONFIG_MICROPY_HW_BOARD_NAME="LilyGo-T-Watch-2020-V1"
CONFIG_MICROPY_HW_MCU_NAME="ESP32"
CONFIG_MICROPY_TIMEZONE="GMT0BST"
CONFIG_MICROPY_USE_OTA=
Expand All @@ -105,12 +105,12 @@ CONFIG_MICROPY_GC_THRESHOLD_VALUE=90
CONFIG_MICROPY_SCHEDULER_DEPTH=8
CONFIG_MICROPY_PY_THREAD_GIL_VM_DIVISOR=32
CONFIG_MICROPY_RX_BUFFER_SIZE=1080
CONFIG_MICROPY_USE_BOTH_CORES=
CONFIG_MICROPY_USE_BOTH_CORES=y
CONFIG_MICROPY_TASK_PRIORITY=5
CONFIG_MICROPY_STACK_SIZE=20
CONFIG_MICROPY_STACK_SIZE=24
CONFIG_MICROPY_HEAP_SIZE=3072
CONFIG_MICROPY_THREAD_MAX_THREADS=4
CONFIG_MICROPY_THREAD_STACK_SIZE=4
CONFIG_MICROPY_THREAD_MAX_THREADS=16
CONFIG_MICROPY_THREAD_STACK_SIZE=6
CONFIG_MICROPY_USE_TELNET=y
CONFIG_MICROPY_USE_WEBSERVER=
CONFIG_MICROPY_USE_FTPSERVER=y
Expand Down Expand Up @@ -140,11 +140,10 @@ CONFIG_MICROPY_USE_LVGL=y
CONFIG_MICROPY_USE_EPD=
CONFIG_MICROPY_USE_EVE=
CONFIG_MICROPY_USE_BMA423=y
CONFIG_MICROPY_USE_GSM=
CONFIG_MICROPY_USE_GPS=
CONFIG_MICROPY_USE_GSM=y
CONFIG_MICROPY_USE_GPS=y
CONFIG_MICROPY_GPS_SERVICE_STACK=3072
CONFIG_MICROPY_USE_ETHERNET=
CONFIG_MICROPY_USE_BLUETOOTH=
CONFIG_MICROPY_USE_RFCOMM=y
CONFIG_MICROPY_USE_MDNS=y
CONFIG_MICROPY_USE_REQUESTS=y
CONFIG_MICROPY_USE_CURL=y
Expand Down Expand Up @@ -202,8 +201,8 @@ CONFIG_PARTITION_TABLE_MD5=y
#
# Compiler options
#
CONFIG_OPTIMIZATION_LEVEL_DEBUG=
CONFIG_OPTIMIZATION_LEVEL_RELEASE=y
CONFIG_OPTIMIZATION_LEVEL_DEBUG=y
CONFIG_OPTIMIZATION_LEVEL_RELEASE=
CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y
CONFIG_OPTIMIZATION_ASSERTIONS_SILENT=
CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED=
Expand Down Expand Up @@ -231,41 +230,9 @@ CONFIG_AWS_IOT_SDK=
#
# Bluetooth
#
CONFIG_BT_ENABLED=y
CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE_0=y
CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE_1=
CONFIG_BT_ENABLED=
CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0
CONFIG_BTDM_CONTROLLER_HCI_MODE_VHCI=y
CONFIG_BTDM_CONTROLLER_HCI_MODE_UART_H4=

#
# MODEM SLEEP Options
#
CONFIG_BTDM_CONTROLLER_MODEM_SLEEP=
CONFIG_BLUEDROID_ENABLED=y
CONFIG_BLUEDROID_PINNED_TO_CORE_0=y
CONFIG_BLUEDROID_PINNED_TO_CORE_1=
CONFIG_BLUEDROID_PINNED_TO_CORE=0
CONFIG_BTC_TASK_STACK_SIZE=3072
CONFIG_BLUEDROID_MEM_DEBUG=
CONFIG_CLASSIC_BT_ENABLED=y
CONFIG_A2DP_ENABLE=
CONFIG_BT_SPP_ENABLED=y
CONFIG_HFP_ENABLE=
CONFIG_GATTS_ENABLE=y
CONFIG_GATTC_ENABLE=y
CONFIG_GATTC_CACHE_NVS_FLASH=
CONFIG_BLE_SMP_ENABLE=
CONFIG_BT_STACK_NO_LOG=y
CONFIG_BT_ACL_CONNECTIONS=4
CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST=y
CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY=y
CONFIG_BLE_HOST_QUEUE_CONGESTION_CHECK=
CONFIG_BLE_SCAN_DUPLICATE=y
CONFIG_DUPLICATE_SCAN_CACHE_SIZE=20
CONFIG_BLE_MESH_SCAN_DUPLICATE_EN=
CONFIG_SMP_ENABLE=y
CONFIG_BT_RESERVE_DRAM=0x10000
CONFIG_BT_RESERVE_DRAM=0

#
# Driver configurations
Expand Down Expand Up @@ -318,7 +285,7 @@ CONFIG_TWO_UNIVERSAL_MAC_ADDRESS=
CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y
CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4
CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32
CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304
CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2048
CONFIG_MAIN_TASK_STACK_SIZE=3584
CONFIG_IPC_TASK_STACK_SIZE=1024
CONFIG_TIMER_TASK_STACK_SIZE=3584
Expand Down Expand Up @@ -373,18 +340,14 @@ CONFIG_ESP32_XTAL_FREQ_26=
CONFIG_ESP32_XTAL_FREQ_AUTO=y
CONFIG_ESP32_XTAL_FREQ=0
CONFIG_DISABLE_BASIC_ROM_CONSOLE=
CONFIG_NO_BLOBS=
CONFIG_ESP_TIMER_PROFILING=
CONFIG_COMPATIBLE_PRE_V2_1_BOOTLOADERS=
CONFIG_ESP_ERR_TO_NAME_LOOKUP=y

#
# Wi-Fi
#
CONFIG_SW_COEXIST_ENABLE=y
CONFIG_SW_COEXIST_PREFERENCE_WIFI=
CONFIG_SW_COEXIST_PREFERENCE_BT=
CONFIG_SW_COEXIST_PREFERENCE_BALANCE=y
CONFIG_SW_COEXIST_PREFERENCE_VALUE=2
CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=8
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=16
CONFIG_ESP32_WIFI_STATIC_TX_BUFFER=y
Expand Down Expand Up @@ -532,7 +495,7 @@ CONFIG_LOG_COLORS=y
CONFIG_L2_TO_L3_COPY=
CONFIG_LWIP_IRAM_OPTIMIZATION=
CONFIG_LWIP_MAX_SOCKETS=8
CONFIG_USE_ONLY_LWIP_SELECT=y
CONFIG_USE_ONLY_LWIP_SELECT=
CONFIG_LWIP_SO_REUSE=y
CONFIG_LWIP_SO_REUSE_RXTOALL=y
CONFIG_LWIP_SO_RCVBUF=
Expand Down
Loading

0 comments on commit 067523c

Please sign in to comment.