MicroPython on ESP32: Simplify Your IoT Programming

Are you ready to revolutionize your IoT projects? Discover the power of MicroPython on the ESP32 board, a game-changer for both beginners and seasoned developers in the embedded systems arena. This comprehensive guide will walk you through everything you need to know to kickstart your MicroPython ESP32 projects with ease.

Why Choose MicroPython for ESP32 Programming?

The ESP32 has become a favorite in the IoT (Internet of Things) landscape due to its low cost and high performance. While traditionally programmed using C/C++ via the Arduino IDE, the introduction of MicroPython has transformed the development process for ESP32-based projects.

MicroPython, a lightweight version of Python tailored for microcontrollers like ESP32, offers several key advantages:

  1. Rapid Prototyping: Write and execute Python code directly on the ESP32 without lengthy compilation processes.
  2. Extensive Libraries: Access a wide range of built-in modules and easily integrate with various sensors and peripherals.
  3. User-Friendly Syntax: The simplicity of Python makes it accessible for beginners while still powerful enough for advanced ESP32 applications.
  4. Interactive Development: Use the REPL (Read-Eval-Print Loop) for quick testing and debugging.
  5. Resource Efficiency: Optimized for microcontrollers, MicroPython runs efficiently on ESP32’s limited resources.

Getting Started with MicroPython on ESP32

