latest

Microcontroladores y sistemas embebidos programables con MicroPython

Como comentamos en la primera sesión introductoria de este curso de MicroPython para desarrollos IoT podemos encontrar variaciones sustanciales entre el conjunto de módulos y paquetes incluidos en diferentes ports de MicroPython. Los sistemas embebidos y μCs enumerados a continuación, todos ellos populares, pueden programarse / soportan MicroPython o derivados de éste.

Soporte oficial de MicroPython

Para las placas siguientes:

  • Espressif ESP32. Algunas especificaciones técnicas:
    • Microprocesador Tensilica Xtensa LX6 dual-core 32-bit, hasta 240MHz (aunque también existen versiones single-core).
    • Coprocesador ULP (Ultra Low Power) que permite monitorizar pines GPIOs y canales ADC cuando el microprocesador principal esta en sueño profundo (modo ahorro de energía).
    • SRAM: 520KiB. Algunos modelos incluyen pseudostatic RAM (pSRAM o SPIRAM) que añade hasta 8MiB de RAM adicionales empleando una memoria FLASH SPI externa.
    • ROM: 448KiB (usada para el arranque y core functions).
    • FLASH interna: depende del encapsulado (versión) del ESP32. En el rango de 0 a 2MiB.
    • FLASH externa: soporta hasta 16MiB utilizando la interfaz QSPI.
    • 2x conversores analógico-digitales ADC (de 12-bit SAR).
    • 3x SPI, 2x I2S, 2x I2C, 3x UART, 18x ADC pines de entrada analógicos, 2x DAC, PWM en todos los pines (a excepción de los de alimentación), 10x pines que pueden funcionar como sensores capacitativos, etc.
    • Transceptor Wi-Fi 802.11 b/g/n.
    • Transceptor BLE v4.2.
Ejemplo de SoC ESP32 (ESP32-WROOM-32)
  • Espressif ESP8266.  Predecesor del ESP32. Algunas especificaciones técnicas:
    • Microprocesador Tensilica Xtensa LX106 32-bit a 80 MHz (160 MHz overclocked).
    • SRAM de instrucciones de 64 KiB, SRAM de datos de 96 KiB.
    • No tiene memoria ROM ni FLASH interna.
    • FLASH externa: (depende de la versión) desde 512KiB hasta 16MiB utilizando la interfaz QSPI.
    • Conversor ADC (10 bits) en 1 pin (A0).
    • SPI, I2S, I2C, UART.
    • Transceptor Wi-Fi 802.11 b/g/n.
Ejemplo de SoC ESP8266 (ESP-WROOM-S2)
  • PyBoard. Versiones PYBv1.0 y PYBv1.1 (ambas con el μC STMicroelectronics STM32F405) y PYBLITEv1.0 (con el μC STMicroelectronics STM32F411). La placa PyBoard fue la primera desarrollada y construida para utilizarse con MicroPython. De hecho surgió de una campaña de Kickstarter lanzada por el físico teórico Damien George (el creador de MicroPython) y su mujer Viktoriya.
    La PCB incluye un conector micro USB y un conversor USB a TTL serial. Aprovechando esta interfaz, la Pyboard nos permite comunicarnos con su consola de Python desde nuestro PC para programar de manera interactiva (empleando lo que se conoce como entorno REPL: Read-Eval-Print-Loop); también la placa nos permite ejecutar scripts remotos, almacenados en nuestro PC, en la PyBoard (esto se denomina el modo raw REPL). Por último, la PyBoard incluye un pequeño sistema de archivos, embebido en su memoria FLASH interna (que puede extenderse gracias a su slot SD). En él, podemos almacenar scripts en Python para su ejecución, sin necesidad de interacción con el PC. Por ejemplo, si cargamos un script con el nombre main.py se ejecutará cada vez que se reinicie la PyBoard. Otras especificaciones hardware de esta placa (PyBoard PYBv1.1) son mostradas a continuación:
    • Microcontrolador embebido STMicroelectronics STM32F405RG que cuenta con una CPU ARM Cortex M4 a 168MHz con unidad de punto flotante.
    • FLASH interna: 1024KiB.
    • SRAM: 192KiB.
    • Acelerómetro triaxial (MMA7660).
    • 3x convertidores ADC (analog-to-digital) de 12 bits. Accesibles desde 16 pines.
    • 2x convertidores DAC (dgital-to-analog) de 12 bits.
