プログラムMKROver-the-Air + Goodies:音声制御など。
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 |
アプリとオンラインサービス
> ![]() |
| |||
![]() |
| |||
![]() |
| |||
![]() |
| |||
|
このプロジェクトについて
概要
私たちの貢献は2つの部分に分かれています。
パート1:再利用可能なコンポーネントのコレクション。 これらは、便利な機能を活用するさまざまなIoTプロジェクトを構築するためのフレームワークとして機能します。
- 無線(OTA)プログラミング Arduino MKR1000の(つまり、コンパイルされたバイナリコードのアップロード)。いくつかの方法が利用可能です。 LAN内またはインターネットから、安全に、Microsoft Azure IoTHubを介して。
- ユニバーサルWindowsプラットフォーム(UWP)クライアントアプリ 、素敵なユーザーインターフェースを備えています。 Azure IoTHubを介してボードと安全に通信します。
- 音声認識 (クライアントアプリ上で)、Microsoft ProjectOxfordが提供する音声認識APIを介して。音声コマンドを使用して、Azure IoTHubを介してボードを制御できます。
パート2:上記のコンポーネントで構築されたユースケース/サンプル:電話で制御される室内サーモスタット(UWPアプリ)。 コンポーネントの使用方法の例として使用するために作成しました。さらに進んで、オフィスに設置しました。これらの行を書いている間、オフィスの暖房システムはこのプロジェクトによって制御されています。
パート1:OTAの再利用可能なコンポーネント
OTAの動作原理 <図>

次のコンポーネントを開発しました:
Arduino IDEの場合:
- ランタイムライブラリ 。ファームウェアのアップロードとコピーの仕組みを処理します。
- カスタム「ボード」パッケージ 。ライブラリに必要なリンカー関連の設定がいくつかあります。
- ArduinoIDEプラグイン 。ダウンロード信号とコンパイルされたバイナリスケッチ(別名ファームウェア)を送信します。ボード、Azure IoT Hub、IoTディスパッチャーサーバーアプリと通信します(以下を参照)。
サードパーティのサーバー(Microsoft Azure Webサイトなど)にインストールする場合:
- IoTディスパッチャー 、ファームウェアを保存および提供するPHP + MySQLアプリケーション。
UWPアプリの動作原理 <図>

私たちは開発しました:
- C#で記述されたUWPクライアントアプリ。 Azure IoT Hubを介してボードと通信し、Microsoft ProjectOxfordを介して音声コマンドを認識します。さまざまなプロジェクトの開始点として使用できます。
OTAデモ
パート2:使用例/サンプル:室内サーモスタット
前述のように、コンポーネントを組み合わせて実際のプロジェクトを構築する方法を示すために、室内サーモスタットを開発しました。私たちの場合、それを本番環境に移行することもできます。つまり、オフィスの暖房を制御します。
ロジックは単純です:
- 温度が設定温度を下回ると=>リレー(つまり加熱)がオンになります
- 温度が設定温度を超えると=>リレー/加熱がオフになります
- ユーザーインターフェイス/ UWPクライアント:ステータスを表示し、プリセット温度を設定します(テキストボックスまたは音声を使用)




1.プロジェクトを作成する(ハードウェア) <図>

ベータMKR1000を使用しているため、フリッツの図は提供していません。ピンのレイアウトは将来変更される可能性があります。
2.OTAおよびAzureIoTHubの開発環境をセットアップします
- Arduino IDE、少なくともバージョン1.6.7をインストールします
- ArduinoSAMDボードをインストールします。 Arduino IDEから:ツール>ボード:...>ボードマネージャー...>「ArduinoSAMDボード」を選択
- 次のライブラリをダウンロードして解凍します: SKETCHBOOK_DIR(例:Documents / Arduino)/ libraries :WiFi101、AzureIoT、RTCZero。
そして今、私たちのコンポーネント:
- OTA ランタイムライブラリをダウンロードして解凍します で:SKETCHBOOK_DIR(例:ドキュメント/ Arduino)/ライブラリ。
- カスタム「ボード」パッケージをダウンロード 。ディレクトリを作成します: SKETCHBOOK_DIR(例:Documents / Arduino)/ハードウェア/フラワープラットフォーム 。ダウンロードしたファイルをここで解凍します。
- ArduinoIDEプラグインをダウンロード 。ディレクトリを作成します:SKETCHBOOK_DIR(例:Documents / Arduino)/ tools。ダウンロードしたファイルをここで解凍します。
インターネット/ HTTPSを介した安全なOTAの場合:
- IoTディスパッチャーをダウンロード PHP + MySQLサーバーにインストールします。例えば。 Microsoft AzureCloudにデプロイする方法についての説明があります。
3.テストドライブOTA
OTAのアップロード方法は3つあります。
1)LAN経由でOTAを試す: ファイル>例> Arduino-FlowerOTA> WiFiOTA 。 "// CHANGE ME" でコメントされた行を変更します したがって、IPアドレス、WiFiパラメータ、プレーン/ SSL、サーバー署名を構成するために。次に、 Flower Platform> Upload OTA ...
<図>

