Acelere el desarrollo de productos de IoT utilizando el ecosistema Mbed

Por Jacob Beningo

Colaboración de Editores de DigiKey de América del Norte

Los equipos de desarrollo integrado y de Internet de las cosas (IoT) están bajo presión para terminar y enviar su diseño lo más rápido posible. Para avanzar rápidamente, necesitan usar componentes probados y marcos de software que tengan un ecosistema fuerte a su alrededor. También deben analizar cómo mantener y escalar sus sistemas en el futuro, lo que significa que las soluciones también deben ser portátiles y capaces de funcionar en múltiples plataformas de hardware si es necesario.

Sin embargo, los proveedores de microcontroladores a menudo vinculan a los desarrolladores con su propio ecosistema, lo que limita la facilidad para cambiar microcontroladores. Además, las herramientas de software para los ecosistemas de microcontroladores a menudo son inadecuadas y se basan principalmente en C, lo que también puede entorpecer a los equipos de desarrollo.

Teniendo en cuenta estos requisitos, este artículo presentará la plataforma y el sistema operativo Mbed de Arm. Se mostrará cómo los desarrolladores pueden aprovechar el ecosistema Mbed para acelerar el desarrollo de sus productos integrados y usarlo para escalar más allá del ecosistema del proveedor de microcontroladores.

¿Qué es Mbed de Arm?

Mbed es una colaboración en línea dirigida por Arm para desarrolladores interesados en construir dispositivos IoT1. Mbed proporciona a los desarrolladores una amplia selección de recursos diseñados para acelerar el desarrollo, que van desde el SO de Mbed y la TLS (seguridad de la capa de transporte) de Mbed hasta las placas de desarrollo y los componentes de hardware individuales que son compatibles con las bibliotecas de Mbed.

La premisa detrás de Mbed es permitir a los desarrolladores aprovechar un gran ecosistema respaldado por 200,000 desarrolladores en comunidades en línea, junto con los principales proveedores de microcontroladores como Cypress Semiconductor, NXP Semiconductorsy STMicroelectronics para acelerar su desarrollo mediante el uso de componentes existentes, herramientas de desarrollo y bibliotecas. Existen muchas ventajas al usar el ecosistema Mbed:

  • Las bibliotecas y los ejemplos están escritos en C++, un lenguaje moderno orientado a objetos que inherentemente hace que el código sea escalable y reutilizable.
  • La capacidad de aprovechar una plataforma de hardware existente para crear rápidamente un prototipo de un producto integrado para demostrar que es viable.
  • Acceso al compilador en línea y fuera de línea de Mbed junto con la interfaz de línea de comandos (CLI) de Mbed, lo que facilita el desarrollo de pruebas de software (e incluso se incluye en muchos ejemplos y bibliotecas).
  • Herramientas integradas para desarrollar dispositivos IoT, como el servicio de conector en la nube que facilita no solo conectar un dispositivo a la nube, sino también administrarlo a través de otros servicios basados en la nube.

El modelo arquitectónico general para Mbed lo hace extremadamente flexible y escalable para desarrolladores integrados. Por ejemplo, el modelo arquitectónico generalmente se divide en tres capas separadas (Figura 1):

  • Una capa de abstracción de hardware de bajo nivel (HAL)
  • Una API del SO de Mbed, que actúa como middleware que proporciona capacidades como almacenamiento, RTOS (sistema operativo en tiempo real), conectividad segura y pilas de comunicación.
  • Una capa de IoT de alto nivel que incluye el código de la aplicación del desarrollador, las bibliotecas del SO de Mbed y los clientes de conectividad.

Diagrama de la arquitectura de Mbed que consta de tres capas principales (haga clic para ampliar)Figura 1: La arquitectura de Mbed consta de tres capas primarias que se pueden escalar y ampliar según sea necesario: una interfaz de hardware de bajo nivel que se abstrae a través de una HAL, una capa de API del SO de Mbed que abstrae el middleware y una capa de alto nivel para escribir el código de la aplicación y aprovechar bibliotecas y clientes como Pelion. (Fuente de la imagen: Arm Mbed)

