Raspberry Pi の Azure IoT Hub への接続 (C)

この記事では、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 に送信します。

作成した IoT Hub に Raspberry Pi を接続します。 次に、BME280 センサーから気温と湿度のデータを収集するために、Pi のサンプル アプリケーションを実行します。 最後に、センサー データを IoT Hub に送信します。

学習内容

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

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

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

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

必要なもの

What you need

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

  • 有効な Azure サブスクリプション Azure アカウントがない場合は、無料試用版の Azure アカウントを数分で作成できます。

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

  • Mac PC または 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 を設定します。

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

Raspberry Pi OS のイメージをインストールする MicroSD カードを用意します。

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

    1. デスクトップ環境付きの Raspberry Pi OS をダウンロードします (.zip ファイル)。

    2. コンピューターのフォルダーにイメージを抽出します。

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

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

    2. Etcher を実行し、ステップ 1 で抽出した Raspberry Pi OS のイメージを選択します。

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

    4. [Flash](フラッシュ) をクリックして Raspberry Pi OS を microSD カードにインストールします。

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

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

SSH および SPI の有効化

  1. Pi をモニター、キーボード、マウスに接続し、Pi を起動し、ユーザー名に pi を、パスワードに raspberry を使用してRaspberry Pi OS にサインインします。

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

    The Raspberry Pi OS Preferences menu

  3. [Interfaces] タブで、[SPI][SSH][Enable] に設定し、[OK] をクリックします。 物理センサーがなく、シミュレートされたセンサー データを使用する場合は、この手順は省略可能です。

    Enable SPI and SSH on Raspberry Pi

Note

SSH および SPI を有効にする場合は、raspberrypi.org および RASPI-CONFIG でさらに参考ドキュメントを見つけることができます。

センサーを Pi に接続する

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

The Raspberry Pi and sensor connection

BME280 センサーでは、温度と湿度のデータを収集できます。 また、デバイスとクラウドとの間で通信が行われると、LED が点滅します。

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

開始 (センサーと LED) 終了 (ボード) ケーブルの色
LED VDD (ピン 5G) GPIO 4 (ピン 7) 白いケーブル
LED GND (ピン 6G) GND (ピン 6) 黒いケーブル
VDD (ピン 18F) 3.3V PWR (ピン 17) 白いケーブル
GND (ピン 20F) GND (ピン 20) 黒いケーブル
SCK (ピン 21F) SPI0 SCLK (ピン 23) オレンジ色のケーブル
SDO (ピン 22F) SPI0 MISO (ピン 21) 黄色のケーブル
SDI (ピン 23F) SPI0 MOSI (ピン 19) 緑のケーブル
CS (ピン 24F) SPI0 CS (ピン 24) 青いケーブル

クリックすると 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 アドレスをメモしておく必要があります。

Connected to wired network

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

ご利用の Raspberry Pi にサインインする

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

    Windows ユーザー

    1. Windows 版の PuTTY をダウンロードしてインストールします。
    2. Pi の IP アドレスをホスト名 (または IP アドレス) セクションにコピーし、接続の種類として SSH を選択します。

    PuTTy

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

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

    注意

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

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

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

    git clone https://github.com/Azure-Samples/iot-hub-c-raspberrypi-client-app.git
    
  2. このサンプルには、開発環境を用意し、当サンプルをビルドするための、セットアップ スクリプトが付属しています。 セットアップ スクリプトを実行します。

    cd ./iot-hub-c-raspberrypi-client-app
    sudo chmod u+x setup.sh
    sudo ./setup.sh
    

    Note

    BME280 が物理的にない場合は、コマンド ライン パラメーターとして "--simulated-data" を使用して、温度と湿度のデータをシミュレートできます。 sudo ./setup.sh --simulated-data

サンプル アプリケーションをビルドして実行する

  1. セットアップ スクリプトによって、サンプルは既にビルドされています。 ですが、サンプル アプリケーションに変更を加えてリビルドする必要がある場合は、次のコマンドを実行します。

    cmake . && make
    

    Build output

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

    sudo ./app '<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 のシナリオについて調べるには、次のページを参照してください。