Arduino MKR NB 1500をAzure IoT Hubに安全に接続する方法
必要な部品と材料
![]() |
Arduino MKR NB 1500 | × | 1 |
![]() |
Micro-USB - USBケーブル | × | 1 |
| 3.7V LiPoバッテリー | × | 1 | |
| Micro SIMカード | × | 1 |
使用するアプリとオンラインサービス
![]() |
Arduino IDE |
![]() |
Microsoft Azure |
プロジェクト概要
注意: このチュートリアルは古い可能性があります。最新版はこちらをご覧ください。
はじめに
Azure IoT Hubは、「数十億台のデバイスを安全に接続、監視、管理してIoTアプリケーションを開発する」ことを可能にするサービスです。
デバイスはHTTPS、AMQP、MQTTプロトコルでIoT Hubに接続できます。Azureはこれらのプロトコルを抽象化するための各種プログラミング言語向けSDKも提供しています。また、MQTTクライアント経由での接続も可能です。詳細はIoT HubのMQTTサポートを参照してください。
このチュートリアルでは、MQTTクライアントを使用してArduino MKR NB 1500をAzure IoT Hubに安全に接続する手順を解説します。MQTT(Message Queuing Telemetry Transport)は、M2M(Machine-to-Machine)接続用のプロトコルで、メッセージの購読/発行型トランスポートを提供します。
デバイスはSASトークンまたはX.509証明書でIoT Hubに認証できます(詳細はこちら)。本チュートリアルではX.509証明書を使用します。
オンボード通信機能を持つすべてのArduino MKRボード(MKR NB 1500を含む)には、Microchip ATECC508AまたはATECC608A暗号素子が搭載されています。この素子を使って256ビットのECC(楕円曲線暗号)鍵を安全に生成・保存できます。
ソフトウェアとハードウェアのセットアップ
Arduino IDEがインストールされていない場合は、ダウンロードしてインストールしてください。
インストール後、「Arduino SAMD Boards」パッケージが最新版か確認してください。Arduino IDEでツール → ボード:「...」 → ボードマネージャ...を開き、「Arduino SAMD」で検索します。執筆時点では1.6.20が最新でした。

次に、以下のライブラリをライブラリマネージャ(スケッチ → ライブラリをインクルード → ライブラリを管理...)からインストールします:
- MKRNB
- ArduinoBearSSL
- ArduinoECCX08
- ArduinoMqttClient
- Arduino Cloud Provider Examples
MKR NB 1500の底面スロットにMicro SIMカードを挿入し、3.7V LiPoバッテリーをJSTコネクタに接続します。Micro USBケーブルでPCに接続し、Arduino IDEでシリアルポート(ツール → ポート「...」)とボード(ツール → ボード「...」 → Arduino MKR NB 1500)を選択します。

ボードの設定とAzure IoT Hubへの登録
Azure IoT HubはMQTTプロトコルとX.509証明書による認証をサポートしています。ボード上で自己署名X.509証明書を生成し、そのSHA1フィンガープリントをAzureポータルに登録します。
自己署名証明書は、ArduinoECCX08ライブラリのサンプルスケッチで生成できます。Arduino IDEでファイル → スケッチ例 → ArduinoECCX08 → Tools → ECCX08SelfSignedCertを開き、アップロードしてシリアルモニタを開きます(改行コードを「NLとCRの両方」に設定)。
このスケッチは、ATECC508A/ECC608Aが未設定・未ロックの場合、永続的に設定・ロックするよう促します。注意: このロック処理は永久的かつ不可逆ですが、暗号素子を使用するために必要です。 設定により、5つの秘密鍵スロット(0〜4)を任意のクラウドプロバイダ/サーバで使用可能になり、各スロットの秘密鍵はいつでも再生成できます。出荷時は未設定・未ロック状態です。
その後、証明書に含める情報(発行年月日時、有効期間(年))の入力を求められます。本チュートリアルではスロット0で秘密鍵を生成・保存し(スロット1〜4は追加用)、スロット8に証明書の発行/有効期限と署名を格納します。注意: 秘密鍵は暗号素子内部で生成され、デバイス外部に出ることはなく、安全に保存され、読み出し不可です。

