Raspberry Pi の Azure IoT Hub への接続 (Node.js)

このチュートリアルでは、Raspberry Pi OS で動作する Raspberry Pi の基本的な使用方法を最初に説明します。 次に、Azure IoT Hub を使って、デバイスをクラウドにシームレスに接続する方法について説明します。 Windows 10 IoT Core サンプルについては、Windows デベロッパー センターを参照してください。

キットをお持ちでない場合は、 Raspberry Pi オンライン シミュレーターをお試しください。 または、こちらで新しいキットを購入してください。

作業内容

  • IoT Hub を作成します。

  • Pi のデバイスを IoT Hub に登録します。

  • Raspberry Pi を設定します。

  • Pi でサンプル アプリケーションを実行し、センサー データを IoT Hub に送信します。

学習内容

  • Azure IoT Hub を作成し、新しいデバイス接続文字列を取得する方法。

  • Pi と BME280 センサーを接続する方法。

  • Pi のサンプル アプリケーションを実行して、センサー データを収集する方法。

  • センサー データを IoT Hub に送信する方法。

必要なもの

What you need

  • Raspberry Pi 2 ボードまたは Raspberry Pi 3 ボード。

  • Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。

  • Pi に接続するモニター、USB キーボード、およびマウス。

  • Mac か、Windows または Linux を実行している PC。

  • インターネット接続。

  • 16 GB 以上の microSD カード。

  • USB-SD アダプターまたは microSD カード (microSD カードに オペレーティング システム イメージを書き込むため)。

  • 5V 2A の AC アダプターと約 2 m の micro USB ケーブル。

省略可能な品目を次に示します。

  • 温度、気圧、および湿度用の組み立て済み Adafruit BME280 センサー。

  • ブレッドボード

  • 6 つの F/M ジャンパー ワイヤ。

  • 拡散型 10 mm LED。

注意

省略可能な項目がない場合は、シミュレートされたセンサー データをご利用いただけます。

IoT Hub の作成