必ず使用してください:
WiFiClientクライアント;
および(ポップアップウィンドウの「サーバー署名」を参照)。
ota.begin(&udp、&client、 "1hvtdliHzKLjMykvfW1MfPwsFthUU / YfjN8fOZJ3Qhc =");
注 :3つの方法すべてについて、USB経由で初期アップロードを行う必要があります。その後、選択した方法でOTAを引き続き使用できます。
2)安全なディスパッチャを介してOTAを試す 、同じファイルを使用:
<図>
必ず使用してください:
WiFiSSLClientクライアント;
および
ota.begin(&udp、&client、 "my-iot-dispatcher-upload-key"); // cf. IoTディスパッチャー(PHP)内で構成
3) セキュアディスパッチャーとAzureIoTHubを介してOTAを試す 。ファイル>例> Arduino-FlowerOTA> WiFiOTA-AzureIoTHub。繰り返しますが、「 // CHANGE ME 」でコメントされた行を調整することを忘れないでください "。
<図>
4)ユースケース/サンプル:室内サーモスタットを試してください。 こちらから入手できます。
4.ユーザーインターフェイスを試乗する(Azure IoT Hubと音声認識を備えたUWPアプリ)
UWPプロジェクトはこちらから入手できます。 Visual Studio2015とWindows10が必要です。
必ず接続パラメータを変更してください。 Azureアカウント:
SendCloudToDevice.cs
class SendCloudToDevice {//変更してください:以下の定数を実際の値(Azureポータルから取得)に置き換えてくださいprivate const string HOST ="???。azure-devices.net"; private const string DEVICE_ID ="???"; private const string DEVICE_KEY ="???";静的文字列sharedAccessKeyName ="???";静的文字列sharedAccessKey ="???";
ReadDeviceToCloud.cs
class ReadDeviceToCloud {//以下の定数を実際の値(Azureポータルから取得)に置き換えてくださいprivate static string ConnectionString ="???";プライベート静的文字列eventHubEntity ="???";
このコードは、さまざまなプロジェクトのクライアントアプリの開始点として機能します。プロジェクトに応じてユーザーインターフェイスを調整するだけです。
今後のステップ
妥当な処理能力とSSL通信機能を備えたArduinoMKR1000などのボードは、メーカーのコミュニティにとって大きな前進です。
IoTプロジェクトを大幅に加速するオンラインサービスであるFlowerPlatform IoTを開発するために、このプロジェクトで開始された作業を継続しています。
- 開発:OOPコンポーネントとグラフィカルプログラミング言語(手書きのコードと組み合わせることができます)の使用。
- 展開:OTAの使用。
フラワープラットフォームを活用して、幼い子供たちにIoTプロジェクトの作成とプログラミングを教えることに焦点を当てた基盤を構築する予定です。
コード
ファームウェアのアップロードとコピーの仕組み(C ++)を処理するランタイムライブラリ
https://github.com/flower-platform/Arduino-FlowerOTAライブラリに必要なリンカー関連の設定がいくつかあるカスタム「ボード」パッケージ(リンカースクリプト)
https://github.com/flower-platform/ArduinoCore-samd-OTAArduinoIDEプラグイン。ボード、ディスパッチャー、IoTハブ(Java)との通信
https://github.com/flower-platform/flower-platform-arduino-ide-pluginIoTディスパッチャー。 OTA(PHP + MySQL)中に必要なファームウェアを保存して提供します
https://github.com/flower-platform/flower-platform-iot-dispatcher室内サーモスタットの使用例/サンプル(C ++)
https://github.com/flower-platform/ThermostatIoTUWPクライアント、室内サーモスタットのユースケース/サンプル(C#、HTML、JavaScript)
https://github.com/flower-platform/thermostat-uwp-ui 回路図
ベータMKR1000を使用しているため、フリッツの図は提供していません。ピンのレイアウトは将来変更される可能性があります。 
製造プロセス