Accelerera IoT-produktutveckling med hjälp av Mbed-ekosystemet

Av Jacob Beningo

Bidraget med av DigiKeys nordamerikanska redaktörer

Team som utvecklar inbäddade lösningar och IoT-produkter förväntas slutföra och leverera sina lösningar så snabbt som möjligt. För att leva upp till snabbhetskravet måste de använda beprövade komponenter och programvarusystem som ingår i ett kraftfullt och stabilt ekosystem. De måste även se över hur systemen ska underhållas och skalas i framtiden, vilket innebär att lösningarna måste vara portabla och fungera på flera olika maskinvaruplattformar.

Microcontroller-leverantörerna har dock en tendens att knyta utvecklarna ganska starkt till de egna ekosystemen, vilket gör det svårare att växla mellan olika microcontrollers. Dessutom är det vanligt att programvaruverktygen för microcontroller-ekosystemen, vilka mestadels bygger på språket C, inte räcker till, vilket också kan vara ett hinder för utvecklarna.

Den här artikeln handlar om Arms Mbed-plattform och operativsystem, vilka är intressanta med tanke på de krav och begränsningar som beskrivs ovan. Vi visar hur utvecklarna kan använda Mbed-ekosystemet för att accelerera inbäddad produktutveckling och öppna upp lösningarna för andra komponenter än de som ingår i microcontroller-leverantörernas ekosystem.

Vad är Arm Mbed?

Mbed är ett online-samarbete som leds av Arm och är avsett för utvecklare som vill bygga IoT-enheter1. Mbed innehåller ett brett urval av resurser som accelererar utvecklingen, och systemet innefattar allt från Mbed OS och Mbed TLS till utvecklingskort och enskilda maskinvarukomponenter som stöds av Mbed-biblioteken.

Tanken bakom Mbed är att erbjuda ett stort ekosystem som stöds av 200 000 utvecklare i olika online-communitier, och av stora microcontroller-leverantörer såsom Cypress Semiconductor, NXP Semiconductors och STMicroelectronics, för att erbjuda möjligheter till effektivare utveckling med hjälp av befintliga komponenter, utvecklingsverktyg och bibliotek. Det finns många fördelar med att använda Mbed-ekosystemet:

  • Biblioteken och exemplen är skrivna i C++, ett modernt objektorienterat språk som gör koden skalbar och återanvändningsbar.
  • Möjlighet att använda en befintlig maskinvaruplattform för snabb prototyputveckling av inbäddade produkter för att demonstrera deras funktionalitet.
  • Tillgång till Mbeds online- och offlinekompilator och Mbeds kommandoradsgränssnitt, vilket gör det enkelt att utveckla programvarutester (som dessutom ingår i många exempel och bibliotek).
  • Inbyggda verktyg för IoT-produktutveckling, till exempel en molnanslutningstjänst som gör det enkelt att ansluta enheter till molnet och att sedan administrera dem via andra molnbaserade tjänster.

Mbeds generella arkitekturmodell gör systemet extremt flexibelt och skalbart. Modellen har i allmänhet tre separata lager (figur 1):

  • Ett hårdvaruabstraktionslager på lågnivå (HAL)
  • Mbed OS-API, ett slags mellanprogramvara med funktioner för lagring, RTOS, säker anslutning och kommunikationsstackar
  • Ett högnivå IoT-lager som innehåller utvecklarens applikationskod, Mbed OS-bibliotek och anslutningsklienter

Mbed-arkitekturen har tre lager (klicka för att förstora)Figur 1: Mbed-arkitekturen har tre huvudlager som kan skalas och utökas efter behov: ett lågnivå maskinvarugränssnitt som abstraheras via HAL, ett Mbed OS-API-lager som abstraherar mellanprogramvara samt ett högnivålager för att skriva applikationskoden och använda bibliotek och klienter såsom Pelion. (Bildkälla: Arm Mbed)

Tack vare modellens utformning kan utvecklaren använda de delar som behövs i tillämpningen och utelämna resten. Det här gör arkitekturen skalbar, flexibel och lätt att använda för att snabbt utveckla prototyper och ta dessa till produktion i en effektiv process.

Mbed börjar med maskinvaran

Mbed är en mycket bra programvarugrund, men erbjuder mer än programvara och de verktyg som krävs för att utveckla programvarorna. Det snabbaste sättet att utveckla en produkt är att använda Mbeds ekosystem av maskinvaror, som har tre tydliga områden:

  • Moduler
  • Kort
  • Komponenter

Modulerna är i huvudsak IoT-centrerade anslutningsenheter i certifierade och användningsklara paket. En utvecklare som arbetar på en produkt som stöder LoRaWAN kan till exempel välja Multi-Tech Systems modulutvecklingssats MTMDK-XDOT-NA1-A00 xDot (figur 2). xDot-modulen erbjuder dubbelriktad kommunikation på upp till ca 16 km avstånd vid fri sikt och ca 1,6–4,8 km inne i byggnader, vid datahastigheter från 293 bits/s till 20 kbits/s. Modulen använder en strömsnål STMicroelectronics STM32L151CCU6-processor som körs vid frekvensen 32 MHz och kan styras med ett AT-meddelandesystem via gränssnitten SPI, UART eller I2C.

