Firmware Launcher for ESP32 boards like: M5Stack, Lilygo, Marauder and CYD devices.
# Launcher
Application launcher for M5Stack, Lilygo, SeeedStudio, Waveshare, CYD, Marauder, and many other ESP32 devices.
Join our [Discord community](https://discord.gg/BE9by2a2FF)
## How to Install
* Use the Flasher: [Launcher Flasher](https://bmorcelli.github.io/Launcher/).
* Use M5Burner, or
* Download the .bin file from Releases for your device and use https://web.esphome.io/ or esptool.py to flash the file `Launcher-{YourDevice}.bin` to your device.
## How to Use
* Turn your device on
* Press Sel (Enter) on the Launcher start screen to get into Launcher
* Choose OTA to install new binaries from online services (M5Burner or GitHub links)
* After installation, when you turn on the device, the installed program will launch if you don't press anything.
## My SD Card doesn't work!
* Make sure your SD card is SDHC (not SDXC)
* Use a maximum size of 32GB (I use 8 or 16GB)
* Format it as FAT32 (use [Rufus](https://rufus.ie/) to format your SD card)
* Ensure the partition scheme is MBR, not GPT
* Although exFAT and bigger SDCards are supported since 2.8.0, smaller ones are recommended.
## With Launcher you'll be able to:
OTA - OTA Update
- Install binaries from online repositories (M5Burner or GitHub links) without needing a USB cable
- Install binaries from a WebUI that you can start from the WUI option, using binaries you have on your computer or smartphone
- Install binaries from your SD card
SD - SD Card Management
- Create new folders,
- Delete files and folders,
- Rename files,
- Copy and paste files,
- Install binaries
WUI - Web User Interface
- Manage files on the SD Card
- Install binaries wirelessly using the OTA Update option
- Edit text files
- Edit NVS information (UiFlow2 data, Launcher settings, and others)
- Deploy installations from the file list
CFG - Configurations (Customization)
- Charge Mode
- Change brightness
- Change dim time
- Change UI color
- Avoid/Ask SPIFFS (change whether Launcher asks to install the SPIFFS file system; only Orca One uses this feature)
- Change rotation
- All files/Only Bins (see all files or only .bins - default)
- Change partition scheme (allows installing large apps or UiFlow2, for example)
- List of partitions
- Clear the FAT partition
- Save SPIFFS (save a copy of the SPIFFS partition to restore when needed)
- Restore SPIFFS
PMan - Partition Manager
- View current partition scheme
- Create partitions
- Delete partitions
- Format partitions
- Back up data partitions (SPIFFS or FAT)
- Restore data partitions (SPIFFS or FAT)
- Resize partitions
Tips
* Having an SD card gives you a better experience, but it is not required. [SD Card Hat for M5StickCs](https://www.thingiverse.com/thing:6459069)
* You can learn more about how it works on the [Launcher Wiki](https://github.com/bmorcelli/Launcher/wiki/Explaining-the-project).
* Where/how do I find binaries to launch? -> [Obtaining binaries to launch](https://github.com/bmorcelli/Launcher/wiki/Obtaining-binaries-to-launch)
* Now you can download binaries from [HERE!](https://bmorcelli.github.io/Launcher/catalog.html)
## Known Issues
* UiFlow 1 doesn't work with Launcher. It uses an old MicroPython distro, which uses an old ESP-IDF distro with lots of secrets that I couldn't figure out.
## To-Do list
Things that need to be done in future updates
* [ ] LVGL UI (?)
* [ ] Move to ESP-IDF Platform
## Latest Changelog
* 2.10.0:
* [x] Port to [SeeedStudio XIAO ESP32C5](https://www.seeedstudio.com/Seeed-Studio-XIAO-ESP32C5-p-6609.html?sensecap_affiliate=dhriNBA&referring_service=link) on **Headless** environment
* [x] Port to [SeeedStudio XIAO ESP32S3 Plus](https://www.seeedstudio.com/Seeed-Studio-XIAO-ESP32S3-Plus-p-6361.html?sensecap_affiliate=dhriNBA&referring_service=link) on **Headless** environment
* [x] Port to [SeeedStudio reTerminal D1001 8"](https://www.seeedstudio.com/reTerminal-D1001-p-6729.html?sensecap_affiliate=dhriNBA&referring_service=link)
* [x] Port to [SeeedStudio reTerminal E1001 Monochrome e-Paper Display](https://www.seeedstudio.com/reTerminal-E1001-p-6534.html?sensecap_affiliate=dhriNBA&referring_service=link)
* [x] Port to [SeeedStudio SenseCAP Indicator](https://www.seeedstudio.com/SenseCAP-Indicator-D1L-for-Meshtastic-p-6304.html?sensecap_affiliate=dhriNBA&referring_service=link)
* [x] **BETA**: [XTeink X4 Pro](https://www.xteink.com/products/xteink-x4-pro-pocket-ereader) Validated UC8xxx display.
* [x] **Added** Option to control bootscreen time (from 1 to 5 seconds).
* [x] **Added** Option to disable starting Launcher from DeepSleep. Some e-ink firmwares (CrossInk, CrossPoint etc..) use agressive deepsleep controls to save energy, and by default it used to trigger Launcher bootscreen, adding time to the device/firmware recovery. Now you can Disable this behaviour and trigger Launcher only on Power On reason. Use it with care, and in devices with exposed RST button, otherwise getting back to Launcher can be impossible on some devices
* [x] **Added** Option to start Launcher when a button is pressed during a restart. This is a siruation where you will only see the Launcher bootscreen if you Turn on/Restart/recover from deepsleep the device if that configured button is pressed. Combined with the previous option it makes Launcher *stealthy*, and will only show up if you want. Boot Button can't be configured for this function, and it is available only on devices with GPIO driven buttons available (Touchscreen/keyboard/encoder only devices will not have this option)
* [x] **FIXED** `Lilygo T-Watch Ultra` and `Lilygo T-Display S3 Amoled Plus` touchscreen
* [x] **FIXED** `M5Stack Tab5` OTA function randomly crashing.
* [x] **Changed** `M4Stack Paper Mono` display backend.
* 2.9.1:
* [x] Fix **M5-Paper Mono** rendering and touch issues.
* [x] Fix **SeeedStudio ReTerminal Sticky** back from Deepsleep issue, allowing CrossPoint and other firmware to reboot.
* [x] Fix **Lilygo T-Deck Pro** touchscreen issue.
* 2.9.0:
* [x] Port to [M5-Paper](https://shop.m5stack.com/products/m5paper-esp32-development-kit-v1-1-960x540-4-7-eink-display-235-ppi?ref=Pirata)
* [x] Port to [M5-Paper Mono](https://shop.m5stack.com/products/m5papermono-with-lora-nfc-800x480-3-97-eink-display?ref=Pirata)
* [x] Port to [M5-Paper Color](https://shop.m5stack.com/products/m5paper-color-esp32s3-dev-kit?ref=Pirata) - Different workflow, Prints on scren but works only through WebUI. Display takes long time to render, making navigation almost impossible for Launcher.
* [x] Port to [T-Display P4](https://lilygo.cc/products/t-display-p4?bg_ref=sDI8Bh4HmO)
* [x] Port to [T-Display C5](https://lilygo.cc/products/t-display-c5?bg_ref=sDI8Bh4HmO)
* [x] Port to [ESP32-S3 ES3C28P 2.8"](https://www.lcdwiki.com/2.8inch_ESP32-S3_Display) aka `Cheap Black Display`, thanks to @AlexeOnTheShip
* [x] Port to [Elecrow Crowpanel Advance ESP32-S3 5.0in](https://www.elecrow.com/crowpanel-advance-5-0-hmi-esp32-ai-display-800x480-ips-artificial-intelligent-touch-screen.html)
* [x] Port to [Elecrow Crowpanel Advance ESP32-P4 7.0in](https://www.elecrow.com/crowpanel-advanced-7inch-esp32-p4-hmi-ai-display-1024x600-ips-touch-screen-with-wifi-6-compatible-with-arduino-lvgl-micropython.html)
* [x] Port to [ESP32 E32R40T 4"](https://www.lcdwiki.com/4.0inch_ESP32-32E_Display)
* [x] Port to [SeeedStudio ReTerminal Sticky](https://www.seeedstudio.com/reTerminal-Sticky-p-6861.html?sensecap_affiliate=dhriNBA&referring_service=link), thaks to @limengdu
* [x] Port to [Waveshare-ESP32-C5-LCD-1.47](https://www.waveshare.com/wiki/ESP32-C5-LCD-1.47)
* [x] Port to [Waveshare-ESP32-C6-LCD-1.47](https://www.waveshare.com/wiki/ESP32-C6-LCD-1.47)
* [x] Port to [Waveshare-ESP32-C6-LCD-1.3](https://www.waveshare.com/wiki/ESP32-C6-LCD-1.47)
* [x] Port to [XTeink X3](https://www.xteink.com/products/xteink-x3)
* [x] **BETA**: Port to [XTeink X4 Pro](https://www.xteink.com/products/xteink-x4-pro-pocket-ereader) - Need validating touchscreen and display
* [x] **ATENTION**: Arduino **Nesso N1** and **M5Stack StickS3** Navigation has changed, Front button short press to move Next and Long press to Select, Side button short press to mode Previous an long press to Escape.. on Keyboard, holding Escape will change the moviment from Left/Up to Right/Down, so typing will be easier to handle (after you master it).
* [x] **Added** option to opt-out from Automatically connect to a known Network.
* [x] **Added** possibility to create new files using the WebUI.
* [x] **Changed** brightness control, now it uses a slider bar with 5% steps.
* [x] Moved display drivers handling to [DisplayDrivers](https://github.com/bmorcelli/DisplayDrivers) lib, using its superclass to handle all display drivers used by Launcher. This removed `tft.h`/`tft_inits.h` and the Arduino_GFX DSI patch scripts from the project.
* [x] Reorganized boards files to make porting easier. It now needs only 2 files and add it to CI/CD. Per-board JSON files were replaced by one per chip family (`esp32`, `esp32s2`, `esp32s3`, `esp32c3`, `esp32c5`, `esp32c6`, `esp32p4`), and envs that only differ by pinout were merged (`m5stack-plus`, `lilygo-t-embed-all`, `xteink-x3-x4`).
* [x] Removed `phy_init` partition and increased NVS to 0x5000
* [x] Centralized NVS code handlers, and added a `nimble` compatibility layer between firmwares. Now older and newer versions of nimble_bonds are saved per device (it happens only when using BLE to connect to a device, creating bound data) and it is switched and restored when changing firmware in runtime. relate to this [issue](https://github.com/bmorcelli/Launcher/issues/400)
* [x] Devices are now described by `HAS_2_BUTTONS`/`HAS_6_BUTTONS` and long-press navigation, replacing the old per-board button workarounds.
* [x] Fixed original M5Paper display and SD bus, thanks to @Decentricity
* [x] Fixed Marauder v6.1 hypersensitive touch and SPI noise, thanks to @H4W9
* [x] Fixed T-Display P4 install from SD Card and the SD/display bus conflict
* [x] CI/CD now cancels superseded runs, retries flaky PlatformIO builds and caches the PlatformIO core; added a `clang-format` script and `.gitattributes` to keep the source formatted.
* 2.8.0:
* [x] Port to Xueersi-XiaoMiao
* [x] Lilygo T-Watch-Ultra now has OTA installing
* [x] **Shortcut system for Keyboard devices**: Devices with Keyboard can bind a binary to a key, and install it with the press of one key from Main menu
* [x] **Fastboot for Keyboard and Touchscreen devices**: On bootscreen you can press a key or touch the screen to fast boot into an installed firmware
* [x] **Added Serial interface**: type "help" on serial to check available commands, you can configure Wifi from there, useful for devices like StickCPlus2 and others without keyboard or touchscreen: e.g. "wifi add MyNetworkSSID MyN37w0rkPWD", calibrate touchscreen, mirror X/Y axis or swap XY axis.
* [x] **Downloaded firmware update list**. Now launcher can check the firmware you downloaded, stored at `{dwn_path}/downloaded.json` and check if there are new versions of these firmwares, and it can download all new files directly to your SDCard if you hit `[Update All]`.
* [x] **Multi-part binary download**: Firmware composed by multiple files (bootloader.bin, partitions.bin, firmware.bin and data.bin) available on LauncherHub are now downloaded and merged at runtime. It fetches data, one by one, and saves them into on single file to be flashed from the SDCard.