Accelerare lo sviluppo di prodotti IoT utilizzando l'ecosistema Mbed
Contributo di Editori nordamericani di DigiKey
2019-11-20
I team di sviluppo di prodotti embedded e Internet delle cose (IoT) sono sotto pressione per completare e spedire i propri progetti il più rapidamente possibile. Per agire velocemente, hanno bisogno di componenti e framework software consolidati e supportati da un ecosistema robusto. Devono inoltre tener conto del mantenimento e della scalabilità futura dei loro sistemi, il che significa che le soluzioni devono anche essere portatili e, se necessario, in grado di funzionare su più piattaforme hardware.
Tuttavia, spesso i fornitori di microcontroller vincolano gli sviluppatori al proprio ecosistema, il che ostacola il passaggio da un microcontroller all'altro. Inoltre, gli strumenti software per gli ecosistemi dei microcontroller molte volte sono inadeguati, essendo principalmente basati in C, e questo rappresenta un altro ostacolo per i team di sviluppo.
Tenendo conto di questi requisiti, questo articolo presenta il sistema operativo e la piattaforma Arm Mbed. Mostrerà come gli sviluppatori possono sfruttare l'ecosistema Mbed per accelerare lo sviluppo dei loro prodotti embedded e come usarlo per andare oltre l'ecosistema del fornitore di microcontroller.
Che cos'è Arm Mbed?
Mbed è una collaborazione online guidata da Arm per gli sviluppatori interessati a realizzare dispositivi IoT1. Mbed mette a disposizione degli sviluppatori un'ampia selezione di risorse per accelerare lo sviluppo, che vanno dal sistema operativo Mbed e Mbed TLS fino alle schede di sviluppo e ai singoli componenti hardware supportati dalle librerie Mbed.
Mbed è nato per permettere agli sviluppatori di sfruttare un grande ecosistema supportato da 200.000 sviluppatori in una comunità online insieme ai principali fornitori di microcontroller come Cypress Semiconductor, NXP Semiconductors e STMicroelectronics per accelerare lo sviluppo dei loro progetti utilizzando i componenti, gli strumenti di sviluppo e le librerie esistenti. L'uso dell'ecosistema Mbed offre numerosi vantaggi:
- Le librerie e gli esempi sono scritti in C++, un linguaggio moderno orientato agli oggetti che per le sue caratteristiche intrinseche rende il codice scalabile e riutilizzabile.
- La capacità di sfruttare una piattaforma hardware esistente per prototipare rapidamente un prodotto embedded e dimostrarne la fattibilità.
- L'accesso al compilatore Mbed online e offline insieme all'interfaccia a riga di comando Mbed (CLI), che facilita lo sviluppo di test del software (ed è inoltre incluso in molti esempi e librerie).
- Strumenti incorporati per lo sviluppo di dispositivi IoT, come il servizio Cloud Connector che semplifica non solo la connessione di un dispositivo al cloud, ma lo gestisce anche attraverso altri servizi basati sul cloud.
Il modello architetturale generale di Mbed lo rende estremamente flessibile e scalabile per gli sviluppatori di prodotti embedded. Ad esempio, in genere il modello architetturale è suddiviso in tre livelli separati (Figura 1):
- Un livello di astrazione hardware (HAL) di basso livello
- API per il sistema operativo Mbed, che funge da middleware e fornisce funzionalità quali storage, RTOS, connettività sicura e stack di comunicazione
- Un livello IoT di alto livello che include il codice dell'applicazione dello sviluppatore, librerie del sistema operativo Mbed e client di connettività
Figura 1: L'architettura Mbed è composta da tre livelli primari che possono essere scalati ed estesi in base alle necessità: un'interfaccia hardware di basso livello che viene astratta attraverso un HAL, un livello API del sistema operativo Mbed che astrae il middleware e un livello alto per scrivere il codice dell'applicazione e sfruttare librerie e client come Pelion. (Immagine per gentile concessione di Arm Mbed)
Il modo in cui l'architettura è progettata permette allo sviluppatore di estrarre i pezzi richiesti per l'applicazione, senza doversi preoccupare di tutto il resto. Questo rende l'architettura scalabile e flessibile e permette di sfruttarla facilmente per sviluppare rapidamente i prototipi e portare in tempi più brevi il prodotto dalla fase di prototipo a quella di produzione.
Mbed parte dall'hardware
Pur fornendo un'ottima base software, Mbed offre molto di più del software e degli strumenti necessari per svilupparlo. Il modo più rapido in cui un team può sviluppare un prodotto è quello di sfruttare anche l'ecosistema hardware Mbed, che comprende tre aree distinte:
- Moduli
- Schede
- Componenti
I moduli sono essenzialmente dispositivi di connettività IoT-centrici che vengono forniti in un pacchetto certificato e pronto all'uso. Ad esempio, uno sviluppatore che lavora su un prodotto che supporta LoRaWAN potrebbe scegliere il kit di sviluppo del modulo xDot MTMDK-XDOT-NA1-A00 di Multi-Tech Systems (Figura 2). Il modulo xDot può fornire una comunicazione bidirezionale fino a 16 chilometri in applicazioni con linea visuale libera e da 1,6 a 4,8 chilometri all'interno degli edifici con velocità di trasmissione dati che vanno da 293 bit/s a 20 kbit/s. Il modulo usa un processore a basso consumo STM32L151CCU6 di STMicroelectronics che opera a 32 MHz e che può essere controllato con uno schema di messaggistica tramite interfacce SPI, UART o I2C.
Figura 2: Il modulo xDot fornisce agli sviluppatori un modulo LoRaWAN certificato che è supportato dagli stack del software Mbed e può aiutarli a terminare i loro progetti in tempi molto più rapidi. (Immagine per gentile concessione di Multi-Tech Systems Inc.)
Le schede Mbed sono essenzialmente delle schede di sviluppo per diverse famiglie di microcontroller, tutte supportate da Mbed. Ogni scheda di sviluppo ha caratteristiche e capacità proprie che vengono date dal fornitore del microcontroller. Ad esempio, uno sviluppatore interessato a lavorare con una scheda che supporta Bluetooth Low Energy (BLE) potrebbe scegliere la CY8CKIT-062-BLE di Cypress Semiconductor (Figura 3).
Figura 3: La scheda di sviluppo CY8CKIT-062-BLE è dotata di molte funzioni per sviluppare un dispositivo connesso IoT, compreso un display E-Ink, cursore e pulsanti a sfioramento capacitivi, modulo BLE e debugger KitProg2. (Immagine per gentile concessione di Cypress Semiconductor)
CY8CKIT è una scheda unica nel suo genere, in quanto è dotata di un microcontroller multi-core PSoC 62 sicuro. Uno dei core è un processore Arm® Cortex®-M4 e l'altro è un Arm Cortex-M0+ a basso consumo energetico. Ciò permette agli sviluppatori di ripartire il codice della loro applicazione, ad esempio per avere un processore che gestisce la comunicazione BLE, o di proteggere l'applicazione utilizzando il core Cortex-M0+ come processore di sicurezza. Grazie alla grande espansione I/O disponibile sulle schede, gli sviluppatori possono prototipare molto più facilmente il proprio sistema collegandovi i componenti Mbed.
Un Mbed è un componente hardware con librerie supportate da Mbed e relativo middleware che fungono da base per la realizzazione di un prodotto. Ad esempio, uno sviluppatore che lavora su un progetto IoT potrebbe dover includere un sensore di temperatura. Può cercare componenti Mbed per i sensori di temperatura supportati e troverebbe, ad esempio, MAX31723PMB1 di Maxim Integrated, presente in un modulo periferico che può essere utilizzato per la prototipazione rapida (Figura 4).
Questi componenti Mbed hanno lo straordinario vantaggio di essere quasi sempre disponibili come scheda di sviluppo corredata di schemi. Lo sviluppatore può quindi non solo vedere la configurazione hardware necessaria per far funzionare il sensore, ma disporre anche della libreria software per renderlo funzionante.
Figura 4: Il modulo periferico per termostato e termometro digitale MAX31723PMB1 (schema in figura) può essere facilmente collegato a una scheda di sviluppo Mbed. Pertanto, la libreria di componenti Mbed associata può essere utilizzata per interfacciarsi e interagire rapidamente con il sensore di temperatura. (Immagine per gentile concessione di Maxim Integrated)
Sensori semplici come quelli che misurano la temperatura e l'umidità non sono gli unici tipi disponibili tramite Mbed. Ad esempio, chi lavora su un dispositivo medico scoprirà che il modulo MAXREFDES220# di Maxim Integrated gli offre un progetto di riferimento per un sensore che misura dalle dita la frequenza cardiaca e la saturazione di ossigeno nel sangue SpO2 (Figura 5).
Figura 5: Il modulo MAXREFDES220# offre agli sviluppatori una scheda di sviluppo per monitorare frequenza cardiaca e SpO2. (Immagine per gentile concessione di Maxim Integrated)
Esistono anche componenti come la scheda di breakout VL53L0X Flow 114991252 di Seeed Technology che possono essere utilizzati in applicazioni come il rilevamento della luce e le misurazioni della distanza in tempo di volo (ToF) 3D (Figura 6). Uno sviluppatore potrebbe essere interessato a questo sensore se, ad esempio, sta cercando di sviluppare tecnologie avanzate basate sui gesti.
Figura 6: La scheda di breakout per sensori 114991252 Flow di Seeed Technologies può essere facilmente integrata in una scheda di sviluppo Mbed e usata in applicazioni che richiedono il rilevamento della luce o in altre relative al tempo di volo 3D utilizzate per il rilevamento dei gesti. (Immagine per gentile concessione di Seeed Technology)
Dopo aver scelto la scheda di sviluppo e i componenti, si può dare inizio alla fase di sviluppo con Mbed creando un'applicazione LEDBlinky "Hello World" per controllare se la scheda è stata programmata correttamente e se il LED lampeggia.
Scrivere un'applicazione LEDBlinky "Hello World" con Mbed
Esistono molti modi per sviluppare un'applicazione Mbed: tramite il compilatore online, tramite il compilatore offline oppure utilizzando lo strumento interfaccia a riga di comando (CLI). L'esperienza personale suggerisce di utilizzare la CLI perché fornisce un maggiore controllo sul processo di sviluppo e facilita l'integrazione nei processi di sviluppo, come i test harness e i server di integrazione continua.
La CLI fornisce funzionalità di interfaccia a riga di comando così che uno sviluppatore che lavora in Windows possa utilizzare il prompt dei comandi per compilare il proprio codice. Il primo passo per creare l'applicazione LEDBlinky è quello di utilizzare l'esempio fornito con Mbed. A tale fine, immettere il seguente comando nel prompt dei comandi:
mbed import mbed-os-example-blinky
Il download dell'esempio richiederà alcuni minuti perché occorre importare anche il sistema operativo Mbed e altri componenti che potrebbero essere utilizzati nell'applicazione. Una volta completato il download, lo sviluppatore può navigare fino alla cartella mbed-os-example-blinky dove troverà un file main.cpp. Potrà aprire questo modulo - simile a quello sotto - nell'editor che preferisce:
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 OS
int 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;
}
}
Lo sviluppatore potrebbe fare delle modifiche, ma ai fini di questo articolo vanno bene le impostazioni predefinite. La compilazione e l'implementazione del codice sono più interessanti. Il comando esatto per compilare e implementare il codice varia a seconda dell'hardware. Di seguito è riportato un esempio che mostra come compilare e programmare la scheda in un unico comando per una scheda di sviluppo CY8CKIT-062-BLE di Cypress:
mbed compile -m CY8CKIT_062_BLE -t GCC_ARM -f
La prima compilazione del progetto può richiedere diversi minuti, poiché la toolchain dovrà costruire tutti i file associati che entrano automaticamente in un'applicazione Mbed. Al termine del ciclo di compilazione, il risultato dovrebbe assomigliare a quanto riportato nella Figura 7 qui sotto.
Figura 7: Risultato del compilatore Mbed quando il progetto LEDBlinky è stato compilato correttamente. (Immagine per gentile concessione di Jacob Beningo)
L'opzione -f nella riga di comando prenderà automaticamente il file hex compilato e lo copierà nella scheda di sviluppo, che appare come un dispositivo di archiviazione di massa DAPLink. A questo punto un LED dovrebbe lampeggiare e lo sviluppatore può iniziare a sviluppare la sua applicazione primaria.
Suggerimenti e consigli per lavorare con Mbed
Iniziare a lavorare con Mbed è semplice, ma gli sviluppatori potrebbero dover affrontare delle sfide. Di seguito sono riportati alcuni suggerimenti per iniziare a sviluppare un prodotto utilizzando Mbed:
- Evitare di utilizzare il compilatore online. Gli hobbisti possono farlo, ma per i professionisti avere il codice sorgente sui server di qualcun altro può essere un problema. Inoltre, i trasferimenti da e verso il cloud possono rallentare il debug. È preferibile usare un compilatore locale come l'IDE Mbed o la CLI Mbed.
- Mbed supporta il multi-threading ma, per impostazione predefinita, la funzione principale viene eseguita nel suo thread.
- Iniziare con i progetti di esempio Mbed e analizzarli per capire come lavorare in modo più efficiente con le applicazioni Mbed.
- Sfruttare il test harness Mbed per garantire che lo sviluppo dell'applicazione non abbia inavvertitamente interrotto nulla nella struttura Mbed.
- Utilizzare il sito hardware Mbed per cercare schede di sviluppo, componenti e moduli che possono essere integrati rapidamente fra loro per sviluppare un prodotto.
Seguendo questi suggerimenti gli sviluppatori potranno ridurre al minimo il tempo speso per lo sviluppo del loro prodotto embedded.
Conclusione
Gli sviluppatori di prodotti embedded e IoT hanno bisogno di un ecosistema ben supportato che fornisca loro strumenti, processi e software moderni che li aiutino ad accelerare i tempi di sviluppo e a ridurne al minimo i costi. Come dimostrato, il sistema operativo e la piattaforma Mbed sono una possibile opzione per gli sviluppatori.
Mbed fornisce un'architettura software scalabile e flessibile con molti componenti che sono già stati integrati e testati insieme. L'ampio supporto per vari moduli hardware, schede e componenti semplifica il compito degli sviluppatori di creare il prototipo di un prodotto che possa diventare una soluzione di produzione.
Riferimenti
Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di DigiKey o le sue politiche.




