Ken Van Hoeylandt 6dc8b897d6
Display orientation setting (#38)
- Implemented display orientation in Display app
- Increased LVGL task stack for T-Deck
2024-02-10 22:51:59 +01:00
2024-02-06 23:18:34 +01:00
2024-02-09 23:53:29 +01:00
2024-02-10 22:51:59 +01:00
2024-02-10 21:29:52 +01:00
2024-02-10 21:29:52 +01:00
2024-02-10 21:29:52 +01:00
2024-02-03 15:45:53 +01:00
2024-01-13 14:15:53 +01:00
2024-01-20 14:10:19 +01:00
2024-01-19 17:39:30 +01:00
2024-02-02 00:12:36 +01:00
2024-01-02 23:47:49 +01:00
2023-12-25 12:42:06 +01:00
2024-01-13 14:15:53 +01:00
2024-02-06 23:18:34 +01:00
2024-02-02 00:12:36 +01:00

Overview

Tactility is a front-end application platform for ESP32. It is mainly intended for touchscreen devices. It provides an application framework that is based on code from the Flipper Zero project.

Status: Alpha

Tactility shown on a Lilygo T-Deck device and on PC

Noteworthy features:

  • Touch UI capabilities (via LVGL) with support for input devices such as on-device trackball or keyboard.
  • An application platform that can run apps and services.
  • Basic applications to boost productivity, such as a Wi-Fi connectivity app.
  • Run Tactility apps on PC to speed up development.

Requirements:

  • ESP32 (any?) with a touchscreen
  • esp-idf 5.1.2 or a newer v5.1.x

Making apps is easy!

The app manifest provides basic information like the application name. It also describes the app lifecycle: It tells Tactility which functions need to be called when the app is started/shown/etc.

UI is created with lvgl which has lots of widgets! Creating a touch-capable UI is easy and doesn't require your own render loop!

static void app_show(TT_UNUSED App app, lv_obj_t* parent) {
    // Default toolbar with app name and close button
    lv_obj_t* toolbar = tt_toolbar_create_for_app(parent, app);
    lv_obj_align(toolbar, LV_ALIGN_TOP_MID, 0, 0);
    
    // Label widget
    lv_obj_t* label = lv_label_create(parent);
    lv_label_set_text(label, "Hello, world!");
    lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
    // Widgets are auto-removed from the parent when the app is closed
}

const AppManifest hello_world_app = {
    .id = "helloworld",    // Used to identify and start an app
    .name = "Hello World", // Shown on the desktop and app's toolbar
    .icon = NULL,
    .type = AppTypeUser,
    .on_start = NULL,
    .on_stop = NULL,
    .on_show = &app_show,  // A minimal setup sets the on_show() function
    .on_hide = NULL
};

hello world app

Supported Hardware

Any ESP32 device with a touchscreen should be able to run Tactility, because LVGL is set up in a platform-agnostic manner. Implementing drivers can take some effort, so Tactility provides support for several devices.

Predefined configurations are available for:

Device Screen&Touch SD card Other
LilyGo T-Deck Keyboard
Waveshare S3 Touch
Yellow Board 2432S024C (*)
  • : Capable and implemented
  • : Capable but not yet implemented
  • : Not capable

(*) Note: Only the capacitive version is supported. See AliExpress here and here.

Guide

Build environment setup

Ensure you have esp-idf 5.1.2 installed, then select the correct device:

Copy the sdkconfig.board.YOUR_BOARD into sdkconfig. Use sdkconfig.defaults if you are setting up a custom board.

Building firmware

You can run idf.py flash monitor, but there are some helpers available too:

./build.sh - build the ESP-IDF or the PC version of Tactility (*) ./build.sh -p /dev/ttyACM0 - optional: you can pass on extra parameters for esp-idf builds ./run.sh - Does flash and monitor for ESP-IDF and simply builds and starts it for PC

The build scripts will detect if ESP-IDF is available. They will adapter if you ran ${IDF_PATH}/export.sh.

Development

Take a look at the App Lifecycle.

Directories explained:

  • app-esp: The ESP32 application example
  • app-sim: The PC/simulator application example
  • boards: Contains ESP modules with drivers
  • tactility: The main application platform code (src/)
  • tactility-esp: ESP-specific application code (e.g. wifi app and service)
  • tactility-core: Core functionality regarding threads, stdlib, etc. (src/)
  • libs: Contains a mix of regular libraries and ESP modules

Until there is proper documentation, here are some pointers:

License

GNU General Public License Version 3

Description
Tactility Working Copy
Readme 44 MiB
Languages
C++ 52.3%
C 40.4%
Assembly 4.6%
CMake 1.6%
Python 0.7%
Other 0.4%