工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信

部品と材料

部品 数量
Arduino MKR1000 1
DHT22 温湿度センサー 1

アプリとオンラインサービス

プロジェクト概要

Paul DeCarlo氏のParticle PhotonでAzureへ気象データ送信の記事を参考に、新しいArduino MKR1000で同じことを実現しました。

PhotonはParticle Cloud経由でWebhookを使ってAzureへデータ送信していましたが、MKR1000はHTTPSに対応しているため、直接Azureへデータ送信可能です。このガイドでは、MKR1000をAzureに接続し、Microsoftの「Connect the Dots」プロジェクトのサーバーサイドコードを再利用する方法を解説します。

ハードウェア

DHT22センサーで温度と湿度を測定します(DHT11にもコード修正で対応可能)。ブレッドボード上で配線:

MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信

DHT22の詳細はAdafruitチュートリアルを参照。

Arduino IDEの準備

  1. ボードマネージャーで「MKR1000」をインストール
  2. ライブラリマネージャーで「WiFi101」をインストール

HTTPS証明書のインストール

MKR1000はHTTPS対応ですが、デバイスメモリが限られるため、アクセスするサイトの証明書を手動でインストールする必要があります。2ステップで行います:

  1. Arduino IDEで「Firmware Updater」スケッチをボードに書き込む
  2. PCでWiFi101 Firmware Updaterをダウンロード・解凍し、winc1500-uploader-gui.exeを実行

Azure Event Hubsの証明書はservicebus.windows.net向けに発行されているため、任意のサービスバスURLで動作します。ツールのテキストフィールドにctd-ns.servicebus.windows.netを入力、COMポートを選んで証明書をアップロード。

MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信

Arduinoスケッチ

GitHubリポジトリからスケッチをクローン/ダウンロード。ssidタブでssid[]とpassword[]を自分のWi-Fi設定に変更し、MKR1000へ書き込み。

エラーが出る場合、ライブラリマネージャーで「DHT sensor library」「ArduinoJson」「RTCZero」をインストールしてください。

シリアルモニターを開き、データがAzureへ送信されているか確認。

MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信

このスケッチは「Connect the Dots」プロジェクトのEvent Hubを再利用しているため、既存のAzure Webアプリでデータを可視化できます。https://connectthedotsdx.azurewebsites.net/ をブラウザで開くと、MKR1000からのデータが表示されます。これは「パブリック」なEvent Hubなので、他の人のセンサーデータと混在します。複数人で実行する場合は、createJSON関数内のdisplaynameやguidを変更してください。

MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信

独自のEvent Hubを作成する

既存のEvent Hubでも動作しますが、専用のEvent Hubを作ることも可能です。Visual StudioとAzureサブスクリプションが必要です(Visual Studio 2015 CommunityとAzure無料試用版でOK)。

Connect the Dotsプロジェクトのコードを使用します:

git clone https://github.com/Azure/connectthedots.git

Microsoftの手順に従ってAzureリソースを手動作成してもよいですが、クローンしたリポジトリのAzurePrepプロジェクトを使うと自動作成できます。

  1. Visual Studioで connectthedots\Azure\AzurePrep のソリューションを開く
  2. ReleaseモードでAzurePrepプロジェクトを実行
  3. Azureログインとリソースアクセス許可のプロンプトに従う
  4. ターミナルで質問に答えてリソース作成

リソース名には「ctd(connect the dots)+ イニシャル」が推奨されます(例: ctddc)。

Visual StudioでCreateWebConfigターゲットを実行し、Webサイト用設定ファイルを作成。デスクトップにweb.configが生成されます。

これを connectthedots\Azure\WebSite\ConnectTheDotsWebSite にコピーし、ConnectTheDotsWebsiteソリューションに追加(ソリューションエクスプローラーで右クリック→「追加」→「既存の項目」)。

MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信

プロジェクトをMicrosoft Edgeで実行。データはまだ表示されません(MKR1000側の更新が必要)。

SASキーの生成

ArduinoスケッチにはAzureリソースアクセス用のSASキーが必要です。Sandrino Di Mattia氏のEvent Hubs Signature Generatorを使用します。

  1. ツールをダウンロード・解凍し、RedDog.ServiceBus.EventHubs.SignatureGeneratorを起動
  2. 作成した名前空間を入力(例: ctddc-ns)
  3. ハブ名は ehdevices
  4. PublisherとSender Key名は両方 D1
  5. Token TTLを1年(525,600分)に設定

MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信

AzureポータルでSender Keyを取得:

  1. 左メニュー「参照」→フィルターで「Event Hubs」検索
  2. 作成した名前空間をクリック
  3. 「Event Hubs」→ ehdevices →「構成」
  4. 下部のD1プライマリキーをコピー

MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信

MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信

署名生成ツールにキーを貼り付け、「Generate」で署名を生成。コピーしてArduinoスケッチのhostname[]とauthSAS[]を更新:

char hostname[] = "ctddc-ns.servicebus.windows.net";
char authSAS[] = "SharedAccessSignature sr=ctddc-ns.servicebus.windows.net%2fehdevices%2fpublishers%2fD1%2fmessages&sig=...&se=...";

スケッチを保存してMKR1000へ書き込み。シリアルモニターで送信確認。

MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信

Webサイト(Edge)に戻ると、自分のデバイスデータが表示されるはずです。

MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信

IoT Hubの使用

Azure IoT HubはEvent Hubより新しく、デバイス→クラウド、クラウド→デバイスの双方向メッセージングに対応しており、プロジェクトによってはより適しています。

  1. Azureポータルで新しいIoT Hubを作成
  2. Device Explorer (SetupDeviceExplorer.msi) をダウンロード・インストール
  3. AzureポータルでIoT Hubを開き、キーアイコン→iothubowner行→プライマリ接続文字列をコピー
  4. Device Explorerに接続文字列を貼り付け、「Update」
  5. 「Management」タブ→「Create」でDevice ID D1 を作成
  6. D1行をハイライトし、「SAS Token」ボタンでトークン生成

MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信

MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信

MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信

Arduinoスケッチを以下のように修正:

char hostname[] = "hacksterdemo.azure-devices.net";
char authSAS[] = "SharedAccessSignature sr=hacksterdemo.azure-devices.net%2fdevices%2fD1&sig=...&se=...";
String deviceName = "D1";
String uri = "/devices/" + deviceName + "/messages/events?api-version=2016-02-03";

重要: Event Hubは成功時にHTTP 201を返しますが、IoT HubはHTTP 204を返します。sendEvent関数内の判定を修正:

// 変更前
if (response.startsWith("HTTP/1.1 201")) {

// 変更後
if (response.startsWith("HTTP/1.1 204")) {

スケッチを書き込み、Device Explorerの「Data」タブで「Monitor」をクリックすると、IoT Hubへ送信されるデータが確認できます。

MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信

本プロジェクトはデバイス→クラウドのみなのでHTTP POSTで送信しています。Azure IoT Hub用ライブラリもありますが、現状あまりArduinoライクではありません。クラウド→デバイス受信が必要な場合はライブラリ利用や、Mohan Palanisamy氏のブログ記事が参考になります。

この記事では、MKR1000からAzure Event HubsとIoT Hubへセンサーデータを送信し、既存コードで可視化する方法を紹介しました。データの保存・操作・表示のさらなる方法はConnect the Dotsプロジェクトを参照してください。

作業完了後、使用していないAzureリソースは削除または停止して課金を抑えてください。AzurePrepソリューションのClearResourcesプロジェクトで一括削除可能です。

コードとツール

回路図

MKR1000のFritzingパーツがないため写真で代用。配線詳細は本文を参照。

MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信

製造プロセス

  1. Raspberry Piと湿度センサーで作る自動エアロポニックスシステム
  2. 湿度センサーの検証とキャリブレーションで精密測定を実現
  3. DHT11温湿度センサーで作る温度アラート – LEDとピエゾブザーで視覚/聴覚通知
  4. Arduinoで温湿度ロガーを作る – DHT11とEthernetシールドでSDカード記録
  5. Arduino Dueと3.2インチTFTで作る温度監視付きリアルタイムクロック
  6. ESP32で作るIoT環境モニター:温湿度・気圧・CO2をWebダッシュボードで可視化
  7. BME280 温湿度・気圧データを Nextion タッチスクリーンに表示
  8. DHT11 と Blynk で温湿度をリアルタイム監視する Arduino チュートリアル
  9. Arduinoセンサー:種類、応用、実世界プロジェクト
  10. 湿度センサー:仕組みと主要アプリケーション
  11. DHT11センサー:仕組みと主要アプリケーション