ここでは、Azure portal を使用して IoT ハブを作成する方法について説明します。

  1. Azure portal にサインインします。

  2. Azure のホームページで、[+ リソースの作成] ボタンを選択します。

  3. [カテゴリ] メニューの [モノのインターネット][IoT Hub] を順に選択します。

  4. [基本] タブで、次のように各フィールドに入力します。

    重要

    IoT ハブは DNS エンドポイントとして公開されるため、名前を付ける際に機密情報や個人を特定できる情報を入力しないように注意してください。

    プロパティ
    サブスクリプション ハブで使用するサブスクリプションを選択します。
    リソース グループ リソース グループを選択するか、新しく作成します。 新たに作成するには、 [新規作成] を選択して、使用する名前を入力します。
    IoT ハブ名 ハブの名前を入力します。 この名前は、3 から 50 文字の英数字でグローバルに一意である必要があります。 名前には、ダッシュ ('-') 文字を含めることもできます。
    [リージョン] ハブを配置する最も近いリージョンを選択します。 一部の機能 (IoT Hub デバイス ストリームなど) は、特定のリージョンでのみご利用いただけます。 これらの制限のある機能については、サポート対象のいずれかのリージョンを選択する必要があります。
    レベル ハブに使用するレベルを選択します。 レベルの選択は、必要な機能の数とソリューションで 1 日に送信するメッセージの数に応じます。

    無料レベルは、テストおよび評価用です。 無料レベルでハブに接続できるデバイスは 500 個で、1 日に許可されるメッセージ数は最大 8,000 件です。 Azure サブスクリプションごとに、Free レベルの IoT ハブを 1 つ作成できます。

    各レベルで使用できる機能を比較するには、[レベルを比較する] を選択します。 詳細については、「ソリューションに適した IoT Hub のレベルを選択する」を参照してください。
    1 日あたりのメッセージの制限 ハブの 1 日あたりのメッセージの最大クォータを選択します。 使用可能なオプションは、ハブに対して選んだレベルによって異なります。 使用可能なメッセージと価格のオプションを表示するには、[すべてのオプションを参照する] を選び、ハブのニーズに最適なオプションを選びます。 詳細については、IoT Hub のクォータと調整に関するページを参照してください。

    Screen capture that shows how to create an IoT hub in the Azure portal.

    Note

    示されている価格はあくまでも例です。

  5. Next:Networking(次へ: ネットワーク) を選択して、ハブの作成を続けます。

  6. [ネットワーク] タブで、次のように各フィールドに入力します。

    プロパティ
    接続性の構成 デバイスから IoT ハブに接続するために使用できるエンドポイントを選択します。 この例では、既定の設定であるパブリック アクセスを受け入れます。 この設定は、IoT ハブの作成後に変更できます。 詳細については、IoT ハブのパブリック ネットワーク アクセスの管理に関する記事を参照してください。
    TLS の最小バージョン IoT ハブでサポートされる最小 TLS バージョンを選択します。 IoT ハブが作成されると、この値を変更することはできません。 この例では、既定の設定である 1.0 をそのまま使っています。

    Screen capture that shows how to choose the endpoints that can connect to a new IoT hub.

  7. Next:Management(次へ: 管理) を選択して、ハブの作成を続けます。

  8. [管理] タブで、既定の設定を受け入れます。 必要に応じて、次のフィールドに変更を加えることができます。

    プロパティ
    権限モデル ロールベースのアクセス制御の一部であるこのプロパティは、IoT ハブ への "アクセス権を管理" する方法を決定します。 共有アクセス ポリシーを許可するか、ロールベースのアクセス制御のみを選択します。 詳細については、「Microsoft Entra ID を使用して IoT Hub へのアクセスを制御する」を参照してください。
    自分を割り当てる インスタンス内の要素を管理するために、IoT Hub データ API へのアクセス権が必要になる場合があります。 ロールの割り当てにアクセスできる場合は、[IoT Hub データ共同作成者ロール] を選んで、データ API へのフル アクセスを自分自身に付与します。

    Azure ロールを割り当てるには、Microsoft.Authorization/roleAssignments/write のアクセス許可 (ユーザー アクセス管理者所有者など) が必要です。
    Device-to-cloud パーティション このプロパティでは、device-to-cloud メッセージがそのメッセージの同時閲覧者数に関連付けられます。 ほとんどの IoT ハブでは、4 つのパーティションのみが必要となります。

    Screen capture that shows how to set the role-based access control and scale for a new IoT hub.

  9. [次へ: アドオン] を選んで、次の画面に進みます。

  10. [アドオン] タブで、既定の設定を受け入れます。 必要に応じて、次のフィールドに変更を加えることができます。

    プロパティ
    Device Update for IoT Hub を有効にする Device Update for IoT Hub を有効にして、デバイスの無線での更新を有効にします。 このオプションを選択すると、Device Update for IoT Hub アカウントおよびインスタンスをプロビジョニングするための情報を入力するように求められます。 詳細については、「Device Update for IoT Hub とは?」を参照してください
    Defender for IoT を有効にする IoT とデバイスに、保護のレイヤーをさらに追加するには、Defender for IoT を有効にします。 このオプションは、Free レベルのハブでは使用できません。 Defender for IoT における IoT Hub のセキュリティに関する推奨事項の詳細を参照してください。

    Screen capture that shows how to set the optional add-ons for a new IoT hub.

    Note

    示されている価格はあくまでも例です。

  11. 次へ:[Next](次へ) を選択して、次の画面に進みます。

    タグは、名前と値の組です。 複数のリソースおよびリソース グループに同じタグを割り当てることで、リソースを分類したり、課金情報を統合したりすることができます。 このドキュメントでは、タグを追加しません。 詳細については、タグを使用した Azure リソースの整理に関するページを参照してください。

    Screen capture that shows how to assign tags for a new IoT hub.

  12. 次へ:次へ: レビューと作成 をクリックして、選択内容を確認します。

  13. [作成] を選択して新しいハブのデプロイを開始します。 ハブの作成中、数分間にデプロイが進行中になります。 デプロイが完了したら、 [リソースに移動] を選択し、新しいハブを開きます。

IoT ハブに新しいデバイスを登録する

このセクションでは、IoT ハブの ID レジストリにデバイス ID を作成します。 ハブに接続するデバイスは、あらかじめ ID レジストリに登録されている必要があります。 詳細については、IoT Hub 開発者ガイドを参照してください。

  1. IoT ハブのナビゲーション メニューの [デバイス] を開き、[デバイスの追加] を選択して IoT ハブにデバイスを追加します。

    Screen capture that shows how to create a device identity in the portal.

  2. [デバイスの作成] で、新しいデバイスの名前 (myDeviceId など) を入力し、 [保存] を選択します。 この操作で、IoT ハブのデバイス ID が作成されます。 主キーと 2 次キーが自動生成されるよう、 [キーの自動生成] はオンのままにしておきます。

    Screen capture that shows how to add a new device.

    重要

    デバイス ID は、カスタマー サポートとトラブルシューティング目的で収集されたログに表示される場合があります。そのため、名前を付ける際は機密情報を含めないようにしてください。

  3. デバイスが作成された後、[デバイス] ウィンドウの一覧からデバイスを開きます。 [プライマリ接続文字列] の値をコピーします。 この接続文字列は、IoT ハブと通信するためにデバイス コードによって使用されます。

    キーと接続文字列は機密情報であるため、既定でマスクされます。 目のアイコンをクリックすると、表示されます。 表示しなくてもコピー ボタンでコピーできます。

    Screen capture that shows the device connection string.

