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. [基本] タブで、次のように各フィールドに入力します。

    • サブスクリプション:ハブで使用するサブスクリプションを選択します。

    • リソース グループ: リソース グループを選択するか、新しく作成します。 新たに作成するには、 [新規作成] を選択して、使用する名前を入力します。 既存のリソース グループを使用するには、そのリソース グループを選択します。 詳しくは、「Manage Azure Resource Manager resource groups (Azure Resource Manager のリソース グループの管理)」をご覧ください。

    • [リージョン] :ハブを配置するリージョンを選択します。 ユーザーに最も近い場所を選択します。 一部の機能 (IoT Hub デバイス ストリームなど) は、特定のリージョンでのみご利用いただけます。 これらの制限のある機能については、サポート対象のいずれかのリージョンを選択する必要があります。

    • [IoT Hub 名] : ハブの名前を入力します。 この名前は、3 から 50 文字の英数字でグローバルに一意である必要があります。 名前には、ダッシュ ('-') 文字を含めることもできます。

    重要

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

    Create a hub in the Azure portal.

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

    デバイスから IoT ハブに接続するために使用できるエンドポイントを選択します。 既定の設定である [パブリック アクセス] を選択するか、[プライベート アクセス] を選択できます。 この例では、既定の設定をそのまま使用しています。

    Choose the endpoints that can connect.

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

    Set the size and scale for a new hub using the Azure portal.

    ここでは、既定の設定をそのまま使用できます。 必要に応じて、次のフィールドに変更を加えることができます。

    • [価格とスケールティア] : 選択したレベル。 必要な機能およびソリューションで 1 日に送信するメッセージの数に応じて、複数のレベルから適切なものを選びます。 無料レベルは、テストおよび評価用です。 ハブに接続できるデバイスは 500 個で、1 日に許可されるメッセージ数は最大 8,000 件です。 Azure サブスクリプションごとに、Free レベルの IoT ハブを 1 つ作成できます。

      クイックスタートを使用して作業している場合、Free レベルを選択します。

    • [IoT Hub ユニット] : ユニットごとに許可される 1 日あたりのメッセージの数は、ハブの価格レベルによって決まります。 たとえば、ハブで 700,000 件のイングレス メッセージをサポートする場合は、S1 レベルのユニットを 2 つ選択します。 他のレベルのオプションについて詳しくは、適切な IoT Hub レベルの選択に関するページをご覧ください。

    • Microsoft Defender for IoT: IoT およびお使いのデバイスに、脅威に対する保護のレイヤーを別途追加するには、これをオンにします。 このオプションは、Free レベルのハブでは使用できません。 Defender for IoT における IoT Hub のセキュリティに関する推奨事項の詳細を参照してください。

    • ロールベースのアクセス制御: IoT ハブへのアクセスを管理する方法を選択します。共有アクセス ポリシーが許可されるか、ロールベースのアクセス制御のみがサポートされます。 詳細については、「Azure Active Directory を使用して IoT Hub へのアクセスを制御する」を参照してください。

    • Device-to-cloud パーティション: このプロパティでは、device-to-cloud メッセージがそのメッセージの同時閲覧者数に関連付けられます。 ほとんどのハブでは、4 つのパーティションのみが必要となります。

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

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

    Assign tags for the hub using the Azure portal.

  8. 次へ:次へ: レビューと作成 をクリックして、選択内容を確認します。 次の画面のようになります。ただし、表示されるのはハブの作成時に選択した値です。

    Review information for creating the new hub.

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

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. デバイスが作成された後、[デバイス] ウィンドウの一覧からデバイスを開きます。 プライマリ接続文字列をコピーします。 この接続文字列は、ハブと通信する目的でデバイス コードによって使用されます。

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

    Screen capture that shows the device connection string

注意

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

注意

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 つに、Azure IoT Tools for Visual Studio Code を使用することがあります。 詳細については、「Visual Studio Code 用 Azure IoT Tools を使用してデバイスと IoT Hub の間のメッセージを送受信する」を参照してください。

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

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

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

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

次のステップ

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

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