Arm Mbed IoT スターターキットと IBM Cloud (ex-Bluemix)  〜 ボード３種類をチェックしてみた（2017冬） - その1

## mbed IoT Starter Kit は IBM Cloud でまだ使える？

### この記事の基本構成
**IoT = Internet ＋ Things**
　**• Internet**　→ IBM Cloud を使用
　**• Things**　→ Arm Mbed OS を使用

![IMG_3398-1200.jpg](https://qiita-image-store.s3.amazonaws.com/0/48672/093e95ba-3efb-3d1f-93ea-72edd7d9e3a6.jpeg)
IBM IoT Cloud と表示するけど、あれってまだ動くよね？（以前に撮影の写真）


#### まず経緯を簡単に整理まとめ（リンクと脚注は多めに） 

[高速プロトタイピングキット「mbed IoT Starter Kit」](https://japan.zdnet.com/article/35060823/)（2015年2月） [^1] がリリースされる。
開発始めのハードルを下げて IBM Bluemix（名称当時）と ARM mbed（名称当時）の組合せで登場。

[IBMとARM、IoT分野でのパートナーシップを発表](https://wirelesswire.jp/2015/09/45723/)（2015年9月） [^2] 開発やデータ分析を加速すると。
ニュースは、 [IBM リリース](http://www-03.ibm.com/press/us/en/pressrelease/47579.wss) ・ [ZD Net](http://www.zdnet.com/article/ibm-arm-link-arms-on-internet-of-things-analytics/) ・ [Business Insider](http://www.businessinsider.com/ibm-and-arm-partner-for-iot-domination-2015-9) などでも報じられた。

その後、IBMとARM、それぞれに名称とかサービスに様々な変化があった。
[^1]: mbed IoT Starter Kit 参照：<br>[- Ethernet IoT Starter Kit（Arm）](https://os.mbed.com/platforms/IBMEthernetKit/)<br>[- ARM® mbed™ IoT Starter Kit（IBM）](https://developer.ibm.com/recipes/tutorials/arm-mbed-iot-starter-kit-part-1/)<br>[- Internet of things starter kit unveiled by ARM and IBM（BBC News）](http://www.bbc.com/news/technology-31584546)
[^2]: スターターキット 参照：<br>[- mbed LPC1768 + IBM IoT Foundation = 5分でIoT（スイッチサイエンス）](http://mag.switch-science.com/2015/03/19/mbed-5min-iot/)
　
そして最近、2017年11月 [BluemixはIBM Cloudとして生まれ変わり](https://www.ibm.com/blogs/solutions/jp-ja/bluemix-is-now-ibm-cloud/)、現在まで約1ヶ月ほど。

+ ARM mbed から Arm Mbed OS へ [^3] （2016年8月）
+ Bluemix から IBM Cloud へ [^4] （2017年11月）

[^3]: Mbed OS 参照：<br>[- Introducing mbed OS 5（Arm）](https://os.mbed.com/blog/entry/Introducing-mbed-OS-5/)<br>[- mbed OS 5でLEDを光らせてみる（スイッチサイエンス）](http://mag.switch-science.com/2016/08/12/mbed_os5_blinky/)
[^4]: IBM Cloud 参照：<br>[- IBM Cloudライト・アカウント（IBM）](https://www.ibm.com/cloud-computing/jp/ja/bluemix/lite-account/)<br>[- 日本IBM、「IBM Cloud」に無償プラン ─ WatsonやIoTなど25種類が対象（ZD Net JP）](https://japan.zdnet.com/article/35060823/)<br>[- 日本IBMがクラウドの「無料お試し」を無期限に、Watsonなど（ITPro日経BP）](http://itpro.nikkeibp.co.jp/atcl/news/17/102702548/)

で、こんなに変った「Arm Mbed」＋「IBM Cloud / Internet of Things Platform」ってまだ動くの？
また、変わった点や気づいた事などあれば、ベンチマーク的にチェック。

### 基本的な方針と目的
ライブラリーなどは全て最新にアップデートしてテスト。もしかして、動いた頃のリビジョンじゃないと動かない可能性もある。上手くいかない時、動いた時点まで巻き戻すというのは一つの手だ。
しかし、今回は「もうあれ使えないの…😔グスン」という不安を払拭する？のが主な目的。
そう、ソフトは最新版で。前に戻して動いた、とかいうのは無し。

前に、進もう。

テストはまず、オンラインコンパイラ（Mbed OS ver.2）環境でサクッと。
ちなみに [Ethernet IoT Starter Kit](https://os.mbed.com/platforms/IBMEthernetKit/) も、ページ右側にある通り「Mbed Enabled／Mbed OS 2」となっている。バージョン5ではない。
オンラインコンパイラで、読み込むライブラリも全てアップデートし最新版でテスト。

### Mbed OS のバージョンについて
上記で「最新バージョンでやってみる」という以上、この話題は避けて通れない。
また、ハード寄り／ソフト寄り、IoT 初心者？〜どこに向けて書くのか少し迷った。
例えば「ラズベリーパイはIoT講座のハンズオンで」とか「ウェブ系で非ハードウェア方面から来た」あたりの方に向け、「ユーザー・開発者側の視点で」ごく単純化し概略の説明を以下に試みる。
限られた紙幅で、最近までのMbedの流れをざっと捉え、俯瞰する助けになれば。
以下、なるべく平易な表現を使った大まかな私見ということで、生暖かい目で見てあげて。

+ Mbed OS 2： ウェブブラウザー上のオンラインUIを提供し、USB接続したハードウェアを簡単に開発やコンパイルまで出来る素晴らしい開発環境。メーカー違いのチップや、同メーカーでも仕様違いがあっても、mbed側で差異をうまく隠し、面倒なセットアップ抜きも同じような感覚で開発出来る。また各センサーのドライバーやライブラリーなどほとんどがオープンソースで提供・シェアされ、まさにハードウェア開発環境の「パラダイムシフト」だ。しかし、ブラウザー上のUIの枠内では細かいデバッグまでは難しい。最終的にコンパイルが通るか？とかUSB経由で通信をPC画面で見るといった、結果オーライかどうかで判断するみたいな開発になる。バージョン5の登場以降クラッシック環境（レガシー）と呼んでいるが、べつに打ち捨てられメンテされなくなった😢わけではない。新バージョンと合わせ開発は進められている。ときどき画面に黄色い注意喚起（例：[Ethernet Interface](https://os.mbed.com/handbook/Ethernet-Interface)ページ、スマホで見るともっとスゴイよ）がドォーんと出たりして、そこはかとなく不安感を煽るが、よく見れば、5ならLatest版を見てねと書いてあるだけだ！気にするな（2のメンテへの力配分は気になるが）
+ Mbed OS 5： 超極単純化してしまうと「2=オンライン」 ↔︎ 「5=オフライン」と見なせる。クラウド上でなくローカル環境だから、例えばステップ実行でデバッグ出来たり、社内規でネットに非公開が必須の場合など（注：2でも非公開には出来る：参考 → [Online compiler tips](https://os.mbed.com/users/MACRUM/notebook/online-compiler-tips/)）にも適している。また、Arm（ハード側）でIoTの通信セキュリティーを担保する仕組みも進めている。Armアーキテクチャのハードに載ってるMbedと組合わせて、セキュリティー担保できるのはArmのアドバンテージではある。しかし、クラッシック環境のウェブUIが一つだけで、どのボードも同じように簡単開発！という単純明解なお手軽さは失われた感は否めない。また、まだ色々と発展途上なこともあり、開発ツールや方法が何種類かあったり、チップメーカーにより使えない仕組みがあったり、環境設定にも試行錯誤が必要だったり。mbedの登場以前の状況よりは（たぶん良い方向に）変わってきたとはいえ、左様に、2と5ではプロトタイピングが始められる段階まで整える労力や時間は、😟けっこう違う。ともあれ、これから新機能も追加されて行くはずのMbedのロードマップを見守りたい。

公式見解ではないが Mbed OS ロードマップ等、先日の記事まとめが解りやすかった。参考まで。
[　• Arm「mbed OS」は立ち　位置を変えながら進化する（MONOist）](http://monoist.atmarkit.co.jp/mn/articles/1711/30/news023.html)
　
単純に「Arm Mbed」＆「IBM Cloud」使えんの？どうよ？と、「チェックやってみた」だけにしたかったが、「最新テスト」の前提に関わるので、ちょっと脱線した。さて本題に戻ろう。

### チェックしたボード３種類
これらは私が選んだと言うより、これまで公式（的）に取り上げられたボードであり、他意はない。

1. [NXP mbed LPC1768](https://os.mbed.com/platforms/mbed-LPC1768/)
2. [NXP FRDM-K64F](http://developer.mbed.org/platforms/FRDM-K64F/)
3. [u-blox C027](https://os.mbed.com/platforms/u-blox-C027/)

Arm Mbed の IBMIoTClientEthernetExample メインプログラム（main.cpp）にも記述がある。
![IBMIoTClientEthernetExampleのmain.cppのコード](https://qiita-image-store.s3.amazonaws.com/0/48672/b2ca5d46-27c9-99e8-d6c0-ce386eba4417.png)

### テストの流れ
・1 → 後述の専用 Application **Board** と組んで、ごくシンプルに
・2 → K64Fが挿さるArduino形状 Application **Shield** 持ってないので、~~手持ちパーツで組んでみる~~
　　（注：手持ちで組みかけたが、問題があり解決後にまた。強引に**Board**を流用する）
・3 → ~~構成を変え試すほか~~ Ethernet接続だけでなく、SORACOMのSIMでの接続を試みる
　　（注：上記の理由で、まずEthernet接続までのテストをしてみる）

FRDM-K64Fには単体でもオンボード6軸の加速度/磁気センサが載っている。ちょっと気になってI²Cアドレスをチェックしたが、FXOS8700CQ（0x1E）と、Application Board の3軸加速度センサ MMA7660（0x4C）ほか、同じアドレスで競合とか無いようでひと安心。

+ [mbed Application Board](https://os.mbed.com/components/mbed-Application-Board/)（3軸加速度, 温度, ボリューム、ボタンSWほか）
+ [SORACOM Air SIM](https://soracom.jp/products/#sim_jp)（日本国内用）

**Note-1**： [mbed Application **Board**](https://os.mbed.com/components/mbed-Application-Board/) と [mbed Application **Shield**](https://os.mbed.com/components/mbed-Application-Shield/) について。
名前が似ているが、回路図など参照すると後者は幾つかの機能／ピンやセンサを省き、かつ Arduino Shield のピンヘッダ（K64FやC027とか）に準拠の新型と見なしていいと思う。（元来異なる仕様の商品で、新・旧という表現は少し違うかもしれないが）
なおLCDや他のパーツは、だいたい同じものが使われている。
今回、LPC1768と組んで使ったのは **Board**（まだ販売中）だ。**Shield** 持ってない。
同じ様なボード２枚（しかも安くない）はさすが要らない。何か違うことを試みてみたい。

**Note-2**： MACアドレスチェックについて
テスト先の[IBM Watson IoT Platform - Quick Start](https://quickstart.internetofthings.ibmcloud.com/#/)では、EthernetのMACアドレスを入力してボードを認識し接続する。必須ではないが、事前に調べメモしておくと便利だ。
Mbedのコードで[チェックするプログラムはここ](https://os.mbed.com/users/simon/code/mac/)に。なお、入力はスペース/コロンの区切り不要で小文字のみで。
これは[CoolTerm](http://freeware.the-meiers.org)（おすすめ）を使いPC画面でチェックできるが、詳説はここでは割愛。


## mbed LPC1768

+ 本体：[mbed LPC1768](https://os.mbed.com/platforms/mbed-LPC1768/)
+ 拡張ボード：[mbed Application Board](https://os.mbed.com/components/mbed-Application-Board/)

### 問題なく動いた！
![IMG_3416.jpg](https://qiita-image-store.s3.amazonaws.com/0/48672/b8a3f39b-5c53-f798-80ba-112d65f99613.jpeg)

開発ボードの標準が次の FRDM-K64F に移りつつも、やはり安定感のあるオリジナルmbedボードだ。
なお、2年くらい？前までは、グラフの様子が少し異なり、大グラフの下の右側にカラーの小グラフがあったり、折れ線も滑らかなカーブだった。
以前のバージョンは、違うライブラリ（Rickshawだったかな）だったが、現在のはD3.jsベースのライブラリ、C3.jsのようで、シンプルな折れ線グラフになる。


## FRDM-K64F

+ 本体：[FRDM-K64F](https://os.mbed.com/platforms/frdm-k64f/)
+ 拡張ボード：[mbed Application Board](https://os.mbed.com/components/mbed-Application-Board/)
+ 　（注：Board ↔︎ Shield の回路図を見比べ、ジャンパーしまくり強引に接続）

### ほぼ問題なく動いた！
![IMG_3445.jpg](https://qiita-image-store.s3.amazonaws.com/0/48672/c243a371-e9f6-c410-8974-9b151e4962ed.jpeg)

数ある Mbed 対応ボード中で現在 Arm が公式には言ってないが、開発リファレンス感ある。
手持ちパーツ組みでプログラムも変更してと Advent 2017 ネタ考えてたら、意外な問題発生。期限の事もあるし、Application Board と Shield の回路図を見比べ、ミスを心配しつつ配線繋ぎまくり動かしてみた。何のためのArduinoフォームファクタなんだよ。でも一応ちゃんと動いた！

![IMG_3451.jpg](https://qiita-image-store.s3.amazonaws.com/0/48672/a5fc815e-4d94-8aa5-81c2-aa9440f93c42.jpeg)

写真の通り I²C 経由でデータを取得している、加速度センサや、LM75B温度センサは正常に作動、折れ線グラフも刻々と変化を刻む。一部配線を省いたので、ジョイスティックボタンが効かなかった（が、細かいことは気にするなよ）
ハイライトはやはり、I²C のセンサ周りが動くかだもんね。

（だんだん、ネタ記事みたいになってる気がするが、本人はいたって真面目なのです。しかも、途中まで進めてたのに、ほぼ全面やり直し。大慌てで半分以上書き直しの、まさに原稿のラピッド・プロトタイピングのMbedなのだ！すでに長くなったので、[u-blox C027](https://os.mbed.com/platforms/u-blox-C027/)のテスト、続きはウェブで。）

---
**（脚注）**