Note

IoT Hub の ID レジストリには、IoT ハブに対するセキュリティで保護されたアクセスを有効にするためのデバイス ID のみが格納されます。 セキュリティ資格情報として使用するキーとデバイス ID、そして個々のデバイスについてアクセスを無効にすることのできる有効/無効フラグが格納されます。 その他デバイス固有のメタデータをアプリケーションで保存する必要がある場合は、アプリケーション固有のストアを使用する必要があります。 詳細については、IoT Hub 開発者ガイドをご覧ください。

Raspberry Pi のセットアップ

Raspberry Pi OS をインストールする

microSD カードに Raspberry Pi OS イメージをインストールするための準備をします。

  1. Raspberry Pi OS with desktop をダウンロードします。

    a. Raspbian Buster with desktop (.zip ファイル)。

    b. コンピューター上のフォルダーに Raspberry Pi OS with desktop イメージを抽出します。

  2. microSD カードに Raspberry Pi OS with desktop をインストールします。

    a. Etcher SD カード書き込みユーティリティをダウンロードしてインストールします

    b. Etcher を実行し、手順 1. で抽出した Raspberry Pi OS with desktop イメージを選択します。

    c. microSD カード ドライブを選択します。 Etcher では適切なドライブが既に選択されている場合があります。

    d. [フラッシュ] をクリックし、microSD カードに Raspberry Pi OS with desktop をインストールします。

    e. インストールが完了したら、コンピューターから microSD カードを取り出します。 Etcher では完了時に microSD カードを自動的に取り出すか、マウント解除するため、microSD カードを直接取り出しても問題ありません。

    f. microSD カードを Pi に挿入します。

SSH および I2C の有効化

  1. Pi をモニター、キーボード、およびマウスに接続します。

  2. Pi を起動してから、pi をユーザー名として、raspberry をパスワードとして使用して Raspberry Pi OS にサインインします。

  3. Raspberry アイコン >[Preferences] (設定)>[Raspberry Pi Configuration] (Raspberry Pi 構成) の順にクリックします。

    The Raspberry Pi OS with Preferences menu

  4. [Interfaces] タブで、 [SSH][I2C][Enable] に設定し、 [OK] をクリックします。

    インターフェイス 説明
    SSH Secure Shell (SSH) は、リモート コマンド行を使用して Raspberry Pi にリモート接続するために使用されます。 これは、このドキュメントで Raspberry Pi にコマンドをリモートで発行する場合に推奨される方法です。
    I2C 相互集積回路 (I2C) は、センサーなどのハードウェアとのインターフェイスとして使用される通信プロトコルです。 このインターフェイスは、このトピックの物理センサーとのやり取りに必要です。

    物理的なセンサーがなく、Raspberry Pi デバイスからシミュレートされたセンサー データを使用する場合、I2C を無効のままにできます。

    Enable I2C and SSH on Raspberry Pi

Note

SSH と I2C を有効にする際の参考ドキュメントは raspberrypi.orgAdafruit.com に多数あります。

センサーを Pi に接続する

ブレッドボードとジャンパー ワイヤを使用して、次のように LED と BME280 を Pi に接続します。 センサーがない場合は、このセクションをスキップします。

The Raspberry Pi and sensor connection

BME280 センサーでは、温度と湿度のデータを収集できます。 デバイスがメッセージをクラウドに送信すると、LED が点滅します。

センサーの各ピンで、次のように接続します。

開始 (センサーと LED) 終了 (ボード) ケーブルの色
VDD (ピン 5G) 3.3V PWR (ピン 1) 白いケーブル
GND (ピン 7G) GND (ピン 6) 茶色のケーブル
SDI (ピン 10G) I2C1 SDA (ピン 3) 赤いケーブル
SCK (ピン 8G) I2C1 SCL (ピン 5) オレンジ色のケーブル
LED VDD (ピン 18F) GPIO 24 (ピン 18) 白いケーブル
LED GND (ピン 17F) GND (ピン 20) 黒いケーブル

Raspberry Pi 2 & 3 Pin mappings をクリックして参照します。

BME280 が正常に Raspberry Pi に接続されると、下の図のようになります。

Connected Pi and BME280

Pi のネットワークへの接続

micro USB ケーブルと AC アダプターを使って、Pi の電源を入れます。 イーサネット ケーブルを使用して Pi を有線ネットワークに接続するか、Raspberry Pi Foundation の手順に従って、Pi をワイヤレス ネットワークに接続します。 Pi がネットワークに正常に接続されたら、Pi の IP アドレスをメモしておく必要があります。

注意

