A simple async menu system for MicroPython using a rotary encoder and OLED display for embedded projects.
Encodermenu is a simple GUI menu system for MicroPython that allows developers to create interactive interfaces on microcontrollers using a rotary encoder and a small display. It solves the problem of adding user-friendly input and navigation to embedded projects without a full graphical framework. The system supports menus, submenus, data entry, and asynchronous operation to handle long-running tasks.
Embedded developers and hobbyists working with MicroPython on devices like Raspberry Pi Pico, ESP32, or ESP8266 who need a basic menu interface for configuration or control.
Developers choose Encodermenu for its minimal footprint, ease of integration with common hardware like rotary encoders and OLEDs, and built-in async support that prevents blocking in resource-constrained environments.
Simple GUI menu for micropython using a rotary encoder and basic display.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Built on uasyncio, it prevents blocking during long-running tasks, allowing concurrent operations like sensor readings or LED patterns without freezing the menu.
Works with framebuf-compatible displays like SSD1306 OLEDs and provides abstraction functions to easily swap rotary encoder or display libraries, adapting to various hardware setups.
Includes get_integer, get_selection, and wizard functions for straightforward numeric and string input, with results stored in a global dictionary for easy access.
Designed for MicroPython on resource-constrained microcontrollers like Raspberry Pi Pico, with no complex dependencies, emphasizing simplicity and practicality.
The project is still in development, with the README warning that documentation may not match the code, leading to potential bugs or breaking changes.
Back navigation requires a dedicated menu item rather than hardware events like long-press or double-click, making it less intuitive for some users.
Utility functions like make_task and stop only handle one global task at a time, restricting more complex asynchronous workflows without manual uasyncio management.