Here’s a step-by-step guide to installing MicroPython on an ESP32 using Thonny IDE:

  • Install Thonny IDE:
    Go to the Thonny website (https://thonny.org/) and download the appropriate version for your operating system. Follow the installation instructions for your platform:

Thonny

 

  1. For Windows: Click the Windows link, download the installer, and run it
  2. For Mac: Don´t know 🙂 … never had a Mac.
  • Install/Check if the ESPTOOL Plugin is installed  (In my Thonny version, was pre-installed so… OK):
    Once Thonny is installed, open it and go to “Tools” > “Manage packages”. In the package manager, search for “esptool” and install it if necessary.

 

Plug-in 1

 

Plug-in 2

Check if it is installed, if not, do it:

Plug-in 3

 

  • Flash MicroPython Firmware:
    Connect your ESP32 to your computer via USB. Put it in programming mode by Press and hold BOOT + press and release RST, then finally release BOOT. (IN SOME BOARDS YOU DON´T NEED TO).

The shell will show the  message:

73_Programming Mode

  • In Thonny, go to “Tools” > “Options” > “Interpreter”. Select “MicroPython (ESP32)” as the interpreter and choose the appropriate port for your ESP32. Click “Install or update firmware“.

73_6

 

73_6

 

73_6

 

73_6

 

73_10

 

  • Reset the board by pressing EN! (ONCE AGAIN, IN SOME ESP32 BOARDS YOU DON´T NEED TO). Check the firmware version and compare with the ones in the MicroPython website:  

(https://micropython.org/download/esp32/)

73_Reset

 

 

 

Using MicroPython’s REPL

The REPL (Read-Eval-Print Loop) is an interactive prompt that allows you to communicate directly with your MicroPython interpreter. This feature is invaluable for testing code snippets quickly and debugging.

Key Features of REPL:

  • Immediate Feedback: You can enter commands and see results instantly.
  • Variable Inspection: Easily check variable values using simple commands.
  • Error Handling: Quickly identify errors in your code as they occur.

Example Usage:

To start using REPL, connect to your ESP32’s serial interface and enter commands like this (it will light up the onboard LED that is connected to the GPIO2 of the Esp32 internally):

Type first this (one at a the time):

from machine import Pin
led = Pin(2, Pin.OUT)

Then This (Watch the onboard Led of the Esp32 board):

led.on() # Turn LED off

And finally this (Watch the onboard Led of the Esp32 board):

led.off() # Turn LED on

You can also use commands like dir() to list available variables or help() to get assistance on functions. Use the up arrow on the keyboard to select previous instructions.

 

 

Helpful Shortcuts:

  • Ctrl-L: Clear the shell
  • Ctrl-D: Soft reset
  • Ctrl-C: Interrupt current program
  • Ctrl-A: Enter raw REPL mode
  • Ctrl-B: Return to normal REPL mode

The REPL is an excellent tool for both beginners and experienced programmers, allowing you to experiment with code in real-time.

Hands-On Examples: Programming ESP32 with MicroPython

After following these steps, your ESP32 should be running MicroPython, and you can start programming it using Thonny IDE. Remember to save your code files with a .py extension

Blinking an LED with ESP32 and MicroPython (You may need to reset the board)

Let’s start with a classic project: blinking an LED using MicroPython on ESP32. This simple example demonstrates how to control GPIO pins and implement timing in MicroPython.

from machine import Pin
import time
led = Pin(2, Pin.OUT) # GPIO2 is often connected to the onboard LED
while True:
     led.value(not led.value()) # Toggle LED state
     time.sleep(0.5) # Wait for 0.5 seconds

Pay attention to the indentation of the code, Python works this way. If not, the code won´t run or it will give errors.

Run the script by pressing the green button, if everthing goes right, you will see the esp32 onboard LED blinking.

 

73_13_1

Controlling an LED with a Button on ESP32 (You may need to reset the board)

Next, let’s create a more interactive project by controlling the LED with a button:

from machine import Pin
import time

led = Pin(2, Pin.OUT)
button = Pin(0, Pin.IN, Pin.PULL_UP)  # Use internal pull-up resistor

print("ESP32 Button and LED Control with Debug")
print("Press the button to turn the LED on")

while True:
    if button.value() == 0:  # Button is pressed (active low)
        led.value(0)  # Turn LED on
        print("Button pressed - LED ON")
    else:
        led.value(1)  # Turn LED off
        print("Button released - LED OFF")
    
    time.sleep(0.1)  # Small delay to avoid flooding the output

 

Connect the button

  • Connect one terminal of the button to GPIO 0 on the ESP32.
  • Connect the other terminal of the button to GND on the ESP32

 

circuit_73

In this case with the ESP32, we don’t need an external pull-up resistor. Here’s why:

  • Internal Pull-up Resistors:

The ESP32 has built-in pull-up resistors that can be enabled in software. When you use Pin.PULL_UP in your code, you’re activating these internal pull-up resistors.

  • How It Works:
  1. When the internal pull-up is enabled, the pin is held at a high state (3.3V for ESP32) (Logic one) when the button is not pressed.
  2. When the button is pressed, it connects the pin directly to ground, pulling it low (Logic zero).

Result

This setup creates a simple, responsive system where the LED state directly reflects the button state, with real-time feedback through the console output.

 

73_14

 

Optimizing Your MicroPython Code for ESP32

As you become more proficient with MicroPython on ESP32, consider these optimization techniques to enhance your code’s performance and efficiency:

Direct Imports for Faster Execution

Use direct imports to improve execution speed and reduce memory usage:

# Instead of this:
import machine
led = machine.Pin(2, machine.Pin.OUT)
# Use this:
from machine import Pin
led = Pin(2, Pin.OUT)

Useful Links and Resources

Frequently Asked Questions

Q: What are the main advantages of using MicroPython on ESP32?
A: MicroPython on ESP32 offers rapid prototyping, easy-to-read code, a wide range of libraries, and the ability to run Python directly on the microcontroller. It’s ideal for quick IoT project development and learning embedded systems programming.

Q: How does MicroPython performance compare to C++ on ESP32?
A: While MicroPython is generally slower than C++, it offers faster development time and easier debugging. For most IoT applications, the performance difference is negligible; thus development speed advantages often outweigh any slight performance loss.

Q: Can I use all Python libraries with MicroPython on ESP32?
A: MicroPython includes a subset of Python libraries optimized for microcontrollers. While not all standard Python libraries are available, it provides alternatives needed in embedded systems projects.

Q: How do I update MicroPython firmware on my ESP32?
A: To update firmware, download the latest version from the official website; connect your board; then use tools like esptool or Thonny IDE to flash it onto your device.

Q: Is MicroPython suitable for commercial IoT products using ESP32?
A: Yes! It’s particularly useful for rapid prototyping but can also be used in commercial products requiring frequent updates or those that benefit from quick iterations.

Conclusion: Unleash the Power of MicroPython on ESP32

MicroPython on the ESP32 offers an accessible yet powerful platform for embedded systems and IoT development. Whether you’re a beginner looking to enter this world or an experienced programmer seeking efficiency in your development process, this combination can help you bring innovative ideas to life quickly. Remember that mastering MicroPython requires practice—start simple, gradually increase complexity, and explore community resources available online. Happy coding! This version places emphasis on using REPL before diving into hands-on examples while ensuring that all sections are comprehensive and informative.