MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信
部品と材料
| 部品 | 数量 |
|---|---|
| Arduino MKR1000 | 1 |
| DHT22 温湿度センサー | 1 |
アプリとオンラインサービス
- Microsoft Azure
- Arduino IDE
- Microsoft Visual Studio 2015 (Community版で可)
プロジェクト概要
Paul DeCarlo氏のParticle PhotonでAzureへ気象データ送信の記事を参考に、新しいArduino MKR1000で同じことを実現しました。
PhotonはParticle Cloud経由でWebhookを使ってAzureへデータ送信していましたが、MKR1000はHTTPSに対応しているため、直接Azureへデータ送信可能です。このガイドでは、MKR1000をAzureに接続し、Microsoftの「Connect the Dots」プロジェクトのサーバーサイドコードを再利用する方法を解説します。
ハードウェア
DHT22センサーで温度と湿度を測定します(DHT11にもコード修正で対応可能)。ブレッドボード上で配線:
- MKR1000の3.3V → DHT22の1番ピン(VCC)
- 3.3Vから10kΩプルアップ抵抗 → DHT22の2番ピン(DATA)
- DHT22の3番ピン → GND
- DHT22の2番ピン(DATA) → MKR1000のピン6

DHT22の詳細はAdafruitチュートリアルを参照。
Arduino IDEの準備
- ボードマネージャーで「MKR1000」をインストール
- ライブラリマネージャーで「WiFi101」をインストール
HTTPS証明書のインストール
MKR1000はHTTPS対応ですが、デバイスメモリが限られるため、アクセスするサイトの証明書を手動でインストールする必要があります。2ステップで行います:
- Arduino IDEで「Firmware Updater」スケッチをボードに書き込む
- PCでWiFi101 Firmware Updaterをダウンロード・解凍し、
winc1500-uploader-gui.exeを実行
Azure Event Hubsの証明書はservicebus.windows.net向けに発行されているため、任意のサービスバスURLで動作します。ツールのテキストフィールドにctd-ns.servicebus.windows.netを入力、COMポートを選んで証明書をアップロード。

Arduinoスケッチ
GitHubリポジトリからスケッチをクローン/ダウンロード。ssidタブでssid[]とpassword[]を自分のWi-Fi設定に変更し、MKR1000へ書き込み。
エラーが出る場合、ライブラリマネージャーで「DHT sensor library」「ArduinoJson」「RTCZero」をインストールしてください。
シリアルモニターを開き、データがAzureへ送信されているか確認。

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

独自の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プロジェクトを使うと自動作成できます。
- Visual Studioで
connectthedots\Azure\AzurePrepのソリューションを開く - ReleaseモードでAzurePrepプロジェクトを実行
- Azureログインとリソースアクセス許可のプロンプトに従う
- ターミナルで質問に答えてリソース作成
リソース名には「ctd(connect the dots)+ イニシャル」が推奨されます(例: ctddc)。
Visual StudioでCreateWebConfigターゲットを実行し、Webサイト用設定ファイルを作成。デスクトップにweb.configが生成されます。
これを connectthedots\Azure\WebSite\ConnectTheDotsWebSite にコピーし、ConnectTheDotsWebsiteソリューションに追加(ソリューションエクスプローラーで右クリック→「追加」→「既存の項目」)。

プロジェクトをMicrosoft Edgeで実行。データはまだ表示されません(MKR1000側の更新が必要)。
SASキーの生成
ArduinoスケッチにはAzureリソースアクセス用のSASキーが必要です。Sandrino Di Mattia氏のEvent Hubs Signature Generatorを使用します。
- ツールをダウンロード・解凍し、
RedDog.ServiceBus.EventHubs.SignatureGeneratorを起動 - 作成した名前空間を入力(例:
ctddc-ns) - ハブ名は
ehdevices - PublisherとSender Key名は両方
D1 - Token TTLを1年(525,600分)に設定

AzureポータルでSender Keyを取得:
- 左メニュー「参照」→フィルターで「Event Hubs」検索
- 作成した名前空間をクリック
- 「Event Hubs」→
ehdevices→「構成」 - 下部のD1プライマリキーをコピー


署名生成ツールにキーを貼り付け、「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へ書き込み。シリアルモニターで送信確認。

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

IoT Hubの使用
Azure IoT HubはEvent Hubより新しく、デバイス→クラウド、クラウド→デバイスの双方向メッセージングに対応しており、プロジェクトによってはより適しています。
- Azureポータルで新しいIoT Hubを作成
- Device Explorer (
SetupDeviceExplorer.msi) をダウンロード・インストール - AzureポータルでIoT Hubを開き、キーアイコン→
iothubowner行→プライマリ接続文字列をコピー - Device Explorerに接続文字列を貼り付け、「Update」
- 「Management」タブ→「Create」でDevice ID
D1を作成 - D1行をハイライトし、「SAS Token」ボタンでトークン生成



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へ送信されるデータが確認できます。

本プロジェクトはデバイス→クラウドのみなのでHTTP POSTで送信しています。Azure IoT Hub用ライブラリもありますが、現状あまりArduinoライクではありません。クラウド→デバイス受信が必要な場合はライブラリ利用や、Mohan Palanisamy氏のブログ記事が参考になります。
この記事では、MKR1000からAzure Event HubsとIoT Hubへセンサーデータを送信し、既存コードで可視化する方法を紹介しました。データの保存・操作・表示のさらなる方法はConnect the Dotsプロジェクトを参照してください。
作業完了後、使用していないAzureリソースは削除または停止して課金を抑えてください。AzurePrepソリューションのClearResourcesプロジェクトで一括削除可能です。
コードとツール
- Device Explorer (IoT Hub用): ダウンロード
- Connect the Dots (Azureサンプルコード): GitHub
- MKR1000-Arduino (Arduinoソース): GitHub
- WiFi101 Firmware Updater (証明書追加ツール): GitHub
- Event Hubs Signature Generator (認証情報生成): GitHub
回路図
MKR1000のFritzingパーツがないため写真で代用。配線詳細は本文を参照。

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