生成されたSHA1値(スクリーンショット例: 99d6d96fa55bdf08b4040a142a8d0d934bc9d12b)をコピーします。これを後でAzure IoT Hubのデバイスフィンガープリントとして使用します。
自己署名証明書とSHA1フィンガープリントが得られたら、Azure IoT Hubポータルで新しいデバイスを作成します。
- ブラウザでportal.azure.comを開く
- Azureアカウントがない場合は「作成」から新規作成、ある場合はログイン
- 左ナビゲーションの「リソースの作成」をクリック
- 「モノのインターネット (IoT)」→「IoT Hub」を選択
- サブスクリプション、リソースグループ、リージョン、IoT Hub名を入力(例:「Free Trial」「MKR」「East US」「ArduinoProjectHubTutorial」)。「確認と作成」をクリック
- 確認画面で「作成」をクリック
- 数分待つとデプロイ完了。「リソースに移動」をクリック
- 「探索」見出しの下にある「IoTデバイス」をクリック
- 「追加」ボタンで新規デバイス作成
- デバイス名を入力(例:「MyMKRNB1500」)、「X.509自己署名」タブを選択。シリアルモニタのSHA1を「主サムプリント」と「副サムプリント」の両方に貼り付け、「保存」
- IoTデバイスページに新しいエントリが表示される









ボードをAzure IoT Hubに接続
- Arduino IDEでファイル → スケッチ例 → Arduino Cloud Provider Examples → AzureIoTHub → Azure_IoT_Hub_NBを開く
arduino_secrets.hタブで、SIMカードのPIN(必要な場合)を設定// NB設定 #define SECRET_PINNUMBER ""- ブローカー値をAzure IoT Hubポータルで作成したエンドポイントに更新
// Azure IoT Hubブローカーのホスト名 #define SECRET_BROKER ".azure-devices.net" - デバイスIDをポータルで作成したデバイス名に更新
// デバイスID #define SECRET_DEVICE_ID "" - スケッチをアップロードし、シリアルモニタを開く。ボードがセルラー網に接続し、成功すればMQTTでAzure IoT Hubに接続を試みる

Azure IoT Hubでボードと対話
ボードが正常に接続されたら、Azureポータルから対話できます。スケッチは5秒ごとにdevices/{deviceId}/messages/events/トピックにメッセージを送信し、devices/{deviceId}/messages/devicebound/#トピックでメッセージを受信します。
IoTデバイステーブルでデバイスID行をクリックし、ツールバーの「デバイスへのメッセージ」ボタンをクリック。

メッセージ本文を入力(例:「Hello there :)」)、「メッセージの送信」をクリック。

ボードがメッセージを受信すると、Arduino IDEのシリアルモニタに表示されます。

ボードが送信するメッセージを確認するには:
- shell.azure.comにログイン(初回は「Bash」を選択)
- IoT Hub拡張機能をインストール:
az extension add --name azure-cli-iot-ext - 以下のコマンドを実行(
<hub name>を自分のハブ名に置換、依存関係更新のプロンプトが出たらy):az iot hub monitor-events --hub-name - シェルにメッセージが表示される

結論
このチュートリアルでは、Arduino MKR NB 1500をAzure IoT Hubで安全に使用する方法を解説しました。自己署名X.509証明書で認証し、MQTTプロトコルで通信。ATECC508A/ATECC608Aが証明書に関連付けられた秘密鍵を安全に保存します。MQTTメッセージの送受信も確認しました。
これは始まりに過ぎません。Azure IoT Hubは他の多くのAzureサービスと連携可能です!
コード
GitHub
https://github.com/arduino/ArduinoCloudProviderExamples
製造プロセス
- Raspberry Pi 3とDHT11センサーを接続し、ThingsIo.aiクラウドへデータ送信
- GPSデータロガー構築と Azure IoT Hub での空間分析
- ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
- IoTで遠隔操作する自作ロボットアーム:Arduino MKR1000とSimulink、ThingSpeak活用
- IoT対応ソーラートラッカー:Arduinoによるスマートエネルギー管理
- Arduino、Yaler、IFTTTでWeb対応IoTゲージを構築する
- Azure IoT対応スマートプール制御システム:水温・気温監視と遠隔ポンプ制御
- Arduino、CESで産業グレードIoTボード「Portenta H7」を発表
- Azure RTOS、主要組み込みプラットフォームへ対応拡大、新開発キットで開発を簡素化
- IoTと5Gがモダンワークプレイスをどう変革するか
- Azure vs AWS:IoTに最適なクラウドプラットフォームはどっち?