Pyboard ver. 1.1
  • BBC micro:bit. Es un sistema embebido open harware / software diseñado por el servicio público de radio y televisión del Reino Unido (British Broadcasting Corporation - BBC) para ser usado como un microcomputador de propósito educacional. Empezó a comercializarse en febrero de 2016, resultando todo un éxito su despliegue por los colegios del Reino Unido hasta el día de hoy.
    La placa tiene la mitad del tamaño de una tarjeta de crédito y cuenta con un procesador ARM Cortex M0 32-bit, transceptor BLE, un conector micro USB y conversor USB a TTL Serial para comunicarse con el PC, 2 botones programables (etiquetados como 'A' y 'B'), etc.
    Destaca su interfaz de pines de entrada / salida con 5 conectores circulares sobredimensionados que permiten enganchar "pinzas de cocodrilo" (observad la figura) y que forman parte de un conector de borde de 23 pines para acoplar la placa micro:bit a otros dispositivos. También, en la parte posterior de la PCB, es relevante el arreglo programable de 5x5 LEDs de color rojo que puede controlarse con algunas funciones útiles ya implementadas en el paquete microbit, específico del port de esta placa. Por ejemplo, se dispone de una función para mostrar caracteres en el arreglo de LEDs simplemente indicando el carácter; otra función para representar multitud de iconos / imágenes predefinidos que vienen incluidos en el paquete (Image.TORTOISE, Image.Butterfly, etc...); e incluso, la posibilidad de visualizar una cadena en movimiento de scroll continuo, simplemente indicando dicha cadena. Algunas especificaciones hardware más de esta placa son mostradas a continuación:
    • Nordic nRF51822 (ARM Cortex M0 32bits a 16MHz) que trae integrado un transceptor BLE.
    • SRAM:16KiB.
    • FLASH:256KiB.
    • Acelerómetro triaxial (NXP/Freescale MMA8652) y magnetómetro triaxial (NXP/Freescale MAG3110).
    La pila de BLE requiere de 12KiB de memoria RAM lo que imposibilita cargarlo junto con el port de MicroPython para micro:bit, dada las restricciones de memoria de este sistema embebido. No obstante, MicroPython proporciona un protocolo de comunicación inalámbrica a 2.4Ghz mucho más simple que aprovecha el transceptor BLE del Nordic nRF51822 y permite comunicar dispositivos entre sí.
BBC micro:bit
  • Pycom WiPy. Pycom es un fabricante de sistemas embebidos que destaca porque todos sus modelos se programan con MicroPython. Cuenta con soporte oficial para su placa básica WiPy, equipada con el ESP32 (WiFi y BLE 4.2); así como modelos derivados de ésta que añaden otros transceptores de comunicación inalámbrica para los que Pycom ha desarrollado librerías adicionales y diferentes forks de MicroPython, así como herramientas Open Source que facilitan la actualización de su firmware y el desarrollo.
    A grandes rasgos, cuentan con los siguientes modelos, la mayoría disponible en formato de placa de desarrollo y como "chips desnudos" (formato OEM): SiPy con conectividad Sigfox añadida; LoPy4 que incorpora WiFi, BLE, LoRa y Sigfox; GPy con WiFi, BLE y conectividad LTE; FiPy que es la placa más completa aunando las 5 redes WiFi, BLE, LoRa, Sigfox y LTE.
Pycom Wipy

No oficialmente soportados, pero plenamente funcionales

La línea de microcontroladores STM32 (32-bit) de STMicroelectronics es plenamente funcional con MicroPython, aunque no aparezca oficialmente soportada en la página de MicroPython. Este repositorio contiene el port de MicroPython para la serie STM32Fxxx. Dicho fork se basa en la versión oficial de PyBoard, que como hemos visto anteriormente, utiliza los STM32F405 y STM32F411. Concretamente son los siguientes μCs:

  • STM32F411E-DISCO
  • STM32F429I-DISCO
  • STM32F4DISCOVERY
  • STM32F746G-DISCO
  • STM32F769I-DISCO
  • STM32L476G-DISCO
  • NUCLEO-F401RE
  • NUCLEO-F411RE
  • NUCLEO-F429ZI
  • NUCLEO-F446EI
  • NUCLEO-F746ZG
  • NUCLEO-F767ZI
  • NUCLEO-H743ZI
  • NUCLEO-L476RG
  • Espruino Pico (STM32F401CDU6)
Placa del kit Discovery (STM32F411E-DISCO) equipada con un STM32F411 (RAM:128KB, FLASH:512KB)

Hay más ports no oficiales de MicroPython para otros sistemas embebidos y μCs que podéis comprobar aquí. Desde sistemas embebidos de Nordic como el nRF51822 que equipa la BBC micro:bit o los nRF528xx, el SoC Texas Instruments CC3200 WiFi o las placas Teensy 3.1/3.2 que montan micrcontroladores NXP (antes Freescale) MK20DX256VLH7 (ARM Cortex-M4 32-bit 72MHz, 64KiB de SRAM y 288KiB de mem. FLASH).

