Pelion Device Management を使う【導入編】

:::note info
注意
Pelion社のDevice Managementサービスは、IZUMA NETWORKSに買収されました。
https://www.izumanetworks.com/press/releases/10-4-22/

この記事は、旧Pelion Device Managementサービス上でのみ動作確認を行った時の内容なので、現在のサービスでは動作しない可能性があります。ご了承ください。
:::

Plelion Device Managementは、Arm社が提供しているPelion IoT Platformを構成するサービスの一つで、IoTデバイスをセキュアに管理する事が出来ます。

無償で利用可能な評価用のアカウントも用意されています。このドキュメントでは、Mbed OSが動作するデバイスとPelion Device Managementサービスの使い方を紹介します。Mbed OSデバイス側のプログラムのビルドには、Mbed Studioを使用します。

Pelion Device Management の概要はこちらをご覧下さい。
https://www.pelion.com/iot-device-management/

## 準備

* Mbed開発サイト（os.mbed.com）のアカウント
* Mbed OS対応デバイス（ST NUCLEO-F429ZIでの使用例を説明します）
* Ethernetケーブル
* Mbed Studio IDE

### Mbed開発サイトのアカウント取得

ここでは、Mbed OSデバイスとPelion Device Managementサービスを使用する方法を説明するので、最初にMbed開発サイトのアカウントが必要です。アカウントを取得していない場合は、こちらをご覧下さい。

https://github.com/toyowata/create_mbed_account/blob/master/README.md

### Mbed Studioのインストール

以下のURLから、使用するホストPCに対応したMbed Studioをインストールします。
https://os.mbed.com/studio/

## Pelion Portal Account の取得とサービス利用準備

