Primeros pasos con microPython

Objetivos

 

  • Vamos a importar un par de librerías para jugar.
  • Veremos una primera versión del blinking led.
  • Veremos cómo acceder al sistema interno de ficheros.
  •  

    Material requerido

     

    Node MCU board Node MCU V2 o V3

    micro usb
    Un cable USB a microUSB, como el de cualquier teléfono móvil

     

    Empezando con MicroPython

     

    En la sesión anterior dejamos instalado MicroPython en nuestro ESP8266 / NodeMCU por lo que ya va siendo hora de  empezar a jugar directamente desde una consola de comandos.

    Como ya dijimos vamos a usar un NodeMCU como plataforma ESP porque tiene más memoria y además no da ninguno de los dolores de cabeza que suelen dar los modelos del chip montado en plataformas sin USB, y os recomendamos que hagáis lo mismo para evitar problemas innecesarios.

    Lo primero que nos vamos a encontrar cuando conectemos a nuestro modulo es el REPL prompt, (Que es una manera cursi de decir Read Evaluate Print Loop o ciclo de evaluación de MicroPython), es decir  el intérprete o el ambiente de trabajo.

    Hay dos maneras básicas de llegar al REPL. La primera la vimos en la última sesión: conectar con una terminal a través del puerto USB (Que se suele llamar UART) y que es sin duda el sistema más fácil con diferencia.

    Y luego hay otra forma, la que os va a gustar, a través de WIFI sin cables (Tranquilo todo el mundo) que me ha costado bastante más sin que este muy claro porque, y que veremos en una próxima sesión.

    Empecemos conectando a nuestro modulo y una vez allí, ya podemos empezar a teclear las instrucciones Python que queráis:

    print (“Bienvenidos a Prometec”)

    hello world

  • Recordad que estamos en Python 3 y por eso el print()
  •  

    Podemos escribir directamente operación y el REPL nos devolverá el resultado inmediatamente:

    >> 100 * 3 / 6

    modo calculadora

    Es decir, es un intérprete normal y corriente de Python 3. Pero siguiendo una vieja tradición de los que nos gusta enredar, hay que responder una pregunta fundamental en un nuevo entorno: ¿Cómo hago el bilnking LED? Veamos….

    Si tú modulo tiene un pin unido a un led (El número 2 en NODEMCDU) basta con importar la librería que nos permite acceder al hardware:

    import machine

    Y luego definir alguna variable para acceder al pin 2:

    pin = machine.Pin( 2, machine.Pin.OUT)

    importar librerias

    Y ahora ya podemos encender y apagar el pin:

    >>> pin.on()
    >>> pin.off()

    Veréis como se enciende el LED con el comando correspondiente

  • Aunque en mi caso, y por razones inescrutables, pin.on() apaga el led y pin.off() lo enciende.
  •  

    Si estas copiando los comandos, puedes pegarlos al terminal de Teraterm, apuntando a la ventana y dando botón derecho del ratón. Te aparecerá un selector que puedes usar para hacer el pegar.

    Nuestro primer programa micropython

     

    Ya, Vale. Todo muy bonito pero tengo que encender y apagar a mano. ¿Cómo hago un programa que lo mantenga parpadeando?  Escribe esto:

    def toggle (p)
       p.value(not p.value())

  • Tendrás que pulsar [INTRO] después, varias veces(3) para que el REPL sepa que quieres terminar de escribir instrucciones.[/fancy-ul] [/three-fourth]
  •  

    una pequeña definicion

    Con esto hemos creado una función que lee el valor del pin e invierte su estado. Ahora podemos hacer:

    toggle(pin)

    y veras que efectivamente estamos cambiando el estado del led. Si quieres repetir, pulsa la flecha arriba y te traerá el último comando que le has dado.

    Para que la luz se quede parpadeando podemos escribir algo como esto:

    >>> import time
    >>> while True:
    ...     toggle(pin)
    ...     time.sleep_ms(500)
    ...
    ...
    ...
    >>>

    Donde importamos time, que es una librería que necesitamos para controlar el delay

    un pequeño programa

    Cuando te canses de todo esto, simplemente resetea tu NodeMCU y ya estás como al principio, o bien puedes parar la ejecución con [CTRL] + C.

     

    El sistema interno de archivos

     

    Seguramente lo que os apetece hacer ahora mismo es probar a crear un programa que mueva unas luces o un motor, lo grabemos en disco y …. Pero la vida es dura y hay que ir paso a paso y por eso necesitamos hablar antes del file system interno que amablemente nos crea MicroPython en la flash del Esp8266, así que vamos con ello.

    Si tu dispositivo tiene por lo menos 1 Mb de memoria Flash (Mala suerte para los de ESP-01), En el primer arranque MicroPython creará un sistema de ficheros FAT interno, que podemos usar para guardar y recuperar ficheros (Tus programas por ejemplo)

    ¿Y cómo haceos para poder leer y escribir ficheros en ese disco FAT? Pues tan fácil como siempre en Python. La versión que corre en MicroPython para el esp8266 soporta el sistema normal de acceso a ficheros Python:

    Vamos a crear un fichero sencillo en el disco:

    f = open('data.txt', 'w')
    f.write(“Esta es la primera prueba”)
    f.close()

    En pantalla veréis algo así:

    Usando los accesos a disco interno

  • Fíjate en ese 25 que aparece de la nada. Es el retorno de la función write que nos indica el número de caracteres que hemos escrito.
  •  

    Para leer lo que hay escrito en data.txt podemos hacer

    f = open('data.txt')
    f.read()
    f.close()

    Leyendo ficheros

    Es todo muy normal si estas acostumbrados a Python 3.

     

    Listando el contenido del disco

     

    Si sois como yo, a los 30 segundos ya no sé cómo se llamaba el fichero que acabo de crear, así que convendría tener algún sistema para poder echar una ojeada al contenido del disco interno. Nada más fácil:

    import os
    os.listdir()

    Listando el contenido en disco

    Cuando importas la librería os, dispones de los medios necesarios para crear ficheros y directorios (os.mkdir(‘dir’)), o eliminar ficheros (os.remove(‘data.txt’)), tratar con directorios etc, etc.

    Enseguida os habréis dado cuenta de que hay tenemos algunas cositas sorpresa y por eso tenemos que avrir el siguiente punto.

     

    Ficheros del sistema

    Como en todo buen sistema de ficheros que se precie, siempre hay algún archivo, más o menos oculto, que tiene funciones específicas asignadas. En nuestro esp8266 / NODEMCU tenemos un par de ficheros especiales que son, boot.py y main.py.

    El fichero boot.py se ejecuta siempre que se arranca el modulo (Si existe) y al acabar se ejecuta el main.py si está presente.

    Puedes descargar y modificar estos archivos a tu antojo, pero es recomendable no modificar el contenido de boot.py porque es donde tocan los chicos que andan modificando el firm del sistema y podrías obtener resultados raros sin fumar nada ilegal.

    Pero es conveniente que sepas, que una vez veamos como pasar ficheros de programas a nuestro disco interno podemos ejecutarlos en el arranque sin más que llamarles main.py

    Tambion veréis que otro fichero especial que se llama web_repl.py que usaremos cuando configuremos el acceso remoto via WIFI a nuestro modulo, pero esto es tema de la próxima sesión.

     

    Resumen de la sesión

     

  • Vimos que podemos importar librerias con normalidad en microPython.
  • Una de ellas, machine, nos permite acceder al hardware de nuestro modulo.
  • Hicimos, como no, una versión del  blinking led. [/three-fourth][margin value=»5″ /]