La forma en que está diseñada la arquitectura permite a un desarrollador extraer las piezas que necesita para su aplicación e ignorar el resto. Esto hace que la arquitectura sea escalable, flexible y fácil para que los desarrolladores aprovechen para desarrollar rápidamente prototipos y llevar a su producto de prototipo a producción en un período de tiempo más corto.

Mbed comienza con el hardware

Si bien Mbed proporciona una excelente base de software, ofrece más que solo el software y las herramientas necesarias para desarrollar ese software. La forma más rápida en que un equipo puede desarrollar un producto es también aprovechar el ecosistema de hardware de Mbed, que comprende tres áreas distintas:

  • Módulos
  • Placas
  • Componentes

Los módulos son esencialmente dispositivos de conectividad centrados en IoT que vienen en un paquete certificado y listo para usar. Por ejemplo, un desarrollador que trabaja en un producto que admite LoRaWAN podría seleccionar el kit de desarrollo del módulo xDot MTMDK-XDOT-NA1-A00 de Multi-Tech Systems(Figura 2). El módulo xDot puede proporcionar comunicación bidireccional de hasta 10 millas en aplicaciones de línea de visión y de una a tres millas en edificios, a velocidades de datos que van desde 293 bits por segundo (bits/s) hasta 20 kilobits por segundo (kbits/s). El módulo utiliza un procesador STM32L151CCU6de baja potencia de STMicroelectronics que funciona a 32 megahercios (MHz) y puede controlarse mediante un esquema de mensajería de AT a través de interfaces SPI (interfaz periférica serial), UART (transmisor receptor asíncrono universal) o I2C.

Diagrama del módulo xDot de Multi-Tech SystemsFigura 2: El módulo xDot proporciona a los desarrolladores un módulo LoRaWAN certificado que es compatible con las pilas de software de Mbed y puede ayudar a un desarrollador a ponerse en marcha en mucho menos tiempo. (Fuente de la imagen: Multi-Tech Systems Inc.)

Las placas de Mbed son esencialmente placas de desarrollo para diferentes familias de microcontroladores que son compatibles con Mbed. Cada placa de desarrollo tiene características y capacidades únicas proporcionadas por el proveedor de microcontroladores. Por ejemplo, un desarrollador interesado en trabajar con una placa que soporta Bluetooth de baja energía (BLE) podría estar interesado en CY8CKIT-062-BLE de Cypress Semiconductor (Figura 3).

Imagen de la placa de desarrollo CY8CKIT-062-BLE de CypressFigura 3: La placa de desarrollo CY8CKIT-062-BLE contiene múltiples características para desarrollar un dispositivo IoT conectado, incluida una pantalla de tinta electrónica, botones táctiles capacitivos y control deslizante, módulo BLE y depurador KitProg2. (Fuente de la imagen: Cypress Semiconductor)

La placa CY8CKIT es única porque presenta un microcontrolador seguro PSoC 62 de múltiples núcleos. Un núcleo es un procesador Arm® Cortex®-M4, mientras que el otro núcleo es un Arm Cortex-M0+ de baja potencia. Esto permite a los desarrolladores particionar el código de su aplicación, por ejemplo para hacer que un procesador maneje la comunicación BLE, o bloquear la aplicación utilizando el núcleo Cortex-M0+ como procesador de seguridad. Toda la expansión de E/S disponible en las placas hace que sea mucho más fácil para los desarrolladores crear prototipos de su sistema al conectarles componentes de Mbed.

Un componente de Mbed es un componente de hardware que tiene bibliotecas compatibles con Mbed y middleware asociado que actúan como bloques de construcción para crear un producto. Por ejemplo, un desarrollador que trabaja en un proyecto de IoT puede decidir que desea incluir un sensor de temperatura. Un desarrollador puede buscar en los componentes de Mbed sensores de temperatura compatibles y se encontraría, por ejemplo, con MAX31723PMB1de Maxim Integrated, que viene en un módulo periférico que puede usarse para la creación rápida de prototipos (Figura 4).

Lo bueno de estos componentes de Mbed es que casi siempre vienen como una placa de desarrollo con esquemas disponibles. Esto permite que un desarrollador no solo vea la configuración de hardware requerida para hacer que el sensor funcione, sino que tenga la biblioteca de software disponible para que el sensor pueda funcionar.

