Mbedエコシステムを活用したIoT製品開発の迅速化
DigiKeyの北米担当編集者の提供
2019-11-20
組み込み開発およびモノのインターネット(IoT)開発のチームは、その設計を可能な限り速く完了して出荷しなければならないというプレッシャーにさらされています。開発を迅速に進めるには、実証済みのコンポーネントと、強力なエコシステムに支えられたソフトウェアフレームワークを使う必要があります。また、そのシステムの保守および将来のスケーリングについても見据える必要があります。つまり、そうしたソリューションが可搬性を備え、必要に応じて複数のハードウェアプラットフォームにまたがって動作できることも必要であるということです。
しかし、マイクロコントローラのベンダーは往々にして開発者を自社のエコシステムに縛りつけるものであり、このことはマイクロコントローラ間のマイグレーションの容易さを制限することになります。その上、マイクロコントローラのエコシステム向けソフトウェアツールは十全ではないことも多く、ほとんどはC言語をベースにしています。こうしたことも開発チームの妨げになる場合があります。
これらの要件を考慮して、この記事では、ArmのMbedプラットフォームおよびオペレーティングシステムを紹介します。開発者がMbedエコシステムをどのように活用すれば、組み込み製品開発を迅速化でき、マイクロコントローラベンダーのエコシステムを超えてスケーリングができるのかを示します。
Arm Mbedとは?
Mbedは、IoTデバイス1の製作に関心のある開発者向けにArmが主導しているオンラインコラボレーションです。開発を迅速化することを目的として幅広く取り揃えたリソースを提供するものであり、Mbed OSおよびMbed TLSから、Mbedライブラリがサポートしている開発ボードおよび個別ハードウェア部品にまでおよびます。
Mbedの背景をなす前提は、オンラインコミュニティの200,000人の開発者と、Cypress Semiconductor、NXP Semiconductors、STMicroelectronicsなどの主要なマイクロコントローラベンダーに支えられた巨大なエコシステムを開発者が活用し、既存のコンポーネント、開発ツール、ライブラリを使って開発を迅速化できるようにすることです。Mbedエコシステムを利用すれば、以下のような多数の利点が得られます。
- ライブラリおよびサンプルは、現代的なオブジェクト指向言語であるC++で記述されており、その設計によりコードがスケーラブルで再利用可能になる。
- 既存のハードウェアプラットフォームを活用して組み込み製品の有効性を実証する試作が迅速にできる。
- Mbedのオンラインコンパイラおよびオフラインコンパイラに加えてMbedコマンドラインインターフェース(CLI)が利用でき、ソフトウェアテストを容易に開発できる(また多くのサンプルとライブラリにも含まれている)。
- IoTデバイス開発用の内蔵ツールを利用できる。例として、デバイスのクラウド接続だけでなく、クラウドベースのサービスでそれらの管理も容易にできる、クラウドのConnectorサービスがある。
Mbedの全体アーキテクチャモデルは、組み込み開発者にとってきわめて柔軟性がありスケーラブルです。たとえば、このアーキテクチャモデルは全体的に、以下の3つのレイヤに分かれます(図1)。
- 低位のハードウェア抽象化レイヤ(HAL)
- Mbed OS API。ストレージ、RTOS、セキュアなコネクティビティ、通信スタックなどの機能を提供するミドルウェアとして働く。
- 上位のIoTレイヤ。開発者のアプリケーションコード、Mbed OSライブラリ、コネクティビティクライアントが含まれる。
図1:Mbedのアーキテクチャは、必要に応じてスケーリングおよび拡張が可能な3つの主要レイヤで構成されています。そのレイヤとは、HALによって抽象化された低位のハードウェアインターフェース、ミドルウェアを抽象化するMbed OS APIレイヤ、アプリケーションコードを記述し、ライブラリおよびPelionなどのクライアントを活用するための上位レイヤです。(画像提供:Arm Mbed)
このアーキテクチャの設計は、開発者がアプリケーションに必要なものを取り込み、残りを省くことができるように意図したものです。そのため、このアーキテクチャはスケーラブルで柔軟性があり、これを活用すればプロトタイプを迅速に開発し、短期間に製品をプロトタイプから量産品にすることができます。
Mbedはハードウェアから始める
Mbedは優れたソフトウェアの基盤を提供しますが、単にソフトウェアの開発に必要なソフトウェアとツールを提供するにとどまりません。最速の製品開発ができる方法は、Mbedのハードウェアエコシステムも活用することです。こちらは以下の3つの明確に分かれた領域から成っています。
- モジュール
- ボード
- 部品
モジュールは、本質的にはIoTを中心としたコネクティビティデバイスであり、認証取得済みのすぐに使用可能なパッケージで供給されます。たとえば、LoRaWANに対応した製品に取り組んでいる開発者ならば、Multi-Tech SystemsのxDotモジュール開発キットMTMDK-XDOT-NA1-A00を選択するかもしれません(図2)。xDotモジュールは、見通し線アプリケーションで最長10マイル、建物内への1~3マイルの双方向通信をデータレート293bit/s~20kbit/sで可能です。このモジュールは、STMicroelectronicsが提供する低消費電力、32MHz動作のSTM32L151CCU6プロセッサを使用しており、SPIや、UART、I2Cのインターフェースを介してATメッセージ方式で制御できます。
図2:このxDotモジュールでは、Mbedソフトウェアスタックがサポートしている認証取得済みLoRaWANモジュールを開発者が利用できるため、大幅に短い時間で稼働させられます。(画像提供:Multi-Tech Systems Inc.)
Mbedの各ボードは、基本的にMbedがすべてサポートしている各マイクロコントローラファミリ用の開発ボードです。各開発ボードは、マイクロコントローラのベンダーによって提供されているユニークな特長および機能を備えています。たとえば、Bluetooth Low Energy(BLE)対応のボードを扱うことに関心のある開発者ならば、Cypress SemiconductorのCY8CKIT-062-BLEに関心があるかもしれません(図3)。
図3:CY8CKIT-062-BLE開発ボードは、E-Inkディスプレイ、静電容量式タッチボタンおよびスライダ、BLEモジュール、KitProg2デバッガなど、IoTコネクテッドデバイス開発のための機能を多数備えています。(画像提供:Cypress Semiconductor)
CY8CKITは、マルチコアのセキュアマイクロコントローラPSoC 62を搭載している点でユニークです。1つのコアはArm® Cortex®-M4プロセッサで、もう1つのコアは低消費電力のArm Cortex-M0+です。このため、開発者は1つのプロセッサにBLE通信を処理させるなどアプリケーションコードを区分化するか、Cortex-M0+コアをセキュリティプロセッサとして使用してアプリケーションを封鎖することができます。ボードが備えている全I/O拡張機能により、Mbedコンポーネントを接続することで、システムの試作が大幅に容易になります。
Mbedコンポーネントは、Mbedがサポートする、それに関連したライブラリおよびミドルウェアを擁するハードウェア部品であり、製品開発の構成要素の役割を持ちます。たとえば、IoTプロジェクトに取り組んでいる開発者ならば、温度センサを使おうという場合もあるでしょう。Mbedコンポーネントの中でサポート対象の温度センサを検索すると、たとえば、Maxim IntegratedのMAX31723PMB1が見つかります。これは迅速な試作に使用できる周辺モジュールとして供給されています(図4)。
こうしたMbedコンポーネントの優れた点は、ほぼ必ず回路図が付属した開発ボードとして提供されていることです。そのため、開発者はセンサを機能させるのに必要なハードウェア構成がわかることはもちろんのこと、センサを稼働させるために使用できるソフトウェアライブラリも得られます。
図4:MAX31723PMB1デジタル温度計およびサーモスタット周辺モジュール(表示の回路図)は、容易にMbed開発ボードに接続し、関連Mbedコンポーネントライブラリを使用してすばやく温度センサとインターフェース接続し、やり取りができます。(画像提供:Maxim Integrated)
Mbedで入手可能なセンサのタイプは、これら温度および湿度測定のようなシンプルなセンサだけではありません。たとえば、医療機器に取り組んでいる開発者ならば、Maxim IntegratedのMAXREFDES220#モジュールを見いだすかもしれません。これは、指に使用する心拍数およびSpO2血中酸素センサのリファレンス設計です(図5)。
図5:MAXREFDES220#モジュールは指で心拍数およびSpO2モニタリングができる開発ボードです。(画像提供:Maxim Integrated)
光センシングおよび3D ToF(Time-of-Flight)距離測定などの用途に使用できる、Seeed Technologyのフローブレークアウトボード114991252 VL53L0Xのような部品もあります(図6)。たとえば、エッジにおけるジェスチャを利用した技術の開発を試みようとする開発者ならば、このセンサに関心をもつかもしれません。
図6:Seeed Technologiesのフローブレークアウトセンサボード114991252は容易にMbed開発ボードに統合でき、光センシングが必要なアプリケーションやジェスチャ検出のような3D ToFアプリケーションで使用できます。(画像提供:Seeed Technology)
開発ボードとコンポーネントを選択したら、いわゆる「Hello World」に相当するLEDBlinkyアプリケーションを作成します。ボードにプログラムを書き込んでLEDが点滅することを確認できれば、Mbedで開発を開始できます。
「Hello World」に相当するLEDBlinkyアプリケーションをMbedで作成
Mbedアプリケーションを開発するには複数の方法があります。それは、オンラインコンパイラを使う方法、オフラインコンパイラを使う方法、コマンドラインインターフェース(CLI)ツールを使う方法です。個人的な経験からは、CLIを使うことを提案します。それは、開発プロセスの制御の自由度が高く、テストハーネスおよび継続的インテグレーションサーバのような開発用プロセスに組み込むのが簡単になるためです。
このCLIは、Windowsで作業する開発者がコマンドプロンプトを使用してコードをコンパイルできるように、コマンドラインインターフェース機能を提供します。LEDBlinkyアプリケーション作成の第1ステップは、Mbedで提供されているあらかじめ作成済みのサンプルを使うことです。これは、コマンドプロンプトに以下のコマンドを入力するとできます。
mbed import mbed-os-example-blinky
このサンプルのダウンロードでは、サポートするMbed OSと、このアプリケーションで使用される可能性のある他のコンポーネントの取得も行うため、数分かかります。ダウンロードが完了してmbed-os-example-blinkyフォルダに移動すると、main.cppというファイルがあるのが確認できます。このモジュールは開発者の好みのエディタで開くことができ、以下のような内容になっています。
コピー
#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;
}
}
ここで変更を加えることもできますが、この記事の趣旨上、このままで問題ありません。それよりも大切なことは、このコードをコンパイルしてデプロイすることです。コードをコンパイルおよびデプロイする正しいコマンドは、ハードウェアに応じて変わります。下に示すのは、CypressのCY8CKIT-062-BLE開発ボードの場合に、単一のコマンドでコンパイルしてボードに書き込む例です。
mbed compile -m CY8CKIT_062_BLE -t GCC_ARM -f
初めてこのプロジェクトをコンパイルする場合、Mbedアプリケーションに自動的に組み込まれるすべての関連ファイルをツールチェーンがビルドする必要があるため、数分かかる場合があります。コンパイル処理が完了すると、出力結果は下の図7のようになるはずです。
図7:LEDBlinkyプロジェクトが正常にコンパイルされた場合のMbedのコンパイラ出力(画像提供:Jacob Beningo)
コマンド行の-fオプションの指定により、自動的にコンパイル済み16進ファイルが開発ボード上にコピーされます。開発ボードはDAPLink大容量ストレージデバイスとして表示されます。この時点でLEDが点滅しているはずであり、主目的であるアプリケーションの開発を開始できます。
Mbedを使用した作業のヒントとコツ
Mbedを利用開始することは単純明快ですが、開発者にとって難題が発生する可能性もあります。以下に、Mbedを利用して製品開発を開始するための「ヒントとコツ」を挙げます。
- オンラインコンパイラの使用を避ける。ホビーイストの場合は問題ないのですが、プロフェッショナルの場合、ソースコードを他人のサーバ上に置くことは問題になることがあります。また、クラウドを行ったり来たりするのもデバッグ作業を遅らせる場合があります。Mbed IDEやMbed CLIなどのローカルコンパイラを使う方がいいでしょう。
- Mbedはマルチスレッドに対応しているが、デフォルトではmain関数はそれ自身のスレッドで実行される。
- Mbedのサンプルプロジェクトから始めて、それらの内容を確認してMbedアプリケーションを効率的に扱う方法を理解する。
- Mbedのテストハーネスを活用し、アプリケーション開発によってMbedフレームワークに何らかの偶発的な破壊が起きていないことを確認する。
- Mbedハードウェアのサイトを利用し、製品を開発するためにすばやく組み合わせることができる、開発ボード、部品、モジュールを検索する。
これらのヒントに従うことで、組み込み製品の開発に費やす期間を最短にできます。
まとめ
組み込みおよびIoTの開発者には、開発作業の迅速化と開発コストの最小化に役立つ最新のツール、プロセス、ソフトウェアを提供する、しっかりとしたサポートのあるエコシステムが必要です。既述のとおり、MbedのプラットフォームおよびOSは、開発者が活用できる可能性のある1つの選択肢です。
Mbedはスケーラブルで柔軟性のあるソフトウェアアーキテクチャに対し、既に統合化とテストが行われた多くの部品を提供します。ハードウェアモジュール、ボード、部品に対する手厚いサポートにより、開発者は量産ソリューションに展開できる製品のプロトタイプを作成することが容易になります。
出典
免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、DigiKeyの意見、信念および視点またはDigiKeyの公式な方針を必ずしも反映するものではありません。