必ず Pi をコンピューターと同じネットワークに接続してください。 たとえば、コンピューターがワイヤレス ネットワークに接続され、Pi がワイヤード (有線) ネットワークに接続されている場合、devdisco の出力に IP アドレスが表示されないことがあります。

Pi でのサンプル アプリケーションの実行

サンプル アプリケーションの複製と前提条件となるパッケージのインストール

  1. 以下の SSH クライアントのいずれかを使用して、ホスト コンピューターから Raspberry Pi に接続します。

    Windows ユーザー

    a. Windows 版の PuTTY をダウンロードしてインストールします。

    b. Pi の IP アドレスをホスト名 (または IP アドレス) セクションにコピーし、接続の種類として SSH を選択します。

    PuTTy

    Mac ユーザーおよび Ubuntu ユーザー

    Ubuntu または macOS に組み込まれている SSH クライアントを使用します。 SSH を使用して Pi を接続するには、ssh pi@<ip address of pi> を実行する必要がある場合があります。

    注意

    既定のユーザー名は pi、パスワードはraspberry です。

  2. Pi に Node.js と npm をインストールします。

    まず、ご使用の Node.js のバージョンを確認します。

    node -v
    

    バージョンが 10.x より前であるか、Node.js が Pi にない場合は、最新バージョンをインストールします。

    curl -sSL https://deb.nodesource.com/setup_16.x | sudo -E bash
    sudo apt-get -y install nodejs
    
  3. サンプル アプリケーションを複製します。

    git clone https://github.com/Azure-Samples/azure-iot-samples-node.git
    
  4. サンプルのすべてのパッケージをインストールします。 このインストールには、Azure IoT device SDK、BME280 センサー ライブラリ、および Wiring Pi ライブラリが含まれています。

    cd azure-iot-samples-node/iot-hub/Tutorials/RaspberryPiApp
    npm install
    

    注意

    ネットワーク接続によっては、このインストール プロセスが終了するまで数分かかる場合があります。

サンプル アプリケーションを構成する

  1. 次のコマンドを実行して、config ファイルを開きます。

    nano config.json
    

    Config file

    このファイルには、構成可能な 2 つの項目があります。 1 つは interval で、クラウドに送信するメッセージ間の時間間隔 (ミリ秒) を定義します。 もう 1 つは simulatedData で、シミュレートされたセンサー データを使用するかどうかを表すブール値です。

    センサーがない場合は、simulatedData 値を true に設定し、シミュレートされたセンサー データをサンプル アプリケーションで作成して使用します。

    注: このチュートリアルで使用する i2c アドレスは、既定では 0x77 です。 構成によっては、0x76 になることもあります。 i2c エラーが発生した場合は、値を 118 に変更し、その動作が適切かどうかを確認してください。 センサーによって使用されているアドレスを確認するには、raspberry pi 上のシェルで sudo i2cdetect -y 1 を実行します

  2. Ctrl + O キー > Enter キー > Ctrl + X キーの順に押し、保存して終了します。

サンプル アプリケーションの実行

次のコマンドを実行して、サンプル アプリケーションを実行します。

sudo node index.js '<YOUR AZURE IOT HUB DEVICE CONNECTION STRING>'

注意

デバイスの接続文字列をコピーして貼り付け、必ず一重引用符で囲んでください。

IoT Hub に送信されるセンサー データとメッセージを示す次の出力が表示されます。

Output - sensor data sent from Raspberry Pi to your IoT hub

ハブに送信されたメッセージを読み取る

デバイスから IoT ハブが受信するメッセージを監視する方法の 1 つに、Visual Studio Code 用の Azure IoT Hub を使用することがあります。 詳細については、「Visual Studio Code 用 Azure IoT Hub 拡張機能を使用してデバイスと IoT Hub の間のメッセージを送受信する」を参照してください。

デバイスから送信されたデータを処理する詳しい方法については、次のセクションに進んでください。

リソースのクリーンアップ

このトピックで作成したリソースは、このドキュメント セットの他のチュートリアルとクイックスタートでも使用できます。 引き続き他のクイックスタートまたはチュートリアルを実行する予定があるなら、このトピックで作成したリソースは削除しないでください。 引き続き作業する予定がなければ、次の手順に従って、このトピックで Azure portal を使用して作成したリソースはすべて削除してください。

  1. Azure portal の左側のメニューで [All resources](すべてのリソース) を選択し、そこで、作成した IoT Hub を選択します。
  2. IoT Hub の概要ペインの上部にある [Delete](削除) をクリックします。
  3. ハブ名を入力してもう一度 [削除] をクリックし、IoT ハブを完全に削除することを確認します。

次のステップ

サンプル アプリケーションを実行してセンサー データを収集し、IoT Hub に送信しました。

引き続き Azure IoT Hub の使用方法を確認すると共に、すべての拡張された IoT のシナリオについて調べるには、次のページを参照してください。