Tactility “operating system” for the ESP32 microcontroller family supports built-in and external applications

Tactility is an operating system that runs on the ESP32 microcontroller series. Created by Dutch software developer, Ken Van Hoeylandt (also known as ByteWelder), Tactility is a project one year in the making inspired by the Flipper Zero and its application platform.

Tactility devices with logo

The ESP32 operating system can run built-in apps and helper services from flash storage as well as external applications from an SD card. It leverages the Espressif ELF(Executable and Linkable Format) loader to load ELF files from external storage to the executable memory area.

Tactility is built to run on any ESP32-based device with a touchscreen since drivers (display, touch, and SD card) can be implemented for any hardware. ESP32-S3 devices are “the best option” due to their performance and larger memory. The LILYGO T-Deck series is highly recommended for its onboard keyboard and sizable display. Preset configurations are available for the LILYGO T-Deck Plus, LILYGO T-Deck, M5Stack Core2, and M5Stack CoreS3.

Tactility graphical user interface

The operating system uses an LVGL-based graphic user interface and the entire platform runs on FreeRTOS. Bytewelder says that Tactility can be rightly called an operating system rather than an application platform since it has a launcher, supports internal and external apps, has an official SDK, and runs on a real-time operating system.

Tactility is an open-source project and is currently in its pre-release stage, with an official release still in the works. Firmware and SDK builds are available on GitHub, but they are only accessible for a few days or weeks after their creation.

Other real-time operating systems like Zephyr, B3OS, and Nuttx are supported by ESP32 SoCs. A headless version of the Tactility operating system is available for devices that come without a display. A QR code appears when Tactility crashes and when scanned, it opens a website that displays the crash information. There is also a PC simulator for ESP32 hardware designed to simplify and speed up software development. More information about the operating system is on the project’s website.

Via Reddit

Share this:

Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress

Radxa Orion O6 Armv9 mini-ITX motherboard
Subscribe
Notify of
guest
The comment form collects your name, email and content to allow us keep track of the comments placed on the website. Please read and accept our website Terms and Privacy Policy to post a comment.
12 Comments
oldest
newest
Willy
Willy
5 days ago

There was already a boot loader for the Odroid-GO which would list applications available on the SD card and let you boot the one you want. It was nice, but it was slow because what it really did was to locally flash the selected application and reboot to it. But it was already a giant step forward compared to previous approaches. Here it indeed seems different (and much better) by directly executing one application from another one, just like we’re doing on a classical operating system. It can allow to make them much more modular. I’ve done something a bit… Read more »

Klh
Klh
5 days ago

Yeah but this “OS” is not really what’s doing the work here – espressif’s ELF loader does that. This is just a fancy launcher.

andelf
andelf
4 days ago

..and an official API. I napkin developed a system like this. It’s a very good idea to use the elf loader.
I assume you only run a single application at a time, and when you exit, the launcher application is restarted. A simple, easy and very useful pluggable system

Willy
Willy
4 days ago

Yes that’s the idea. You design your main program as a shell script which relies on many small applications, only one of which runs at a time, except that instead of having an exit() to return to the main script, you just arrange them using execve(). I didn’t know that Espressif supported an ELF loader, and of course that’s super convenient.

Ken Van Hoeylandt
4 days ago

Currently, you can only run a single ELF app at any given time, but ELF apps can also start another (non-ELF) app. I will support running multiple ELF apps in the future too.

Internal apps can start as many internal apps as needed (and as memory allows for). Lots of internal apps are split into multiple small ones, for example:

  • Files app launches ImageViewer, TextViewer or ELF apps from SD card.
  • WiFi settings calls the Wifi Connect app
  • Time & Date can start TimeZone selection app
  • There are utility apps like AlertDialog and SelectionDialog
Ken Van Hoeylandt
4 days ago

The ELF loader only facilitates executing a single main function. It’s super convenient of course, and it’s definitely empowering the entire system.

Calling it “just a fancy launcher” is disingenuous because there’s much more: a Hardware Abstraction Layer (a standardized way to build drivers), apps with state management, a 2D pipeline based on LVGL, a way to create and run background services, an SDK to develop apps, APIs to talk with hardware (e.g. thread-safe I2C), a simulator to run parts on PC, etc.

anan
5 days ago

An interesting option for using esp32 devices.

Sander
Sander
4 days ago

“Created by Dutch software developer, Ken Van Hoeylandt”

How do you know?

The capital V in Van looks Belgian, just like the last name itself.

Ken Van Hoeylandt
4 days ago

Well-spotted. I’m from Belgium originally, but I’m a Dutch national these days.

Sander
Sander
4 days ago

Inburgeringscursus doorlopen?

😉

Ken Van Hoeylandt
4 days ago

Thanks for writing the article! <3

Boardcon EM3562 Rockchip RK3562 SBC with 8 analog camera inputs