Instale micropython en ESP8266 y trabaje con él en Linux (para principiantes)

Hola Habr!

Esta es mi primera experiencia con microcontroladores en general, y ESP8266 (en forma de Nodemcu v2) en particular. Quizás para alguien esta experiencia sea útil.

¿Por qué exactamente micropython? La respuesta es simple: mi modesta experiencia en programación se limita a Pascal en la universidad y a escribir scripts de configuración para Procera en Python, por lo que resultó ser el más cercano. Los ejemplos serán para Linux (ubuntu 18.04), pero creo que no habrá ninguna diferencia fundamental en otras distribuciones de Linux.

Formación:


Ponemos python3, pip y picocom, si aún no están instalados:

sudo apt install python3 python3-pip picocom

Comprobando la versión de Python:

python --version
Python 3.6.9

Si Python versión 2.7, cambie a 3:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
update-alternatives: using /usr/bin/python3 to provide /usr/bin/python (python) in auto mode

Actualizamos pip y verificamos la versión:

sudo pip3 install --upgrade pip
pip --version
pip 20.0.2 from /usr/local/lib/python3.6/dist-packages/pip (python 3.6)
pip3 --version
pip 20.0.2 from /usr/local/lib/python3.6/dist-packages/pip (python 3.6)

Instalamos una versión más reciente de esptool 2.8 desde pip (ya que la versión 2.1 del repositorio de ubuntu da el error "Se produjo un error fatal: ESP8266 ROM no admite la función erase_flash". Durante el firmware):

pip3 install esptool

Descargue el firmware aquí . Utilicé la versión estable 1.12 .

Dos opciones son posibles:

  • 1. Amanecer manualmente (usando terminal y REPL):


    Despejamos flash en ESP8266:

    esptool.py --port /dev/ttyUSB0 erase_flash

    Salida de comando:

    esptool.py v2.8
    Serial port /dev/ttyUSB0
    Connecting....
    Detecting chip type... ESP8266
    Chip is ESP8266EX
    Features: WiFi
    Crystal is 26MHz
    MAC: c8:2b:96:00:63:35
    Uploading stub...
    Running stub...
    Stub running...
    Erasing flash (this may take a while)...
    Chip erase completed successfully in 9.5s
    Hard resetting via RTS pin...

    Rellene el firmware:

    esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 Downloads/esp8266-20191220-v1.12.bin

    Salida de comando:

    esptool.py v2.8
    Serial port /dev/ttyUSB0
    Connecting....
    Detecting chip type... ESP8266
    Chip is ESP8266EX
    Features: WiFi
    Crystal is 26MHz
    MAC: c8:2b:96:00:63:35
    Uploading stub...
    Running stub...
    Stub running...
    Changing baud rate to 460800
    Changed.
    Configuring flash size...
    Auto-detected Flash size: 4MB
    Flash params set to 0x0040
    Compressed 619828 bytes to 404070...
    Wrote 619828 bytes (404070 compressed) at 0x00000000 in 9.1 seconds (effective 543.8 kbit/s)...
    Hash of data verified.
    Leaving...
    Hard resetting via RTS pin...

    Y, si lo desea, verifique la corrección de la suma de verificación:

    esptool.py --port /dev/ttyUSB0 --baud 460800 verify_flash --flash_size=detect 0 Downloads/esp8266-20191220-v1.12.bin

    Después de eso, intentamos conectarnos a MK y ver la consola REPL :

    picocom /dev/ttyUSB0 -b115200

    picocom v2.2
    port is        : /dev/ttyUSB0
    flowcontrol    : none
    baudrate is    : 115200
    parity is      : none
    databits are   : 8
    stopbits are   : 1
    escape is      : C-a
    local echo is  : no
    noinit is      : no
    noreset is     : no
    nolock is      : no
    send_cmd is    : sz -vv
    receive_cmd is : rz -vv -E
    imap is        : 
    omap is        : 
    emap is        : crcrlf,delbs,
    
    Type [C-a] [C-h] to see available commands
    
    Terminal ready
    
    >>> help()
    Welcome to MicroPython!
    
    For online docs please visit http://docs.micropython.org/en/latest/esp8266/ .
    For diagnostic information to include in bug reports execute 'import port_diag'.
    
    Basic WiFi configuration:
    
    import network
    sta_if = network.WLAN(network.STA_IF); sta_if.active(True)
    sta_if.scan()                             # Scan for available access points
    sta_if.connect("<AP_name>", "<password>") # Connect to an AP
    sta_if.isconnected()                      # Check for successful connection
    # Change name/password of ESP8266's AP:
    ap_if = network.WLAN(network.AP_IF)
    ap_if.config(essid="<AP_NAME>", authmode=network.AUTH_WPA_WPA2_PSK, password="<password>")
    
    Control commands:
      CTRL-A        -- on a blank line, enter raw REPL mode
      CTRL-B        -- on a blank line, enter normal REPL mode
      CTRL-C        -- interrupt a running program
      CTRL-D        -- on a blank line, do a soft reset of the board
      CTRL-E        -- on a blank line, enter paste mode
    
    For further help on a specific object, type help(obj)
    >>> 

    PD: para salir de picocom use Ctrl + a e inmediatamente Ctrl + x
  • 2. Usando el IDE


    Aunque la primera opción es bastante funcional (al menos también puede parpadear un LED), con el IDE aún es mucho más conveniente. Probé un par de opciones, finalmente me decidí por Thonny .

    Instalación:

    Ponemos python3-tk desde los repositorios, y en realidad Thonny a través de pip:

    sudo apt install python3-tk

    sudo pip3 install thonny

    Puede cargar firmware a MK directamente a través de Thonny:



    después de lo cual, el parpadeo del LED se vuelve mucho más conveniente:



Total


En la salida, tenemos un esp8266 MK con micropython cosido y un IDE fácil de usar para trabajar con él.

PD: la segunda parte (plataforma autopropulsada en MK esp8266 con micropyhon)

All Articles