Multi-Tech Systems xDot-modulFigur 2: xDot-modulen ger tillgång till en certifierad LoRaWAN-modul som stöds av Mbeds programstackar och hjälper till att snabbt komma igång med utvecklandet. (Bildkälla: Multi-Tech Systems Inc.)

Mbed-korten är i huvudsak utvecklingskort för olika microcontroller-familjer, som samtliga stöds av Mbed. Varje utvecklingskort har unika egenskaper och funktioner från microcontroller-leverantören. Är utvecklaren till exempel intresserad av ett kort som stöder Bluetooth Low Energy (BLE), finns Cypress Semiconductors CY8CKIT-062-BLE (figur 3).

Bild av Cypress utvecklingskort CY8CKIT-062-BLEFigur 3: Utvecklingskortet CY8CKIT-062-BLE innehåller flera funktioner för att utveckla en IoT-ansluten enhet, exempelvis en E-Ink-display, kapacitiva touchknappar och reglage, en BLE-modul samt en KitProg2-debugger. (Bildkälla: Cypress Semiconductor)

CY8CKIT är unik eftersom den har en flerkärnig, säker PSoC 62-microcontroller. Den ena kärnan är en Arm® Cortex®-M4-processor, och den andra kärnan är en strömsnål Arm Cortex-M0+. Därmed kan utvecklaren välja att dela upp applikationskoden, exempelvis genom att låta en processor hantera BLE-kommunikationen eller skydda tillämpningen genom att använda Cortex-M0+-kärnan som säkerhetsprocessor. Alla I/O-expansionsmöjligheter på korten gör det mycket enklare att prototyputveckla system genom att ansluta Mbed-komponenter till dem.

En Mbed-komponent är en maskinvarukomponent med anslutna bibliotek och mellanprogramvara som stöds av Mbed. Komponenterna fungerar som byggblock för att skapa produkter. En utvecklare som håller på med ett IoT-projekt kan exempelvis bestämma sig för att inkludera en temperatursensor. Om utvecklaren söker efter temperatursensorer i Mbed-utbudet, kan han eller hon hitta, exempelvis, Maxim Integrateds MAX31723PMB1, vilket är en tillbehörsmodul som kan användas för snabbt prototypbyggande (figur 4).

Det fina med sådana Mbed-komponenter är att de nästan alltid finns som utvecklingskort med tillhörande kopplingsscheman. Det innebär att du kan se vilken maskinvarukonfiguration som krävs för att få sensorn att fungera, men även att du kan använda det tillgängliga programvarubiblioteket för att installera och driftsätta sensorn.

Kopplingsschema för Maxims MAX31723PMB1-modul med digital termometer och termostatFigur 4: Kopplingsschema för MAX31723PMB1 – en digital termometer- och termostatmodul – kan enkelt anslutas till ett Mbed-utvecklingskort. Sedan kan det associerade Mbed-komponentbiblioteket användas för att snabbt skapa ett gränssnitt mot temperatursensorn och interagera med den. (Bildkälla: Maxim Integrated)

Enkla sensorer, exempelvis för temperatur- eller luftfuktighetsmätning, är inte den enda typen av sensorer som är tillgängliga via Mbed. Utvecklare som arbetar med medicinska enheter kommer upptäcka att Maxim Integrateds MAXREFDES220#-modul ger en referensdesign för en fingerbaserad puls- och blodsyremätsensor (figur 5).

Bild av Maxims MAXREFDES220#-modulFigur 5: MAXREFDES220#-modulen ger tillgång till ett utvecklingskort som erbjuder fingerbaserad puls- och blodsyremätning. (Bildkälla: Maxim Integrated)

Ett annat komponentexempel är Seeed Technologys breakout-kort 114991252 VL53L0X Flow, som kan användas i exempelvis avståndsmätning genom ljusavkänning och 3D-ToF-mätning (figur 6). Den typen av sensor kan vara intressant för den som vill utveckla avancerad gestbaserad teknik.

Breakout-kortet 114991252 Flow från Seeed TechnologiesFigur 6: Breakout-kortet 114991252 Flow från Seeed Technologies kan enkelt integreras med ett Mbed-utvecklingskort och användas i tillämpningar där man måste kunna mäta ljus eller använda 3D time-of-flight-mätning. (Bildkälla: Seeed Technology)

När ett utvecklingskort och övriga komponenter har valts, kan utvecklaren börja utveckla med Mbed genom att skapa ett LEDBlinky-program av typ ”Hello World” som kontroll av att det fungerar att programmera kortet och få en LED att blinka.

Skriva ett LEDBlinky-program motsvarande ”Hello World” med Mbed

Det finns flera sätt att utveckla Mbed-applikationer: genom att använda online-kompilatorn, offline-kompilatorn eller kommandoradsgränssnittet. Utifrån egen erfarenhet rekommenderar jag att du använder kommandoradsgränssnittet, eftersom det ger mer kontroll över utvecklingsprocessen och gör det lättare att använda exempelvis testplattformar och integrationsservrar.