クラウドサービスのアカウントは、評価用として機能制限付きの無償版アカウントが用意されています。
自分のアカウントの[コンソール](https://console.mbed.com/)の中にある、Pelion Device Managementから`Learn how to connect`と書かれている黄色のボタンを押します。

<img width="400" alt="pdm-learn-how-to-connect.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/47573f9a-5ca2-6480-11ff-59d559ae6df7.png">

画面が切り替わるので、`Activate your free access` ボタンを押します。
<img width="357" alt="pdm-activate-1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/c64e066d-0ccc-d87c-9a7c-d46f79879a67.png">

以下の画面から、`Activate Pelion Device Management account`ボタンを押します。
<img width="476" alt="pdm-activate-2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/165eeeb9-0d7c-874b-5572-151e48ebf690.png">

ボタンを押すと以下のようなメッセージが表示されます。
<img width="356" alt="pdm-success.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/baf53a76-f3d4-1103-87de-72ae826d97b1.png">

自分のアカウントの[コンソール](https://console.mbed.com/)に以下の項目が表示されていれば、準備完了です。
<img width="400" alt="pdm-ready.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/1c09493a-dc20-f768-b995-f97c3e7484dc.png">

`portal`ボタンを押して、Pelion Device Management のポータルサイトにアクセスします。 
初回アクセス時はライセンス条項への同意が必要になります。

### APIキーの生成

ポータルサイトにアクセス出来たので、自分のアカウントで利用するAPIキーを生成します。以下のURLにアクセスするか、左側のメニューから[Access management]-[API keys]を選択します。
https://portal.mbedcloud.com/access/keys

画面右上の`+ New API Key`ボタンをクリックします。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/706c9b77-92ad-b215-1c97-14c7c4205ed6.png">

Create API Keyダイアログが開きます。`API Key name`の部分に任意の名前を設定します。Groupは、Administratorsを指定してください。`Create API Key`ボタンを押して、APIキーを生成します。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/b41f240f-1b41-3d76-7524-ef059b8194a6.png">

【注意】　ここで生成されたAPIキー（ak_で始まる文字列）は必ず、コピーして値を保存しておいてください。セキュリティの関係上、ポータルサイトからAPIキーの値は二度と取得できなくなります。もし、APIキーの値を紛失してしまった場合は、新しくキーを生成してください。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/98e24f0d-bd06-718d-dcfd-3e6a2d8bcba7.png">

## デバイス側サンプルプログラムの作成

Pelion Device Management サービスをMbed OS 対応デバイスで使用するには、以下のクイックスタートガイドの手順に従って設定を行います。
https://os.mbed.com/guides/connect-device-to-pelion/

クイックスタートガイドには、動作確認済みのサンプルプログラムが用意されています。このサンプルをインポートして自分のアカウント用の設定を行うだけで、Pelion Device Managementサービスを簡単に体験することが出来ます。クイックスタートガイドで説明している内容は、MbedオンラインIDEを使用する方法ですが、このドキュメントではローカル環境で使用可能なMbed Studioで同じサンプルプログラムをビルドしてみます。

### サンプルプログラムのインポートと設定

NUCLEO-F429ZIボードをEthernet接続で使用する手順を説明します。

まず、Mbed Studioを起動します。
<img width="180" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/4fbe1716-70d7-6d28-6657-e949ca1f8a92.png">

次に、メニュー[File]-[Import Program...]を選択し表示されたダイアログに以下のリンクを入力します。
https://github.com/ARMmbed/mbed-os-example-pelion
<img width="300" alt="Screen Shot 2020-04-10 at 15.27.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/226d28c5-1377-b935-9035-91b9c4ea560a.png">

`Add Program`ボタンを押してプログラムをインポートします。回線の状態によってはインポートに時間がかかるときがあります。画面右下のBackground Task表示が消えるまでお待ちください。
<img width="300" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/7c213f38-7388-16bc-56b0-006a2a9112a8.png">

インポートされたサンプルプログラムのリストをクリックすると、使用しているソースファイル等の内容が表示されます。
<img width="300" alt="Screen Shot 2020-04-10 at 15.40.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/32e18750-c229-7162-c971-3d6d62ee2757.png">

次にサービスへの接続とファームウェアアップデート用に必要な開発者証明書をAPIキーを使ってインストールします。
画面左側の雲形のアイコンをクリックします。続いて、Pelion Device Managementの右上の歯車アイコンを押してAPIキーを入力します。
<img width="300" src="https://dl.dropboxusercontent.com/s/enfsl3cnifnloft/studio_pdm.png">

`API Key`の部分に、ポータルから生成したAPIキーの値をペーストして、`Save`ボタンを押します。
<img width="400" src="https://dl.dropboxusercontent.com/s/tdi136u2halsgbi/studio_apikey.png">

次に開発者証明書を選択します。`Connect certificate`をから開発者証明書を選択します。`Enable remote firmware update`チェックボックスを有効にします。`Done`ボタンを押して、ダイアログを閉じます。これで、開発証明書のデータがプロジェクトに追加されます。
<img width="400" src="https://dl.dropboxusercontent.com/s/faru416m49s43dn/studio_devcert.png">

これでデバイス側のプロジェクトの設定は終わりです。

### サンプルプログラムのビルド

続いて、このサンプルプログラムをビルドします。USBケーブルでホストPCとNUCLEO-F429ZIボードを接続します。使用するUSBポートは、以下の写真を参考にしてください。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/4aafa427-3406-ee84-c021-079d4d1915ac.jpeg">

ボードを接続すると、Mbed Studioがボードを認識します。問題なければ`Yes`をクリックします。後から`Target`のドロップダウンリストから選択することも可能です。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/e8f27b69-6fcf-0259-0537-eb0e901ed1fe.png">

検出されたターゲットボードが有効になりました。また、ビルド、実行、デバッグのアイコンも有効になりました。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/c640ba8e-9811-2e81-2a77-98771234bf1a.png">

サンプルプログラムをビルドするには、ビルド用のアイコン（かなづちのマーク）をクリックします。Terminalウィンドウにビルドの進捗が表示されます。最後にImageのファイル名が表示されたら、ビルドは成功です。
エラーが表示された場合は、証明書のインストール方法の部分を再度確認してください。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/f52538ce-9e65-976f-245d-55ae59239416.png">

### サンプルコードの実行

EthernetケーブルをNUCLEO-F429ZIボードのRJ45コネクタに接続します。デバイス上で実行されたプログラムのログ出力は、Mbed Studioから確認することが出来ます。

`Run Program`ボタンを押すとビルドされたコードがターゲットボードに書き込まれます。書き込まれた後は自動的にリセットされプログラムが実行開始されます。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/0eea2cae-6568-2a37-6624-8b4b16f0c514.png">

シリアルコンソールの`Baud rate`は、115200に設定します。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/255b3dae-7405-601e-360b-5edea1caed73.png">

以下のようなシリアル出力ログが表示されます。`Account ID`や`Endpoint name`が表示されれば、プログラムは正常に動作しています。
このサンプルコードでは、5秒ごとにインクリメントされたカウンタの値を表示し、Pelion Device Managementサービスに値をアップデートします。

```
Mbed Bootloader
No Update image
[DBG ] Active firmware up-to-date
booting...
�pApplication ready
Connect to network
Network initialized, connected with IP 192.168.11.31

Start developer flow
Create resources
Register Pelion Device Management Client

Counter 1
Counter 2
Client registered.
Account ID: 0XXXXXXXXXXXXXXXXbed413400000000
Endpoint name: 0XXXXXXXX726000000000001001db73c
Device ID: 0XXXXXXXX726000000000001001db73c

Counter 3
Counter 4
Counter 5
```


## ポータルサイトでの確認

ポータルサイト側からデバイスが正常に登録されているかを確認します。
ポータルサイトにログインします。メニュー [Device directory（デバイスID）] - [Devices（デバイス）] を選択し、デバイスが登録されているのを確認します。登録され、アクセス可能なデバイスは、`Status`フィールドに緑色のマークが付いています。
<img width="1358" alt="Screen Shot 2020-04-10 at 18.28.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/d209336e-de2f-4776-aea7-5e7c7cbb5a39.png">

登録されているデバイスをクリックすると、各種情報が表示されます。
<img width="1358" alt="Screen Shot 2020-04-10 at 18.28.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/9ba97570-1185-b46a-86a1-2bee8ee025a3.png">


[Resources（リソース）] タブをクリックすると、[OMA LWM2M仕様](https://omaspecworks.org/what-is-oma-specworks/iot/lightweight-m2m-lwm2m/)に準拠したデバイスのリソースパスが表示されます。
`/3200/0/5501`（サンプルコードでカウンター値にとして使用しているDigital Inputに割り当てられたリソース）をクリックします。
<img width="1358" alt="Screen Shot 2020-04-10 at 18.29.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/2b07f2e7-22e7-4e81-6bf0-2c2dcf8646ef.png">

`/3200/0/5501`をクリックすると、カウントアップされた数値がグラフ化され、5秒毎に値が更新されます。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/9ab8107c-8a29-b0e4-e31b-00b98b452049.png">

以上です。

## その他の情報

Pelion Device Management を使う【ウェブアプリ編】
https://qiita.com/toyowata/items/936134963c1fc64b4498