El Adafruit Circuit Playground Express es otro buen ejemplo de sistema embebido que puede ejecutar código MicroPython. Adafruit ha creado su propia rama de MicroPython que ha denominado CircuitPython y que está especialmente pensada para el ámbito educacional de la programación de pequeños μCs y sistemas embebidos de bajo coste. CircuitPython es ideal para programadores principiantes, simplificando determinadas tareas como la carga de scripts en el Circuit Playground e incorporando paquetes y módulos con funciones adaptadas a su ecosistema de placas hardware, que facilitan el prototipado rápido. Por ejemplo, cuentan con funciones para gestionar el estado del array de RBG Neopixels que incorporan.

Sin duda, CircuitPython es perfecto para introducirse en la programación de μCs y SoCs dado su alto nivel de abstracción, respecto de otros lenguajes como Arduino, C o C++. No obstante, los programadores más experimentados también disfrutarán (al igual que en MicroPython), pudiendo hacer uso de la sintaxis de Python 3, así como de módulos y paquetes útiles provenientes de su librería estándar.

El Adafruit Circuit Playground Express está presente en dos versiones. Una antigua que monta un microcontrolador ATmega32u4 (no compatible con MicroPython); y la versión nueva, más potente, equipada con un Microchip SAMD21G18 y plenamente funcional con MicroPython. El SAMD21G18 incorporado tiene un procesador ARM Cortex-Mo (32-bit) a 48MHz, con 32KiB de SRAM y 256KB de memoria FLASH interna. La placa tiene además 2MiB adicionales de memoria FLASH externa.

El PCB del Circuit Playground destaca por su forma circular, heredada del antiguo Adafruit Flora, con 14 pads en forma de grandes agujeros que permiten enganchar "pinzas de cocodrilo" y también ser atravesados con hilo conductivo para crear prototipos que pueden ser cosidos sobre tejido o ropa. Otra característica interesante es que incorpora 10 LEDs NeoPixeles RGB, un mini altavoz y varios sensores: acelerómetro triaxial, sensor de temperatura (termistor), sensor de luminosidad (fototransistor), micrófono de tipo MEMS, receptor / transmisor infrarrojo (que puede actuar como sensor de proximidad); 2 pushbuttons, 1 potenciómetro deslizante, etc.

El Circuit Playground Express cuenta con una intefaz serial I2C y UART, 8 pines que aceptan entradas analógicas y que hacen uso de un ADC de 10 bits. Además, todos los pines, a excepción del A0, tienen soporte PWM (salida con modulación por ancho de pulso), generando señales analógicas a partir de señales digitales. También todos los pines, menos aquellos relacionados con la alimentación, pueden funcionar como PADs táctiles y detectar cuando son tocados.

También, para CircuitPython, hay otros ports que corren sobre chips SAMD21 que son denominados placas M0 o Express por Adafruit (Circuit Playground Express, Feather M0 Express, Gemma M0, Hallowing M0, etc); y ports que corren sobre el Microchip SAMD51 (ARM Cortex-M4 120MHz, 192-256KiB de SRAM, 512KiB de mem. FLASH interna), que son denominados como placas M4 por Adafruit (Feather M4 Express, ItsyBitsy M4 Express, etc).

Placas CircuitPython (M0) de Adafruit. De izq. a der.: Feather M0 Express, Metro M0 Express, Circuit Playground Express, Gemma M0 yTrinket M0

Como hemos podido ver en esta lección, MicroPython se ejecuta en dispositivos con capacidades y características muy diferentes lo que condiciona, en gran medida, los paquetes y módulos que incorporan sus forks para los distintos μCs y sistemas embebidos. Por ejemplo, mientras que la placa micro:bit incorpora una versión apenas reducida del módulo random de la librería estándar (CPython), el port para el SoC ESP8266 trae una versión del módulo mucho más limitada (urandom). Sin embargo, debido al transceptor inalámbrico y la implementación integra de la pila del protocolo de red TCP/IP que incorpora este SoC, el port incluye otros módulos con utilidades relacionadas con el intercambio de datos entre máquinas y la comunicación a través de Internet como, por ejemplo, los módulos json y urequests, inexistentes en la micro:bit.

En la siguiente sesión entraremos más en detalle en características propias del ESP32 y cargaremos el firmware de MicroPython en las placas de desarrollo con las que practicaremos (equipadas con un ESP32-WROOM-32 / ESP32-WROOM-32D).

Author image
Iván González is postdoctoral researcher at the Castilla-La Mancha University.
Ciudad Real (Spain)