Esquema del termómetro digital MAX31723PMB1 de Maxim y el módulo periférico del termostatoFigura 4: El termómetro digital MAX31723PMB1 y el módulo periférico del termostato (como se muestra en el esquema) se pueden conectar fácilmente a una placa de desarrollo Mbed, y luego la biblioteca de componentes de Mbed asociada se puede utilizar para interactuar e interconectar rápidamente con el sensor de temperatura. (Fuente de la imagen: Maxim Integrated)

Los sensores simples como los que miden la temperatura y la humedad no son los únicos tipos de sensores disponibles a través de Mbed. Por ejemplo, los desarrolladores que trabajan en un dispositivo médico descubrirán que el módulo MAXREFDES220 # de Maxim Integrated les proporciona un diseño de referencia para un sensor de frecuencia cardíaca y de oxígeno en la sangre SpO2 para usar en los dedos (Figura 5).

Imagen del módulo MAXREFDES220# de MaximFigura 5: El módulo MAXREFDES220# proporciona a los desarrolladores una placa de desarrollo que puede proporcionar frecuencia cardíaca y supervisión de SpO2 para utilizar en el dedo. (Fuente de la imagen: Maxim Integrated)

También existen componentes como el tablero de ruptura de flujo114991252 VL53L0X de Seeed Technology, que se pueden usar en aplicaciones para detección de luz y mediciones de distancia de tiempo de vuelo (ToF) en 3D (Figura 6). Un desarrollador podría estar interesado en este sensor si, por ejemplo, está tratando de desarrollar tecnologías basadas en gestos en el borde.

Diagrama de la placa del sensor de ruptura de flujo 114991252 de Seeed TechnologiesFigura 6: La placa del sensor de ruptura de flujo 114991252 de Seeed Technologies se puede integrar fácilmente en una placa de desarrollo de Mbed y usarse en aplicaciones que requieren detección de luz o aplicaciones 3D de tiempo de vuelo, como la detección de gestos. (Fuente de la imagen: Seeed Technology)

Una vez que un desarrollador ha seleccionado su placa de desarrollo y sus componentes, puede comenzar a desarrollar con Mbed creando una aplicación LEDBlinky "Hola mundo” para probar que pueden programar su placa con éxito y hacer parpadear un LED.

Desarrollo de una aplicación LEDBlinky "Hola mundo" con Mbed

Existen varias formas diferentes de desarrollar una aplicación Mbed: a través del compilador en línea; el compilador fuera de línea; o usando la herramienta de interfaz de línea de comando (CLI). Desde la experiencia personal, se sugiere el uso de la CLI porque proporciona más control sobre el proceso de desarrollo y facilita la integración en los procesos de desarrollo, como los arneses de prueba y los servidores de integración continua.

La CLI proporciona capacidades de interfaz de línea de comandos para que un desarrollador que trabaje en Windows pueda usar el símbolo del sistema para compilar código. El primer paso para crear la aplicación LEDBlinky es utilizar el ejemplo prefabricado proporcionado por Mbed. Esto se puede hacer ingresando el siguiente comando en el símbolo del sistema:

mbed import mbed-os-example-blinky

La descarga del ejemplo tardará unos minutos, ya que esto también utiliza la compatibilidad con el SO de Mbed y con otros componentes que pueden usarse en la aplicación. Una vez que se completa la descarga, el desarrollador puede dirigirse a la carpeta mbed-os-example-blinky donde encontrará un archivo main.cpp. Este módulo se puede abrir en el editor favorito del desarrollador y tendrá un aspecto similar al siguiente:

Copy#include "mbed.h"#include "platform/mbed_thread.h"#include "stats_report.h" DigitalOut led1(LED1); #define SLEEP_TIME                  500 // (msec)#define PRINT_AFTER_N_LOOPS         20 // main() runs in its own thread in the OSint main(){    SystemReport sys_state( SLEEP_TIME * PRINT_AFTER_N_LOOPS /* Loop delay time in ms */);     int count = 0;    while (true) {        // Blink LED and wait 0.5 seconds        led1 = !led1;        thread_sleep_for(SLEEP_TIME);         if ((0 == count) || (PRINT_AFTER_N_LOOPS == count)) {            // Following the main thread wait, report on the current system status            sys_state.report_state();            count = 0;        }        ++count;    }}

