Azure Sphere 開発ボードでLチカをやってみる

今春に発表があったAzure Sphere開発ボードの出荷が9月24日から始まりました。

現在入手できるのは[Seeed本社Shopサイト](https://www.seeedstudio.com/Azure-Sphere-MT3620-Development-KitJP-Version-p-3135.html)、[秋月電子通商](http://akizukidenshi.com/catalog/g/gM-13677/)、[チップワンストップ](https://www.chip1stop.com/sp/products/azure-sphere_seeed?cid=top_bn_azure-sphere_seeed)からとなっています。

まだ出たばっかりですのでそれ程情報が出ていないのですが、公式サイトを参考にLチカにチャレンジしてみました。

さっそくやっていきたいと思います。

##参考サイト
・[マイクロソフトの公式ページ](https://azure.microsoft.com/ja-jp/services/azure-sphere/)
・[Seeed社の公式ページ](http://wiki.seeedstudio.com/Azure_Sphere_MT3620_Development_Kit/)
・Seeedジャパン　エンジニア　[松岡さんのブログ（matsujirushi’s blog）](http://matsujirushi.hatenablog.jp/archive/category/Azure%20Sphere)


##開発環境
・Windows10 Anniversary Update（Build 1607)以降
・Visual Studio 2017 Version 15.7以降
・Azure Sphere SDK Preview for Visual Studio（[ダウンロード](https://aka.ms/AzureSphereSDKDownload)）

##デバイスの接続
上記環境のインストールは済ませておいてください。
デバイスをPCとUSBケーブルで接続します。
正常に接続出来たらデバイスマネージャには次のようにCOMポート表示されます。COMポート番号は環境によって変わります。
![1-1.png](https://qiita-image-store.s3.amazonaws.com/0/62606/b498b6cd-6a3b-1fd8-18ec-a7b85d5d2fae.png)



##Azure Active Directory の準備
・AzureSphereボードを管理するためにAzure Active Directoryを利用します。組織アカウントを持っている場合にはそのままディレクトリにユーザーを追加します。個人アカウントを所持している場合には新規でディレクトリを作成し、ユーザーを追加します。
![2-1.png](https://qiita-image-store.s3.amazonaws.com/0/62606/a6b84edb-ad39-1bdb-6e87-d7418842567f.png)

----- 追記（2018/10/1）----- 
現在新しく登録したユーザーにロールを設定する必要はなくなりました。
ミクミンP/Kazuhiro Sasao さん　情報ありがとうございました。

~~・新しく追加したユーザーには条件付きアクセス管理者ロールを割り当てます。~~
----- 追記　終わり -----


----- 追記（2018/9/30）----- 
Seeed　松岡さんからの情報：　
追加したユーザーにロールを割り当てなくても次のAzure Sphere tenantの作成ができるらしいです。
デバイスの登録は何度も試せないので、現在確認する方法がありません。どなたか試してみて（ロールの割り当てをせずにtenantの作成）
結果を教えてもらえると嬉しいです。
----- 追記　終わり -----

##Azure Sphere tenantの作成
・次にスタートメニューから「 Azure Sphere Developer Command Prompt」を開きます。
![4-1.png](https://qiita-image-store.s3.amazonaws.com/0/62606/3c872d67-fe76-cf86-2392-614f0b1430e2.png)
・コマンドプロンプトで「azsphere login」と入力し実行します。ログインウィンドウが開くので、先ほど登録したユーザーアカウントを入力し続いてパスワードも入力します。（1回目のログインに成功した時にはパスワードを再設定するように指示があります。）
![5-1.png](https://qiita-image-store.s3.amazonaws.com/0/62606/7a6ca9e2-c9fb-3cd5-7194-761fd9c5fdec.png)
![6.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/c47a1cab-f185-98a2-5e16-743fd1f71cc3.png)
![7.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/9546436b-ea35-7444-77aa-470b011f99ec.png)

・コマンドプロンプトで「azsphere tenant create -n <テナント名> 」と入力し実行します。
![8.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/c435aaa5-e8fd-3d49-ba72-62541846b4da.png)
この時点で必ずデバイスとPCを接続しておく必要があります。デバイスが認識されていない場合はエラーが発生してテナントを作成できません。
まれに接続をしていても認識されないことがあります。その場合は「Azure Sphere SDK Preview for Visual Studio」の再インストールを試してみてください。

##Azure Sphere テナントにデバイスを登録する
・コマンドプロンプトに「azsphere device claim」と入力し実行します。成功するとAzure ADテナント（ディレクトリ）＞Azure Sphereテナント＞Azure Sphereデバイスというように登録が完了します。

**（注意：現時点でClaimしたAzure Sphereテナントとデバイスの関連付けは解除することができませんので気を付けて登録する必要があります。）**

##Wifiの設定
・コマンドプロンプトで「azsphere device wifi add --ssid [自分のSSID] --key [APのKey] 」と入力し実行します。
・コマンドプロンプトで「azsphere device wifi show-status」と入力実行して、APへの接続を確認します。
![10-1.png](https://qiita-image-store.s3.amazonaws.com/0/62606/3334ee81-4897-bbdc-02ea-68262006ec2d.png)

##デバッグモードのロック解除
通常状態ではデバッグ機能はロックされて使用できません。また、そのままでは開発中のアプリケーションも受け入れてくれません。
・コマンドプロンプトで「azsphere device prep-debug」と入力して実行します。
![11.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/4a876bab-843b-1dcd-461c-63bcfc22fb70.png)

ここまででプログラムを開発するための環境設定が完了しました。
次はBlinkサンプルを実行してみます。 

##Blinkサンプルの実行
・Visual Studio 2017を起動して、新規プロジェクトを作成します。テンプレートは「Visual C++ > クロスプラットフォーム > Azure Sphere > Blink Sample for MT3620 RDB (Azure Sphere)」を選択します。
![12.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/77f536f5-5fc8-490b-d117-79bea68ba374.png)
（なぜか自分の環境ではテストグループにAzure Sphereが含まれていますね。どうしてなんだろう？？）
・プロジェクトが開いたらF5キーを押してデバッグ実行します。LED1が赤色で点滅を始めたら成功です。またAボタンを押すと点滅スピードが変化します。

##Blinkサンプルの変更
・main.c 138行目でLEDを制御しています。「MT3620_RDB_LED1_RED」を「MT3620_RDB_LED1_GREEN」に変更してデバッグ実行すると緑色でLEDが点滅します。同じように「MT3620_RDB_LED1_BLUE」に変更すると青色で点滅します。

「MT3620_RDB_LED2_RED」のようにLEDの番号を変えてみてもGPIOポートへのアクセスが拒否されてエラーになります。他のLEDを使用するには「app_manifest.json」を編集する必要があります。

・app_manifest.json 10行目で使用できるGPIOを指定しています。例えばLED2はGPIO15,16,17と接続されているので、10行目を「"Gpio": [ 8, 9, 10, 12, 15, 16, 17],」とすることでLED1とLED2が使えるようになります。GPIO12はボタンAが割り当てになっています。
ちなみに各GPIOの定義は「mt3620_rdb.h」で記述されています。

---
以上 非常に簡単ですがAzure SphereボードでLチカを実行してみました。Azure Active Directoryを設定するところが難しいかもしれませんが、Azure Sphereテナントの作成まで完了すれば、その後はスムーズに進めることができると思います。

Microsoft社がLinux（カーネル）を含むデバイスを出したと話題になりましたが、ここまで全くLinuxは出てきません。たぶんファームウェア開発などをしない限りはLinuxを意識することはなさそうです。