Beschleunigung der Entwicklung von IoT-Produkten durch das Mbed-Ökosystem
Zur Verfügung gestellt von Nordamerikanische Fachredakteure von DigiKey
2019-11-20
Entwicklungsteams von Embedded- und IoT-Produkten stehen unter dem Druck, ihre Designs schnellstmöglich fertigzustellen und auszuliefern. Hierfür müssen sie auf bewährte Komponenten und Software-Frameworks mit einem stabilen Ökosystem zurückgreifen. Des Weiteren müssen Sie berücksichtigen, wie ihre Systeme künftig gewartet und skaliert werden sollen. Das schließt mit ein, dass die Lösungen portierbar und gegebenenfalls für mehrere Hardwareplattformen geeignet sein müssen.
Die Anbieter von Mikrocontrollern binden die Entwickler jedoch häufig an ihr eigenes Ökosystem, wodurch das einfache Wechseln zwischen Mikrocontrollern eingeschränkt wird. Außerdem sind die Softwaretools für Mikrocontroller-Ökosysteme häufig unzureichend, da sie zumeist auf der Programmiersprache C basieren, was die Arbeit der Entwicklungsteams ebenfalls erschweren kann.
Unter Berücksichtigung dieser Anforderungen stellt dieser Artikel mit Mbed von Arm eine Plattform und ein Betriebssystem vor. Er wird darauf eingehen, wie Entwickler mit dem Mbed-Ökosystem die Entwicklung von Embedded-Produkten beschleunigen und ihre Designs über das Ökosystem des Mikrocontroller-Anbieters hinaus skalieren können.
Was ist Arm Mbed?
Bei Mbed handelt es sich um eine Online-Zusammenarbeit unter der Leitung von Arm für Entwickler, die an der Entwicklung von IoT-Geräten interessiert sind1. Mbed stellt den Entwicklern eine große Auswahl an Ressourcen zur Beschleunigung der Entwicklung zur Verfügung, die von Mbed OS und Mbed TLS bis hin zu Entwicklungskarten und einzelnen Hardwarekomponenten reichen, die von den Mbed-Bibliotheken unterstützt werden.
Mbed soll es den Entwicklern ermöglichen, ein umfangreiches Ökosystem, das von 200.000 Entwicklern in Online-Communities sowie von großen Anbietern von Mikrocontrollern wie Cypress Semiconductor, NXP Semiconductors und STMicroelectronics unterstützt wird, zu nutzen, um ihre Entwicklungsarbeit zu beschleunigen, indem sie bereits vorhandene Komponenten, Entwicklungstools und Bibliotheken verwenden. Die Verwendung des Mbed-Ökosystems bietet zahlreiche Vorteile:
- Die Bibliotheken und Beispiele sind in C++ geschrieben, einer modernen, objektorientierten Programmiersprache, die Code von sich aus skalierbar und wiederverwendbar gestaltet.
- Die Möglichkeit, eine bereits existierende Hardwareplattform für das schnelle Prototyping eines Embedded-Produkts zu verwenden, um zu zeigen, dass es umsetzbar ist.
- Zugriff auf den Online- und Offline-Compiler von Mbed sowie die Mbed-Befehlszeilenoberfläche (CLI, Command Line Interface), wodurch die Entwicklung von Softwaretests vereinfacht wird (und die sogar in vielen Beispielen und Bibliotheken enthalten ist).
- Integrierte Tools zur Entwicklung von IoT-Geräten, wie beispielsweise der Dienst „Cloud Connector“, die nicht nur die Herstellung einer Verbindung zwischen einem Gerät und der Cloud erleichtern, sondern auch seine Verwaltung über andere cloud-basierte Dienste.
Durch seine allgemeine Architektur ist Mbed für Embedded-Entwickler extrem flexibel und skalierbar. Beispielsweise ist die Architektur im Allgemeinen in drei separate Schichten aufgeteilt (Abbildung 1):
- Eine untergeordnete Hardware-Abstraktionsschicht (HAL, Hardware Abstraction Layer)
- Eine Mbed OS-API, die als Middleware fungiert und Funktionen wie Speicherung, RTOS, sichere Verbindung und Stacks für die Kommunikation bereitstellt
- Eine übergeordnete IoT-Schicht, die den Anwendungscode des Entwicklers, Mbed-OS-Bibliotheken und Netzwerk-Clients enthält
Abbildung 1: Die Mbed-Architektur besteht aus drei primären Schichten, die je nach Bedarf skaliert und erweitert werden können. Hierbei handelt es sich um eine untergeordnete Hardwareschnittstelle, die durch eine HAL abstrahiert wird, eine Mbed-OS-API, die Middleware abstrahiert, sowie eine übergeordnete Schicht zum Schreiben von Anwendungscode und zur Nutzung von Bibliotheken und Clients wie Pelion. (Bildquelle: Arm Mbed)
Der Aufbau der Architektur ermöglicht es Entwicklern, nur diejenigen Teile zu verwenden, die sie für ihre Anwendung benötigen. Den Rest können sie einfach ignorieren. Dadurch wird die Architektur skalierbar, flexibel und benutzerfreundlich, sodass die Entwickler sie für das schnelle Prototyping nutzen und ihr Produkt in kürzerer Zeit vom Konzept zur Produktion bringen können.
Mbed beginnt mit der Hardware
Neben einer großartigen Softwarebasis bietet Mbed mehr als nur die Software und die Tools zur Entwicklung dieser Software. Der schnellste Weg für ein Team, ein Produkt zu entwickeln, besteht darin, auch das Hardwareökosystem von Mbed zu nutzen, das drei getrennte Bereiche umfasst:
- Module
- Karten
- Komponenten
Module sind im Wesentlichen Netzwerkkomponenten speziell für das IoT, die in einem zertifizierten und sofort einsatzbereiten Gehäuse geliefert werden. Ein Beispiel: Ein Entwickler, der an einem Produkt mit LoRaWAN-Unterstützung arbeitet, entscheidet sich eventuell für das von Multi-Tech Systems angebotene xDot-Modulentwicklungskit MTMDK-XDOT-NA1-A00 (Abbildung 2). Das xDot-Modul ermöglicht die bidirektionale Kommunikation über bis zu 10 Meilen (ca. 16 Kilometer) in Anwendungen mit direkter Sichtverbindung sowie über eine Entfernung von einer bis drei Meilen (ca. 1,6 bis 4,8 Kilometer) in Gebäuden, wobei die Datenraten zwischen 293 Bit pro Sekunde (bit/s) und 20 Kilobit pro Sekunde (kbit/s) liegen. Das Modul verwendet den energieeffizienten Prozessor STM32L151CCU6 von STMicroelectronics, der mit 32 Megahertz (MHz) getaktet ist und unter Verwendung eines AT-Messaging-Musters über SPI-, UART- oder I2C-Schnittstellen gesteuert werden kann.
Abbildung 2: Das xDot-Modul stellt den Entwicklern ein zertifiziertes LoRaWAN-Modul zur Verfügung, das von den Software-Stacks von Mbed unterstützt wird und einem Entwickler den sehr viel schnelleren Einstieg in die Entwicklungsarbeit ermöglicht. (Bildquelle: Multi-Tech Systems Inc.)
Mbed-Karten sind im Wesentlichen Entwicklungskarten für verschiedene Mikrocontroller-Familien, die alle von Mbed unterstützt werden. Jede Entwicklungskarte verfügt über einzigartige Merkmale und Funktionen, die vom Anbieter des Mikrocontrollers bereitgestellt werden. Ein Beispiel: Ein Entwickler, der mit einer Karte arbeiten möchte, die Bluetooth Low Energy (BLE) unterstützt, interessiert sich eventuell für die CY8CKIT-062-BLE von Cypress Semiconductor (Abbildung 3).
Abbildung 3: Die Entwicklungskarte CY8CKIT-062-BLE bietet diverse Ausstattungsmerkmale zur Entwicklung eines vernetzten IoT-Geräts, inklusive eines E-Ink-Displays, kapazitiver Tasten und Schieber, BLE-Module und KitProg2-Debugger. (Bildquelle: Cypress Semiconductor)
Die CY8CKIT ist dahingehend einzigartig, dass sie über einen sicheren PSoC-62-Multi-Core-Mikrocontroller verfügt. Ein Kern ist ein Arm®-Cortex®-M4-Prozessor, während es sich beim zweiten Kern um einen Arm-Cortex-M0+ handelt. Dadurch können die Entwickler ihren Anwendungscode entweder partitionieren, sodass sich ein Prozessor um die BLE-Kommunikation kümmert, oder sie können die Anwendung sperren, indem sie den Cortex-M0+ als Sicherheitsprozessor verwenden. Die auf den Karten verfügbare I/O-Erweiterung macht es für die Entwickler sehr viel einfacher, Prototypen ihrer Systeme zu erstellen, indem sie Mbed-Komponenten mit ihnen verbinden.
Eine Mbed-Komponente ist eine Hardwarekomponente, der von Mbed unterstützte Bibliotheken und Middleware zugeordnet sind, die als Bausteine zur Erstellung eines Produkts dienen. Ein Beispiel: Ein Entwickler, der an einem IoT-Projekt arbeitet, entscheidet sich für das Hinzufügen eines Temperatursensors. Er durchsucht also die Mbed-Komponenten nach unterstützten Temperatursensoren und stößt beispielsweise auf den MAX31723PMB1 von Maxim Integrated, der sich in einem Peripheriemodul befindet, das für schnelles Prototyping verwendet werden kann (Abbildung 4).
Das Großartige an solchen Mbed-Komponenten ist, dass sie fast immer als Entwicklungskarten mit Schaltplänen verfügbar sind. So kann ein Entwickler nicht nur die Hardwarekonfiguration sehen, die erforderlich ist, damit der Sensor funktioniert, sondern ihm steht auch die Softwarebibliothek zur Verfügung, um den Sensor in Betrieb zu nehmen.
Abbildung 4: Das Peripheriemodul MAX31723PMB1 eines digitalen Thermometers und Thermostats (Schaltplan abgebildet) kann problemlos mit einer Mbed-Entwicklungskarte verbunden werden. Anschließend kann die zugehörige Mbed-Komponentenbibliothek verwendet werden, um im Handumdrehen eine Schnittstelle zum Temperatursensor herzustellen und mit ihm zu interagieren. (Bildquelle: Maxim Integrated)
Einfache Sensoren wie solche für Temperatur- und Feuchtigkeitsmessungen sind nicht die einzigen Sensortypen, die über Mbed verfügbar sind. Ein Beispiel: Entwickler, die an einem medizinischen Gerät arbeiten, werden feststellen, dass das Modul MAXREFDES220# von Maxim Integrated ein Referenzdesign für einen Fingerpulsmesser und einen SpO2-Sensor zur Messung des Blutsauerstoffspiegels darstellt (Abbildung 5).
Abbildung 5: Das Modul MAXREFDE220# bietet Entwicklern eine Entwicklungskarte, die zur fingerbasierten Pulsmessung sowie zur SpO2-Überwachung verwendet werden kann. (Bildquelle: Maxim Integrated)
Es stehen auch Komponenten wie die Flow-Breakout-Karte 114991252 VL53L0X von Seeed Technology zur Verfügung, die in Anwendungen wie der Lichtmessung und der 3D-Time-of-Flight-Abstandsmessung verwendet werden kann (Abbildung 6). Dieser Entwickler ist eventuell von Interesse für Entwickler, die versuchen, gestenbasierte Technologien am Netzwerkrand zu entwickeln.
Abbildung 6: Die Flow-Breakout-Karte 114991252 von Seeed Technologies kann ganz einfach in eine Mbed-Entwicklungskarte integriert und in Anwendungen mit Beleuchtungsmessungen oder in 3D-Laufzeitanwendungen wie etwa der Gestenerkennung verwendet werden. (Bildquelle: Seeed Technology)
Sobald ein Entwickler eine Entwicklungskarte und die benötigten Komponenten ausgewählt hat, kann er die Entwicklung mit Mbed mit einer „Hello World“ LEDBlinky-Anwendung beginnen, um zu bestätigen, dass die Karte erfolgreich programmiert und eine LED zum Blinken gebracht werden kann.
Schreiben einer „Hello World“ LEDBlinky-Anwendung mit Mbed
Es gibt verschiedene Möglichkeiten, um eine Mbed-Anwendung zu entwickeln: über den Online-Compiler, den Offline-Compiler oder durch Verwendung der Befehlszeilenoberfläche (CLI). Persönliche Erfahrungen empfehlen die Verwendung der CLI, da sie mehr Kontrolle über die Entwicklung bietet und sie die Integration in Entwicklungsprozesse erleichtert, z. B in Test-Harnische und Continuous-Integration-Server.
Die CLI bietet Funktionen einer Befehlszeilenoberfläche, sodass ein Entwickler, der unter Windows arbeitet, die Befehlseingabe zum Kompilieren des Codes verwenden kann. Der erste Schritt zur Erstellung der LEDBlinky-Anwendung besteht in der Verwendung des vorgefertigten, zusammen mit Mbed gelieferten Beispiels. Hierfür kann der folgende Befehl in die Befehlszeile eingegeben werden:
mbed import mbed-os-example-blinky
Das Herunterladen des Beispiels dauert einige Minuten, da auch das unterstützende Mbed-Betriebssystem sowie weitere Komponenten heruntergeladen werden, die in der Anwendung eventuell verwendet werden. Sobald das Herunterladen abgeschlossen ist, kann ein Entwickler zum Ordner „mbed-os-example-blinky“ navigieren, in dem sich eine Datei „main.cpp“ befindet. Dieses Modul kann im vom Entwickler bevorzugten Editor geöffnet werden und sieht in etwa folgendermaßen aus:
Kopieren
#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;
}
}
Hier könnte ein Entwickler Änderungen vornehmen, aber für diesen Artikel sind die Standardeinstellungen völlig in Ordnung. Das Kompilieren und Bereitstellen des Codes sind von größerem Interesse. Der exakte Befehl hierfür variiert abhängig von der verwendeten Hardware. Das folgende Beispiel zeigt das Kompilieren und Programmieren der Karte mit einem einzelnen Befehl für die Entwicklungskarte CY8CKIT-062-BLE von Cypress:
mbed compile -m CY8CKIT_062_BLE -t GCC_ARM -f
Das erstmalige Kompilieren des Projekts kann mehrere Minuten dauern, da die Toolchain sämtliche zugehörigen Dateien erstellen muss, die bei einer Mbed-Anwendung automatisch ins Spiel kommen. Sobald das Kompilieren abgeschlossen ist, sollte das Ergebnis in etwa so wie in Abbildung 7 aussehen.
Abbildung 7: Die Ausgabe des Mbed-Compilers, nachdem das LEDBlinky-Projekt erfolgreich kompiliert wurde. (Bildquelle: Jacob Beningo)
Die Option -f in der Befehlszeile kopiert die kompilierte Hex-Datei automatisch auf die Entwicklungskarte, die als ein DAPLink-Massenspeichergerät angezeigt wird. Zu diesem Zeitpunkt sollte eine LED blinken und der Entwickler kann mit der Entwicklung der primären Anwendung beginnen.
Tipps und Tricks zum Arbeiten mit Mbed
Der Einstieg in Mbed ist zwar einfach, aber dennoch können sich Entwickler Herausforderungen gegenüber sehen. Nachfolgend finden Sie einige „Tipps und Tricks“ für den Einstieg in die Produktentwicklung mit Mbed:
- Vermeiden Sie es, den Online-Compiler zu verwenden. Für Hobbybastler mag das zwar in Ordnung sein, aber für Profis kann es ein Problem darstellen, wenn sich Quellcode auf fremden Servern befindet. Außerdem kann das Debuggen durch das Senden an und das Abrufen aus der Cloud verlangsamt werden. Ein lokaler Compiler wie die Mbed-IDE oder die Mbed-CLI sind bessere Optionen.
- Mbed unterstützt Multi-Threading. Die Hauptfunktion wird jedoch standardmäßig in ihrem eigenen Thread ausgeführt.
- Beginnen Sie mit Mbed-Beispielprojekten und nehmen Sie diese genau in Augenschein, um zu verstehen, wie man mit Mbed-Anwendungen effizienter arbeiten kann.
- Nutzen Sie den Test-Harnisch von Mbed, um sicherzustellen, dass durch die Anwendungsentwicklung nicht versehentlich das Mbed-Framework beeinträchtigt wurde.
- Verwenden Sie die Website für Mbed-Hardware, um nach Entwicklungskarten, Komponenten und Modulen zu suchen, die schnell integriert werden können, um ein Produkt zu entwickeln.
Wenn Entwickler diese Tipps beherzigen, sollte gewährleistet sein, dass sie die Dauer der Entwicklung ihres Embedded-Produkts minimieren können.
Fazit
Embedded- und IoT-Entwickler benötigen ein gut unterstütztes Ökosystem, das moderne Tools, Prozesse und Software bereitstellt, mit deren Hilfe sie ihre Entwicklungsbemühungen beschleunigen und die Entwicklungskosten minimieren können. Wie man sehen konnte, stellen die Mbed-Plattform und das Mbed-Betriebssystem eine potenzielle Option für die Entwickler dar.
Mbed bietet eine skalierbare und flexible Softwarearchitektur mit zahlreichen Komponenten, die bereits zusammen integriert und getestet wurden. Die umfangreiche Unterstützung für verschiedene Hardwaremodule, Karten und Komponenten erleichtert Entwicklern die Erstellung eines Prototyps, der anschließend zu einer Produktionslösung skaliert werden kann.
Verwendete Literatur
Haftungsausschluss: Die Meinungen, Überzeugungen und Standpunkte der verschiedenen Autoren und/oder Forumsteilnehmer dieser Website spiegeln nicht notwendigerweise die Meinungen, Überzeugungen und Standpunkte der DigiKey oder offiziellen Politik der DigiKey wider.




