micropython-esp32-ulp is an assembler toolchain for the ESP32 ULP (Ultra Low-Power) Co-Processor, written in MicroPython.
It can translate small assembly language programs to a loadable/executable ULP machine code binary, directly on the ESP32 microcontroller.
This is intended as an alternative approach to assembling such programs using the binutils-esp32ulp toolchain from Espressif on a development machine.
It can also be useful in cases where binutils-esp32ulp is not available.
The following features are supported:
- the entire ESP32 ULP instruction set
- constants defined with
.set
- constants defined with
#define
- expressions in assembly code and constant definitions
- RTC convenience macros (e.g.
WRITE_RTC_REG
) - many ESP32 ULP code examples found on the web will work unmodified
To get going run the following directly on the ESP32:
# Step 1: Install micropython-esp32-ulp
# IMPORTANT: Ensure the ESP32 is connected to a network with internet connectivity.
import upip
upip.install('micropython-esp32-ulp')
# Step 2: Run an example
# First, upload examples/counter.py to the ESP32.
import counter
The examples/counter.py example shows how to assemble code, load and run the resulting binary and exchange data between the ULP and the main CPU.
See docs/index.rst.
The minimum supported version of MicroPython is v1.12.
An ESP32 is required to run the ULP machine code binary produced by micropython-esp32-ulp (the ESP32-S2 will not work as it is not binary compatible with the ESP32).
This project is released under the MIT License.