El desarrollador podría hacer modificaciones aquí, pero para el objetivo de este artículo, los valores predeterminados están bien. Compilar e implementar el código es de mayor interés. El comando exacto para compilar e implementar el código variará según el hardware. A continuación, se indica un ejemplo que muestra cómo compilar y programar la placa en un único comando para una placa de desarrollo CY8CKIT-062-BLE de Cypress:

mbed compile -m CY8CKIT_062_BLE -t GCC_ARM -f

Compilar el proyecto por primera vez puede llevar varios minutos, ya que la cadena de herramientas tendrá que compilar todos los archivos asociados que entran automáticamente en una aplicación de Mbed. Una vez que se completa el ciclo de compilación, el resultado debería parecerse a la Figura 7 a continuación.

Imagen del resultado del compilador de Mbed cuando el proyecto LEDBlinky se compiló correctamenteFigura 7: El resultado del compilador Mbed cuando el proyecto LEDBlinky se compiló correctamente. (Fuente de la imagen: Jacob Beningo)

La opción -f en la línea de comandos tomará automáticamente el archivo hexadecimal compilado y lo copiará en la placa de desarrollo, que aparece como un dispositivo de almacenamiento masivo DAPLink. En este punto, un LED debería estar parpadeando, y el desarrollador puede comenzar a desarrollar su aplicación principal.

Consejos y trucos para trabajar con Mbed

Comenzar a usar Mbed es sencillo, pero puede haber ciertos desafíos para los desarrolladores. A continuación, se indican algunos "consejos y trucos" para comenzar a desarrollar un producto con Mbed:

  • Evite usar el compilador en línea. Esto es aceptable para los aficionados, pero para los profesionales, tener código fuente en los servidores de otra persona puede ser un problema. Además, ir y volver a la nube puede ralentizar la depuración. Los compiladores locales, como Mbed IDE o Mbed CLI, son mejores opciones.
  • Mbed soporta hilos de ejecución múltiples, pero por defecto, la función principal se ejecuta en su propio hilo de ejecución.
  • Comience con proyectos de ejemplo de Mbed y revíselos para comprender cómo trabajar de manera más eficiente con las aplicaciones de Mbed.
  • Aproveche el arnés de prueba de Mbed para asegurarse de que el desarrollo de aplicaciones no haya roto accidentalmente algo en el marco de trabajo de Mbed.
  • Use el sitio de hardware de Mbed para buscar placas de desarrollo, componentes y módulos que puedan integrarse rápidamente para desarrollar un producto.

Estos consejos ayudarán a los desarrolladores a minimizar el tiempo que emplean en el desarrollo del producto integrado.

Conclusión

Los desarrolladores integrados y de IoT necesitan un ecosistema con una buena compatibilidad que les brinde herramientas, procesos y software modernos para ayudarlos a acelerar los esfuerzos de desarrollo y minimizar los costos de desarrollo. Como se mostró, la plataforma y el SO de Mbed son una opción potencial que los desarrolladores pueden aprovechar.

Mbed proporciona una arquitectura de software escalable y flexible con muchos componentes que ya fueron integrados y probados juntos. La amplia compatibilidad con varios módulos de hardware, placas y componentes facilita a los desarrolladores la creación de un prototipo del producto que después se puede escalar a una solución de producción.

Referencias

  1. https://www.mbed.com/en/about-mbed/what-mbed/
DigiKey logo

Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de DigiKey o de las políticas oficiales de DigiKey.

Información sobre el autor

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo es un consultor de software integrado que actualmente trabaja con clientes en más de una docena de países para transformar drásticamente sus negocios mejorando la calidad del producto, el costo y el tiempo de comercialización. Ha publicado más de 200 artículos sobre técnicas de desarrollo de software embebido, es un conferenciante y entrenador técnico muy solicitado y tiene tres títulos que incluyen una Maestría en Ingeniería de la Universidad de Michigan. No dude en ponerse en contacto con él en jacob@beningo.com, en su sitio web www.beningo.com, y suscríbase a su boletín mensual Embedded Bytes Newsletter.

Información sobre la editorial

Editores de DigiKey de América del Norte