I followed a guide online to compile C code to .mpy files for micropython on the esp32.
I did this by creating a dockerfile to create my work environment:
FROM ubuntu:23.04
RUN apt-get update
RUN apt-get -y install git wget flex bison gperf python3 python3-pip \
python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util
RUN apt-get -y install python-is-python3 python3 python3-pip
RUN pip3 install pyelftools>=0.29
WORKDIR /src/esp
RUN git clone -b v4.4.3 --recursive https://github.com/espressif/esp-idf.git
RUN git clone https://github.com/micropython/micropython.git
WORKDIR /src/esp/esp-idf
RUN ./install.sh
RUN echo "#! /bin/bash\n. /src/esp/esp-idf/export.sh" > esp32_idf
RUN chown 777 esp32_idf
RUN chmod +x esp32_idf
ENV PATH="${PATH}:/src/esp/esp-idf/"
WORKDIR /src/esp/micropython/mpy-cross
RUN make
ENV PATH="${PATH}:/src/esp/micropython/mpy-cross/build/"
WORKDIR /src/esp/bin
RUN wget https://github.com/espressif/crosstool-NG/releases/download/esp-2022r1/xtensa-esp32-elf-gcc11_2_0-esp-2022r1-linux-amd64.tar.xz
RUN tar -xvf xtensa-esp32-elf-gcc11_2_0-esp-2022r1-linux-amd64.tar.xz
ENV PATH="${PATH}:/src/xtensa-esp32-elf/bin"
WORKDIR /src/mylib
I then built and ran the image using
docker build -t mpy-lib-builder:t1 .
docker run -it --rm -v "$(pwd)"/lib:/src/mylib mpy-lib-builder:t1 bash
I then copied some files from the micropython examples that can be seen here. I wanteed to use womthing pre-written to test it out. I updated the Makefile to use ARCH = xtensawin
(which I am told is the one to use for the esp32 board).
Inside the docker container, I ran the make command, which produced the files:
-lib/
--features0.mpy
--features0.c
--Makefile
--build/
---features0.config.h
---features0.native.mpy
---features0.o
I moved all these files and folder to the root directory of my main application. I then flashed the application to my esp32. When I try to import features0
, I get ImportError: no module named 'features0'
. Everything else, including other *.py files import just fine. Any ideas what I am doing wrong?
If anyone wants the source code to try it out, just ask and I'll push it to a public repo.