The local directory structure and files after all examples:
$ tree .
|____firmware
| |____esp32-20230426-v1.20.0.bin
|____examples
| |____mpy
| |____example_module.py
|____venv
| |____bin
...So far, you should pay attention to the freely available memory with microcontrollers. Each character in your code requires some storage space, for example comments. However, comments and docstrings are important and should therefore not be deleted!
There is also the issue of performance. If the code is already provided pre-compiled in bytecode, there can be advantages here. Once the code is frozen it can be quickly loaded and interpreted by MicroPython without as much memory and processing time.
Finally, you can also protect your code somewhat from strangers. It won't be possible for everyone to reverse engineer this bytecode again. However, there is no 100% protection here.
Here you will find all needed information about *.mpy files.
At a later date I will explain how you can build your own MicroPython firmware. Frozen modules are also used again.
The MicroPython mpy-cross compiler will help you to easily compile *.py scripts into *.mpy files.
# install mpy-cross
(venv) $ pip3 install mpy-cross
# show help (optional)
(venv) $ mpy-cross -hYou'll soon realize that the process is super simple.
# run mpy-cross compiler
(venv) $ mpy-cross example_module.pyNow use rshell to copy the *.mpy file to the pyboard folder on your microcontroller.
Create example module
Now create a new folder with a sample Python script (inside your local project).
# create subdirectory for example
$ mkdir -p ~/Projects/ESP/examples/mpy
# create a example module
$ touch ~/Projects/ESP/examples/mpy/example_module.pyInside this path you should now create a file called example_module.py with the following code.
from gc import mem_free
print('[INFO] MPY example')
print(f'[INFO] Memory free {mem_free()} bytes')Now compile this module.
# change directory
(venv) $ cd ~/Projects/ESP/examples/mpy/
# run compile
(venv) $ mpy-cross example_module.py
# list directory files (optional)
(venv) $ ls -laCopy *.mpy file to microcontroller
It's a good practice to add your
*.mpymodules into directory/pyboard/lib/.
# start serial connection
(venv) $ rshell -p [SERIAL-PORT]
# create new directory
/your/current/path> mkdir /pyboard/lib
# copy mpy via rshell
/your/current/path> cp example_module.mpy /pyboard/lib/example_module.mpy
# list files and directories (optional)
/your/current/path> ls /pyboard/
# list files inside lib directory (optional)
/your/current/path> ls /pyboard/lib/Run *.mpy via REPL
# start REPL via rshell
/your/current/path> replImport the module and watch the output.
>>> import example_moduleTo delete the *.mpy file from microcontroller, follow the next command.
# cleanup example
/your/current/path> rm /pyboard/lib/example_module.mpyThis was just an example for understanding! In this example, the file size of the
*.mpyis slightly larger than that of the*.pyfile.