Mbedを使い始めるといっても、実際にどのボードを開発ターゲットにするかは悩ましいことでしょう。たくさん(本稿執筆時には138種!)あるMbed対応デバイスですが、今回は何を使うと良いのか紹介をしていきましょう。
といっても、単に代表的なボードを並べるだけでは芸が無いので、Mbedのサンプルプログラムで動作確認が取れているボードという観点で紹介をしていきたいと思います。Mbedのウェブサイトに登録されているボードのうち、Mbed OS 5に対応しているボードは約半数です。前回に触れたように、Mbed OS 5ではRTOS(CMSIS-RTOS Keil RTX)が標準でサポートされています。このおかげで、Thread(スレッド)やMutex(ミューテックス)、Semaphore(セマフォ)などを使い、マルチスレッドなプログラムを実行することができます。
一方で、RTOSの分のフットプリントがありますので、Mbed OS 5はmbed SDK(mbed 2.0/Classic)よりも多くのRAMやFlashが必要です。こういったことから、比較的メモリが少なめのCortex-M0などのマイコンはMbed OS 5をサポートしていない事があります。
サンプルプログラム
Mbed OS 5のサンプルプログラムはGitHubのリポジトリにあります。Arm Mbedには多くのリポジトリが登録されています。サンプルプログラムは、大抵「mbed-os-example-*」という名前が付いているので、「Search respositories…」という欄に「example」と入力することで見つけることができます。
また、サンプルプログラムが対応しているボードは、ドキュメントの他に、各サンプルプログラムに含まれている「mbed_lib.json」という設定ファイルが参考になります。これはMbed CLIでプログラムをビルドするときに参照されるファイルで、target_overridesでビルドするターゲット毎の設定を書くことができます。
mbed-cloud-client-example
最初に紹介するプログラムからして「mbed-os-example-*」というネーミングルールと異なりますが、mbed-cloud-client-exampleは、Mbed Cloudに接続する、Mbed Cloud Clientのサンプルプログラムです。Mbed Cloudは、ネットワーク接続だけでなく、Mbed TLSというライブラリを使った暗号や、ファイルシステムなどMbed OS 5の多くの機能を使います。ですので、サポートされているボードは限られています。
このサンプルのmbed_lib.jsonには、K64F、NUCLEO_F429ZI、UBLOX_EVK_ODIN_W2の三種が記述されています。
mbed-os-example-ble
mbed-os-example-bleは、その名の通り、BLEのサンプルプログラムです。頻出するBLEのアプリケーションを手軽に試すことのできるサンプルが一通り揃っています。ここでは、nRF51とnRF52、それからマイコンボードではありませんが、X-NUCLEO-IDB05A1というシールド(拡張ボード)がサポートされています。この拡張ボードを動かせる実績のあるマイコンボードとしては、K64F、NUCLEO_F401RE、また拡張ボードではなく標準的にBLEモジュールが搭載されているDISCO_L475VG_IOT01Aが挙げられます。
mbed-os-example-wifi
mbed-os-example-wifiは、Wi-Fiに接続してHTTP通信を行うサンプルです。このサンプルがサポートされているマイコンはUBLOX_EVK_ODIN_W2、RTL8195AM、Mbed OSがサポートされているWi-FiモジュールはISM43362(マイコンは、DISCO_L475VG_IOT01AやDISCO_F413ZH)、IDW04A1、IDW01M1(マイコンはNUCLEO_F401RE)、ESP8266(マイコンはK64F、NUCLEO_L429ZI、NUCLEO_L476RG)と数多くあります。
しかし、ご存じのように、国内で無線インターフェースを適法に使うには、技適マークの有無が問題になります。一番手軽に入手のできる技適マーク付きのWi-Fiモジュールは、恐らくESP8266を搭載したESP-WROOM-02でしょう。
mbed-os-example-cellular
mbed-os-example-cellularは、セルラー(携帯電話網)を使ってインターネットに接続してTCPやUDPのソケット通信を行うサンプルです。サポートされているのは、u-blox C027とMTS Dragonflyの様です。うち、日本で技適マーク付きのボードが手に入るのは、u-blox C027です。
セルラーインターフェースがMbed OS 5でサポートされたのは2018年3月末にリリースされた5.8からですので、まだ対応ボードは少なめです。
mbed-os-example-lorawan
mbed-os-example-lorawanは、LoRaWANのサンプルです。これもワイヤレスですが、Wi-FiやBluetoothのように世界共通のISMバンド(産業科学医療用周波数帯)用の通信規格ではないため、国や地域によって使う周波数帯やパラメーターが異なります。LoRaWANの規格ではリージョナルパラメーターというのが定められていて、日本向けはAS923という仕様に含まれています。
しかし、AS923は10ヶ国をまとめた仕様であるため、日本の電波産業会の定める標準規格のARIB STD-T108とは一部乖離してしまっています。Mbed OS 5のソースコードをざっと見てみましたが、こういった日本向け仕様は見当たりませんでした。ですので、今のところMbed OS 5に含まれるスタックを日本国内で使う事はお薦めできません。技適マークが付いているボードとしては、Advantech Wise 1510とST B-L072Z-LRWAN1が挙げられます。
ボード
様々なコネクティビティのサンプルプログラムを列記してきましたが、この中で頻出のボードを選ぶと……
NXP FRDM-K64F
FRDM-K64Fは、FPU付きのCortex-M4、1MBのFlashと256kBのRAMを搭載したKinetis K64Fの評価ボードです。K64FはMbed OS 5のリファレンス的な位置付けですので、サンプルプログラムを動かしてみるときに困ることは少ないはずです。最初にMbed OS 5対応ボードを一枚購入するのであれば、FRDM-K64Fが一番良い選択だと言えます。TRNG(真性乱数発生器)APIをサポートしているので、セキュリティ機能も強化されています。
このボードにはイーサネットインターフェースが付いていますが、ESP-WROOM-02などを接続すればWi-Fiインターフェースを、X-NUCLEO-IDB04A1を接続すればBluetooth Low Energyを追加することができます。(X-NUCLEO-IDB04A1を使うには、ハードウェアにパッチ作業が必要です。また、技適マークが貼られたX-NUCLEO-IDB04A1の入手のできる販売店は限られています。)
NUCLEO-F429ZI
NUCLEO-F429ZIは、FPU付きのCortex-M4、2MBのFlashと256kBのRAMを搭載したSTM32F429ZIT6の評価ボードです。K64F同様にTRNG APIをサポート、さらにK64FよりもFlash容量が大きいため、より大きな(複雑な)アプリケーションを実行することもできそうです。以前まで、Mbed OS 5のリファレンス的な位置づけのボードはFRDM-K64Fのみでしたが、最近はNUCLEO-F429ZIもリファレンスのような存在です。
EVK-ODIN-W2
上記の二種類のボードのネットワークインターフェースはイーサネットでしたが、EVK-ODIN-W2のインターフェースはWi-Fiです。このボードは、u-bloxのODIN‑W2というWi-Fiモジュールの評価ボードで、モジュールの中にはSTM32F439ZIY6という2MBのFlashと256kBのRAMを搭載したCortex-M4マイコンが入っています。
このボードやモジュールも、技適マークが貼られた製品を入手できる方法は限られています。確実なのは、u-bloxの代理店から調達することでしょう。
u-blox C027-U20-0
u-blox C027は、Mbed Classicのリファレンス的存在であったLPC1768とu-bloxのLISA-U200というW-CDMA(3G)のセルラーモジュールが搭載されています。LPC1768は、512kBのFlashと64kBのRAMを積んだCortex-M3マイコンで、これまで紹介してきたボードに搭載されているマイコンよりも容量が少なめです。このボードを使うときには、12V1A以上のACアダプタも用意しておくことをお薦めします。また、技適マーク付きのボードを手に入れるには、国内のu-bloxの代理店から調達するのが確実そうです。
LISA-U200は3Gのモジュールですので、LTEに対応していません。Mbed OS 5に対応したLTEのボードは既にあるのですが、海外向けのモデルばかりです。日本でも使えるモデルの登場が待たれます。
u-blox EVK-NINA-B1
マイコン単体でBluetooth Low Energyを使いたい場合、NordicのnRF52が最もポピュラーな選択肢と言えます。ただ、NordicのnRF52-DKは残念な事に工事設計認証を受けていないため、認証を受けているnRF52832の評価ボードを探してみました。
u-blox EVK-NINA-B112がその一つです。このボードは、u-bloxのNINA-B112という認証済みモジュールを使用しています。筆者は持っていないので確認をしていませんが、ページに記載の説明を見る限り、mbed-os-example-bleをすぐに動かすことができそうです。
さいごに
今回は、Mbed OS 5対応デバイスを、コネクティビティ毎に紹介してみました。次回は、Mbed OS 5について、より詳しく説明をしていきたいと思います。
こちらも是非
“もっと見る” Mbed編
Mbed TLSの概要と特徴
今回は、これまで何度か触れてきたMbed TLSについて説明をしていきたいと思います。TLS(Transport Layer Security)は、通信の暗号化を行うプロトコルとして、IoTのセキュリティを実現する手段の一つとして頻繁に利用されています。また、通信の暗号化だけでなくデバイスの認証手段としてもよく使われています。
どこが「IoTデバイス開発プラットフォーム」なのか
筆者がMbedを使い始めた理由は、インターネットにネイティブに接続できるマイコンボードが欲しかったからです。その頃の筆者は、中学生の頃にZ80を触って以来15年以上のブランクを経て、Arduinoを使い始めたところでした。その頃、ArduinoをIPネットワークに接続するには、IPスタックをハードウェアで実装したW5100というチップを使う事が一般的でした。
Mbed OSの概要と特徴
今回は、Arm Mbedの構成要素の一つであり、最も重要な部分であろうMbed OSについて記したいと思います。これまで書いてきたように、Mbedには大きく分けて、Mbed OS 2とMbed OS 5の二つが存在します。しかし、Classicと呼ばれるようにMbed OS 2はメンテナンスモードですので、今回はMbed OS 5についてのみ記したいと思います。