• 28
    Oct - 2017

    MicroPython
    5 min | 5452

    #Tutorial: Getting started with MicroPython

    MicroPython | 5 min | 5452


    atom.io
    esp32
    micropython
    tutorial
    visual studio code
    wemos
    wipy

    Another quick tutorial, this time for MicroPython on ESP32/ESP8266. You can find all the information that I'm writing in this post in different articles on the Internet but I've not found anything that summarizes all the topics. That is why I am writting this post. I included some links at the end of each topic to extend the info. Feel free to visit them if you want more info, or write a comment I will try to respond it.

    Python Code: https://github.com/lemariva/ESP32-MicroPython

    MicroPython & Board

    What's MicroPython?

    Quoting the official micropython page results in the following

    MicroPython is a lean and efficient implementation of the Python 3 programming language that includes a small subset of the Python standard library and is optimised to run on microcontrollers and in constrained environments.

    As you see, in my last posts (sorry about the link, I need some pagekit taxonomy!), I have been programming the Wipy 2.0. This board is a tiny MicroPython enabled WiFi & Bluetooth IoT development platform.

    Other development boards/kits, that support MicroPython are the following:

    WeMos ESP32 DevTool (WROOM) includes a slot for a battery. x 1
    ESP32 DevkitC ESP32 DevkitC V4/V1 (WROOM) x 1
    TTG0 Lora ESP32 TTGO (WROOM) includes a SX1276 (LoRa) and a SSD1306 (display) x 1
    ESP32 Wrover ESP32 (WROVER) x 1
    WeMos D1 Mini ESP8266 x 1
    WiPy 3.0 WiPy 3.0 x 1

    The cheapest boards are the ESP8266. The have only 160kb RAM which could be a problem (you usually get a memory error exception, when you import 3 or 4 libraries). The ESP32 WROOM has about 512kb RAM and the WROVER about 4MB. There is also a new WROVER-B that has 8MB RAM.

    More Info

    MicroPython

    Software Requirements

    You can download and compile the MicroPython firmware from the GitHub repository, or you can download a compiled firmware from here. I took the second way.

    To download the firmware to the ESP32 microcontroller, you have to install Python. You can use either Python 2.7 or Python 3.6. Then, you need to install pip. A tutorial for installing pip on Windows can be found here. pip can be downloaded from get-pip. After that, you need to install the esptools using the following command

    pip install esptool
    # or usually on windows
    python -m pip install esptool 

    You should get something like the Fig 1 (I typed python3 because I've the two versions (2.7 & 3.6) on Windows, so I changed the name of the executable file to python3.exe). Remember to include the Python directory to the Windows path in the Environment Variables.

    Installing esptools tool
    Fig. 1: Installing esptool on Windows.

    You should also install ampy. This tool is useful for uploading files to the ESP32 via serial interface. To do that, you need to type the following on a command prompt

    python3 -m pip install adafruit-ampy

    More Info

    Python 3.6
    pip
    esptool
    ampy

    Firmware Download & Installation

    Download the MicroPython firmware from here. You have to download the image under Firmware for ESP32 boards. Do not try another firmware; it is not going to work.

    Connect the Wemos to the PC using an USB cable, and check the serial interface number where the CP201x is connected (turn the board on, if it is not). On Windows open the Device Manager and look under Ports (COM & LPT). In my case, the port is COM17. On Linux, it should be under /dev/ttyUSBx (change x to the corresponding port number). Using dmesg you should look for something like this: usb 5-3: cp210x converter now attached to ttyUSB0.

    Checking Device Manager
    Fig. 2: Windows Device Manager.

    First, open a cmd/terminal. The flash of the ESP32 need to be erased. To do so, just give the command bellow on the command line:

    # for Windows
    python -m esptool --port COM17 erase_flash 
    # for Linux
    python -m esptool --port /dev/ttyUSB0 erase_flash 

    You need to change the COM17 or /dev/ttyUSB0 to the serial port where your ESP32 is connected.

    After this, we can upload the firmare (.bin file) to the ESP32 with the command bellow.

    # for Windows
    python -m esptool --port COM17 --baud 460800 write_flash --flash_mode dio --flash_size=detect 0x1000 <firmware_name>.bin
    # for Linux
    python -m esptool --port /dev/ttyUSB0 --baud 460800 write_flash --flash_mode dio --flash_size=detect 0x1000 <firmware_name>.bin

    Again, you need to replace the port with your ESP32 COM port. In addition, you need to change the <firmware_name>.bin with the path where your firmware file is located and the name of the file. If you get an error like Fig. 3, you should close all open connections to the board (e.g. putty, serial console etc.).

    Error by uploading MicroPython firmware
    Fig. 3: Error by uploading MicroPython firmware

    If everything goes right, you get some results as the one on Fig. 4.

    Uploading MicroPython Firmware
    Fig. 4: Uploading MicroPython Firmware

    Programming using Atom and PyMakr plugin

    Download Atom.io from here and install it. Then, search for the plugin pymakr. To do so, go to Packages, and then Settings View and Install Packages/Themes (see Fig. 5).

    Install Packages on Atom.io
    Fig. 5: Install Packages on Atom.io

    Type pymakr to search the plugin, wait a second, and then when it comes in the plugin list, install it using the install button (Fig. 6) -version 1.2.0 is available.

    PyMakr Installation
    Fig. 6: pymakr Installation

    If everything goes right, you get a console on Atom (lower side of the right panel), that can be configured to connect to the ESP32. The console should look like Fig. 7.

    Atom Console
    Fig. 7: Atom pymakr Console

    It is usually closed at the beginning; you need to click on the open button on the right. Before that, you should click on Settings to configure again the port on which the Wemos board is connected. You can set a Global settings (Fig. 8) for all your projects or a Project settings if you have more than one board connected to your PC and different projects running on these boards.

    • Note for Windows users: COMXX should be written in uppercase, otherwise pymakr doesn't find the port and asks the DNS for that address, which usually does not exist.
     Global settings
    Fig. 8: pymakr Global settings

    Pymakr size problem - Atom 1.30:

    If your console size is too small and you cannot resize it, like this one:

     PyMakr Console
    Fig. 9: pymakr Console too small and not resizable

    you need to disable the atom-ide-ui package (Packages > Settings View > Manage Packages):

     PyMakr Console
    Fig. 10: atom-ide-ui Package

    It is a bug.

    More Info

    ESP32 Firmware
    Atom.io
    Pymark Plugin

    Visual Studio Code

    I am not using Atom anymore, I am now using Visual Studio Code. Read this for more info.

    Uploading files using adafruit-ampy

    The MicroPython firmware for ESP32 doesn't have a FTP server as standard function as the version for the Wipy2.0. Then, you have to upload the files using the serial interface. The sync button of the pymark plugin on Atom doesn't work with this firmware (with the Wipy 2.0, it works). (Update: Uploading the files using the PyMakr console works - read next section)

    Write the following code in a file called boot.py changing the <ssid> and <wpa2_pass values to the right ones of your WiFi configuration

    # boot.py
    
    ssid_ = <ssid>
    wp2_pass = <wpa2_pass>
    
    def do_connect():
        import network
        sta_if = network.WLAN(network.STA_IF)
        if not sta_if.isconnected():
            print('connecting to network...')
            sta_if.active(True)
            sta_if.connect(ssid_, wp2_pass)
            while not sta_if.isconnected():
                pass
        print('network config:', sta_if.ifconfig())
    
    do_connect()
    

    You can upload the boot.py file to the Wemos board using ampy with the following command line

    # for Windows
    ampy --port COM17 put /pathToFile/boot.py
    # for Linux
    ampy --port /dev/ttyUSB0 put /pathToFile/boot.py

    You can upload a simple FTP server to upload files using e.g. Filezilla. You will find the FTP Python file on my GitHub repository, together with a boot.py to connect to the WIFI Router.

    Uploading files using PyMakr console in Atom

    With the PyMakr plugin version newer than 1.30, it is possible to upload files not only to the WiPy2.0/3.0 but also to the ESP32/ESP8266 modules. You need to open your project, configure the Settings as described above and click on the Upload button (see Fig. 11). The files are uploaded and after that the board is rebooted.

    If you have a main routine with a while True: and you want to stop it, you can press CTRL+C after clicking inside the console. The while will be breaked and you can type your commands on it. This could be helpfull when the microcontroller is doing too many task, and the Upload file action fails.

     PyMakr Console
    Fig. 11: atom-ide-ui Package

    More Info

    ampy
    ESP32-MicroPython

    If you have further questions, please don't hesitate to comment this article.

    Installing MicroPython dependencies

    You can find info about this topic here !

    Tutorial Part 2: Connecting Sensors to MicroPython!

    You can find info about this topic here !


    Comments

    MiUbi 08.26.2018

    i am an instructor, i wanted to teach micro python for students, found difficulty with mpfshell and REPL , this is just a great plugin, it helped me creating many applications i just collated them in a video have a look : [...] i even created free course too : [...]

    Heikki Hietala 09.10.2018

    Hi! I followed your very good tutorial, but and got my ESP32 DevKitC's both erased and flashed with the ESP32 firmware, but when I try to connect via Atom running Pymakr, I get this:

    Failed to connect (Error: getaddrinfo ENOTFOUND com8 com8:23). Click here to try again. Connection error: Error: Login timed out

    i can see the COM8 working, and I can access it on PuTTY etc. but getting Pymakr to talk to it doesn't work.

    Do you have any solution for this? Thanks for taking the time to read this!