Micropython-main-boot
Startup Sequence
When powered up, the PymateIO initialize the MicrPython virtual machine which executes the following steps.
Virtual Machine Initialization
Among the various initialization tasks, the firmware will open the USB-Serial communication channel.
The USB-Serial is defined as standard input & standard output (usually named stdin & stdout).
The MicroPython virtual machine starts and the USB-Serial is defined as standard input & standard output (usually named stdin & stdout).
The REPL get initialized and attached to the standard input/outpout (so the USB-Serial).
From now, any Python print() statement, as well as error, will be reported to the USB-Serial line.
boot.py script
Loading the boot.py is the first operation performed by the virtual machine.
The virtual machine jump to the next step if the file is not available.
The role of the boot.py script is to perform a quick hardware initialization at startup.
It is also a good place to mount additionnal file systems.
Remarks:
- Interacting with MicroPython is almost impossible during the processing of boot.py .
- When using tools like Thonny, MPRemote, etc then boot.py execution time will be added to each connection attempt.
main.py script
The main.py script is the file containing the user program to execute at startup.
If the file is missing or script produce an error then the virtual machine jump to the next step (interactive REPL session).
REPL session
The interactive REPL session is always the final execution step of the MicroPython virtual machine.
That means that interactive REPL will get actives when:
- No main.py file is available.
- main.py terminates its execution.
- An error occurs in main.py (which interrupts the script execution).
Create main.py
In Python and MicroPython, the main.py script is responsible for creating its mainloop.
The mainloop is this section of code executing again and again the same section of code (say, the core of the project).
The best approach is to creates an while True infinite loop running the mainloop block of instructions.
An initialization block usually precede the infinite loop. Its role is to create/initialize the objects/items used by the mainloop block.
The main.py file should have the following structure:
# Initialization block here
while True:
# Mainloop block hereQuite simple! Isn't it?
From automation perspective, a PLC should never stays "inactive" when an error occurs.
This can be solved by setting the MicroPython Watchdog. The watchdog will resets the Pymate when activities are unexpectedly halted.
This is described in the Common use-cases tutorials
PymateIO all right reserved © 2026 - Written by MCHobby for PymateIO