Kommandoradsgränssnittet erbjuder möjlighet att, för den som jobbar i Windows, använda kommandoprompten för att kompilera koden. Det första steget för att skapa ett LEDBlinky-program är att använda det exempel som medföljer Mbed. Det kan göras genom att ange följande kommando vid kommandoprompten:

mbed import mbed-os-example-blinky

Det tar några minuter att ladda ned exemplet, eftersom det även innehåller stöd för Mbed OS och andra komponenter som kan användas i applikationen. När nedladdningen har slutförts navigerar du till mappen mbed-os-example-blinky, som innehåller filen main.cpp. Du kan använda din favoriteditor för att öppna modulen, vilken ser ut som något i stil med:

Copy
#include "mbed.h"
#include "platform/mbed_thread.h"
#include "stats_report.h"
 
DigitalOut led1(LED1);
 
#define SLEEP_TIME                  500 // (msek)
#define PRINT_AFTER_N_LOOPS         20
 
// main() körs i en egen tråd i OS 
int main()
{
    SystemReport sys_state( SLEEP_TIME * PRINT_AFTER_N_LOOPS /* Loopfördröjning i ms */);
 
    int count = 0;
    while (true) {
        // Blinka LED och vänta 0,5 sekunder
        led1 = !led1;
        thread_sleep_for(SLEEP_TIME);
 
        if ((0 == count) || (PRINT_AFTER_N_LOOPS == count)) {
            // Efter huvudtrådens väntpaus, rapportera aktuell systemstatus
            sys_state.report_state();
            count = 0;
        }
        ++count;
    }
}

Du kan modifiera koden, men i den här artikeln använder vi den oförändrade versionen. Det är mer intressant att kompilera och köra koden. Det specifika kommandot för att kompilera och köra koden beror på maskinvaran. Exemplet nedan visar hur du kompilerar och programmerar kortet med ett enda kommando för Cypress-utvecklingskortet CY8CKIT-062-BLE:

mbed compile -m CY8CKIT_062_BLE -t GCC_ARM -f

Det kan ta flera minuter att kompilera projektet första gången, eftersom verktygskedjan måste bygga alla associerade filer som tillförs automatiskt i Mbed-applikationer. När kompileringscykeln har slutförts blir resultatet ungefär som i figur 7 nedan.

Kod från Mbed-kompilatorn när LEDBlinky-projektet har kompileratsFigur 7: Kod från Mbed-kompilatorn efter lyckad kompilering av LEDBlinky-projektet. (Bildkälla: Jacob Beningo)

Alternativet -f på kommandoraden gör så att den kompilerade hex-filen kopieras till utvecklingskortet, som visas som en DAPLink-masslagringsenhet. I det här skedet blinkar en LED-lampa, och du kan börja utveckla andra applikationer.

Tips för att arbeta med Mbed

Att komma igång med Mbed är enkelt, men senare kan utvecklaren stöta på vissa utmaningar. Nedan följer några tips för att börja utveckla produkter med hjälp av Mbed:

  • Undvik att använda online-kompilatorn. Den fungerar bra för hobbyutvecklare, men för proffs är det mindre bra att lagra källkod på någon annans server. Dessutom kan överföring fram och tillbaka från molnet göra felsökningsmomentet långsammare. En lokal kompilator som Mbed IDE eller Mbeds kommandoradsverktyg är bättre alternativ.
  • Mbed stöder flertrådsapplikationer, men som standard körs huvudfunktionen i en egen tråd.
  • Börja med exempelprojekten och gå igenom dem för att förstå hur du kan arbeta med Mbed-applikationerna på ett effektivt sätt.
  • Använd Mbeds testplattform för att kontrollera att dina utvecklingsåtgärder inte har orsakat fel i Mbed-ramverket.
  • Använd Mbeds maskinvarusida för att söka efter utvecklingskort, komponenter och moduler som snabbt kan integreras till en produkt.

Följer du de här tipsen minimeras tiden för att utveckla inbäddade produkter.

Slutsats

Utvecklare av inbäddade system och IoT-produkter behöver ett etablerat ekosystem som innehåller moderna verktyg, processer och programvara som accelererar utvecklandet och minimerar utvecklingskostnaderna. Mbeds plattform och OS är ett potentiellt alternativ som utvecklare kan dra nytta av.

Mbed erbjuder en skalbar och flexibel programvaruarkitektur med många komponenter som redan har integrerats och testats tillsammans. Ett omfattande stöd för olika maskinvarumoduler, kort och komponenter gör det enkelt för utvecklarna att skapa produktprototyper som sedan kan skalas till en produktionsklar lösning.

Referenser

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

Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.

Om skribenten

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo är konsult inom inbäddad programvara. Han har publicerat över 200 artiklar om utveckling av inbäddad programvara, och är en eftertraktad talare och teknisk utbildare med tre examina, däribland en master i teknik från University of Michigan.

Om utgivaren

DigiKeys nordamerikanska redaktörer