GPSデータロガー、空間分析、およびAzureIoTハブ。
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 6 | ||||
| × | 2 | ||||
| × | 3 | ||||
| × | 4 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 |
アプリとオンラインサービス
> |
| |||
| ||||
| ||||
| ||||
| ||||
| ||||
|
このプロジェクトについて
はじめに
現在のモバイルテクノロジーは非常に高度で使いやすく、ほぼすべてのタイプのデバイスで利用可能なGIS情報マップを使用できます。このプロジェクトは、オープンソースハードウェア、モバイルコンピューティング、地理空間テクノロジー、クラウドコンピューティングの基本を子供たちに教えるための教室での活動にすることができます。
このプロジェクトは3つの部分で構成されています:
1)ArduinoGPSデータロガー
幼い子供たちは、支援を受けて、GPS位置情報、光の測定値、および位置しているものの種類を記録するデバイスを作成できます。彼らは屋外に出て、あらかじめ決められたもの(看板、木、公園のベンチなど)の場所に印を付けることができます。これにより、周囲の世界をよりよく理解し、GISマップに表示されるデータをよりよく理解することができます。公共エリアでの夜間の低照度は、安全上の懸念事項になる可能性があります。大人の付き添いで、夜に出かけて光の測定値を収集し、さらに分析することができます。
2)GISの視覚化と分析
フィールドに収集された場所を地図上に視覚化します。空間ポイント補間分析を実行してエリアの光レベルを推定し、その結果を地図に表示します。
3)Windows 10 IoTCoreとAzureIoTHubの使用
GISの視覚化と分析を実行した後、Windows 10 IoTCoreとAzureIoTHubを使用してデータをアップロードおよび配布します。これにより、システムを簡単にスケールアップして、現場の何千ものデータコレクターやデバイスでのデータ管理をサポートできます。
ArduinoGPSデータロガー
次のビデオでは、Arduino UnoGPSデータロガーデバイスの概要と簡単なデモを紹介しています。ソースコードとブレッドボードの図は以下にあります。
コンポーネントに関する詳細情報は次のとおりです。
フォトレジスター
これらのアナログセンサーは光の明るさを測定し、非常に使いやすいです。こちらのソースコードの例を参照してください。アナログ読み取り値は0〜1023と測定されますが、ライトが非常に明るくない限り、ほとんどの読み取り値は200未満になります。デバイスを構築するときは、何が期待できるかがわかるように、いくつかの軽い測定値を試してください。
元。明るい日光は約1000、日中の屋外の日陰は約900、夜の街灯の真下は約170です。
マイクロSDスロット
良い例は、ArduinoIDEの[ファイル]> [例]> [SD]> [データロガー]にあります。
Adafruit Ultimate GPS
使いやすいGPS。こちらの例に従って、GPSライブラリをArduinoIDEにインストールしてください。
衛星修正ステータスLED
水平方向の精度の希釈(HDOP)は、GPSから得られるX、Yの位置精度の測定値です。 HDOP値が低いほど、位置はより正確になります。 GPSに修正がある場合は、緯度と経度の位置とともにHDOP値が返されます。 GPSの精度の希釈について詳しくは、こちらをご覧ください。
- 赤-衛星の修正なし
- 黄色-HDOP> 1.5の衛星修正。
- 緑-HDOP <=1.5による衛星の修正。
バイナリフィーチャタイプのスライドスイッチ
3つのスライドスイッチが基数100-7のバイナリ表現に使用されます。左端のスイッチは2 ^ 2または4を表します。中央のスイッチは2 ^ 1または2を表します。右端のスイッチは2 ^ 0または1を表します。スイッチの状態では、収集される機能のタイプに対応する0〜7の10進数が示されます。理想的には、Arduino GPSデータロガーを使用している人は、コードの意味を理解しているでしょう。
例:
OFF OFF OFF =0 0 0 =0 =ライトセンサーの読み取りOFFOFF ON =0 0 1 =1 =パークベンチOFFON OFF =0 1 0 =2 =RockOFF ON ON =0 1 1 =3 =ガベージCanON OFF OFF =1 0 0 =4 =TreeON OFF ON =1 0 1 =5 =PayphoneON ON OFF =1 1 0 =6 =LamppostON ON ON =1 1 1 =7 =噴水
ボタン
ボタンが押されるたびに、デバイスはmicroSDカードのdatalog.csvにコンマ区切り値(CSV)テキストの行を追加します。
データの形式は次のとおりです。
LATITUDE、LONGITUDE、LIGHT_VALUE、FEATURE_TYPE
- LATITUDEとLONGITUDE GPSから来ます。
- LIGHT_VALUE フォトレジスタからのアナログ読み取りです。
- FEATURE_TYPE は、上記の3つのバイナリスイッチのオン/オフ設定に応じた0〜7の値です。
CSVデータの例:
40.77221、-73.97392,105,540.77139、-73.97394,60,140.77051、-73.97460,150,640.77225、-73.97650,25,340.77171、-73.97462,43,240.77283、-73.975033,54,1
LCDディスプレイがありませんか?
複数のLEDを1602LCD画面といくつかのボタンに置き換えることができたかもしれませんが、問題がありました。
- GPS、microSDカードスロット、および1602 LCDのコードがあると、コンパイルされてArduino Unoにデプロイされますが、microSDカードスロットは安定していませんでした。 LCDを取り外すと、microSDカードスロットが安定したため、十分なユーザー通知を提供するためにLEDが追加されました。 MEGAなどのより多くのリソースを備えたArduinoデバイスを使用すると、GPSおよびmicroSDカードスロットとともに1602LCDが可能になる可能性があります。
- 9Vバッテリーは、Arduino GPSデータロガーには便利ですが、1602LCDディスプレイに電力を供給しているときはバッテリーが長持ちしません。それは重要なコンポーネントではなかったので、それは行かなければなりませんでした。
GISの視覚化と分析
GPSポイントの視覚化
GISデータをCSV形式で保持することは素晴らしいことですが、地図上に表示されない限り、あまり役に立ちません。 Arduino GPSデータロガーからmicroSDカードを取り出し、Google EarthProfessionalがインストールされているWindows10コンピューターに挿入します。インストールとライセンスの手順については、こちらをご覧ください。テキストファイルをmicroSDカードからコンピューターにコピーし、テキストエディターで開きます。次の行をテキストファイルの上部に列見出しとして追加し、.CSVファイルとして保存します。
LATITUDE、LONGITUDE、LIGHT_VALUE、FEATURE_TYPE
Google Earth Professionalを使用して、[ファイル]メニューに移動し、[インポート...]を選択します。.CSVファイルを参照してインポートします。オプションを確認して、さまざまな機能タイプを表すアイコンのさまざまなマップスタイルを作成し、Google EarthProfessionalでポイントの場所を表示します。 GoogleEarthのProfessionalバージョンを使用する必要があります。通常のバージョンのGoogleEarthには、.CSVファイルをインポートする機能がありません。
<図>Quantum GIS(QGIS)を使用した空間分析
QGISは人気のある無料のオープンソースGISであり、インストーラーとチュートリアルはここから入手できます。 QGISを使用すると、GPS位置の光センサー属性の空間分析を実行して、公園などの公共エリアで夜間に十分な照明と不十分な照明の領域を特定できます。
ステップ1-境界、ウォーキングトレイル、および照明が不十分であると評価されているエリアに関するその他の関連情報を読み込みます。
<図>ステップ2-GPSデータロガーからの.CSVファイルからQGISマップにポイントをロードします。ライトの値を視覚的に確認できるように、ポイントシンボルとラベルを適用します。
<図>ポイントには光センサーの値が表示されるため、明るい場所(青)と暗い場所(赤)を確認できます。より広い領域を分析しようとする場合、ポイントデータのみを表示するだけでは不十分です。
ステップ3-ポイントデータに対して補間を実行して、ポイントの周囲およびポイント間の領域をよりよく理解します。内挿は、特定の場所のデータがあり、既知の場所間の値を推定する場合に使用されます。補間の詳細については、こちらをご覧ください。
<図>補間により、公園内の光の値をより正確に把握できます。この分析は、既知の場所でより多くの光センサーの読み取り値を提供することで改善できます。
ステップ4-より多くの光センサーの読み取り値を収集し、QGISにロードします。
<図>ステップ5-より大きなデータセットで補間を再実行します。
<図>2番目の補間は、最初の補間と同様のパターンを示していますが、ポイントが追加されているため、より詳細になっていることがわかります。
Windows 10 IoTCoreとAzureIoTHubを使用します。
スケールアップ
Arduino GPSデータロガーは、センサー情報をmicroSDカードに記録できる安価でシンプルなデバイスです。これらのデバイスは、情報を収集するために地理的に広く分散させることができます。これらのデバイスからの情報を管理することは、そうするためのシステムを設計する必要がある場合、困難な作業になる可能性があります。
メッセージングシステムの基盤としてWindows10 IoTCoreとAzureIoT Hubを使用することで、デバイスの数を、情報を提供する数千のデバイスに簡単にスケールアップできます。
最初にこれらの例を試してください
先に進む前に、「Azure IoT Hub for.NET入門」チュートリアルに従うことを強くお勧めします。入門チュートリアルでは、Azureトライアルアカウントを作成し、Azure IoT Hubをセットアップし、IoTHubメッセージを送受信できるコアサンプルを開発する手順を説明します。
また、Azure IoT Hubデバイスエクスプローラーをダウンロードして、Azure IoTHubに接続しているWindows10 IoTCoreデバイスを簡単に管理します。ここからソースやインストーラーをダウンロードします。
Raspberry Pi2上のWindows10IOTコア
Windows 10開発マシンを使用して、Raspberry Pi2用のWindows10 IoT Coreをダウンロードし、Windows IoT ImageHelperを使用してmicoSDカードをフラッシュします。
microSDカードをRaspberryPi 2にマウントし、イーサネットに接続して、起動時に開発マシンのWindows IoT CoreWatcherに表示されていることを確認します。
下の図に示すように、ブレッドボードのボタンを接続します。このページの下部にある回路図を参照してください。次のソースコードへのリンクもこのページの下部にあります。
<図>データアップロード用のユニバーサルWindowsアプリケーション
Windows10コンピューターでVisualStudio 2015を起動し、[ファイル]> [新規]> [プロジェクト]を選択します。ユニバーサルWindowsアプリケーション用の空白のアプリテンプレートを選択します。新しいプロジェクトIoTHubClientSendEventを呼び出します。 Nugetを使用して、Microsoft.Azure.Devices.ClientとNewtonsoft.Jsonを取り込みます。また、UWP用のWindows IoT拡張機能のリファレンスを追加して、RaspberryPi2のGPIOにアクセスできるようにします。
Visual Studioの準備ができたら、Mainpage.xaml.csページの上部に次のusingステートメントを追加して、Azureと通信し、GPIOピンとインターフェイスするために必要なライブラリを取り込みます。
using Windows.Devices.Gpio; using Newtonsoft.Json; using Microsoft.Azure.Devices.Client; using System.Text;
次の変数と定数をMainPageクラスに追加します。 deviceId値は、Azure IoTHubデバイスエクスプローラーで構成されたデバイスの名前である必要があります。
private const int buttonPin =6; private GpioPin buttonGPIO; static DeviceClient deviceClient; static string deviceId ="MakerChallengeDevice2"; static string uploadFile ="data.csv";
JSONシリアル化用のevDataクラスを追加し、MainPageクラスにも追加します。
class evData {public string id {get;セットする; } public string data {get;セットする; }}
これらの2行をMainPage関数に追加します。
の値を取得します上記のAzureIoTHubデバイスエクスプローラーからのDEVICE_CONNECTION_STRING。
deviceClient =DeviceClient.CreateFromConnectionString( "DEVICE_CONNECTION_STRING"、TransportType.Http1); initGPIO();
GPIOを初期化する関数を追加します
private void initGPIO(){var gpio =GpioController.GetDefault(); buttonGPIO =gpio.OpenPin(buttonPin); //入力プルアップ抵抗がサポートされているかどうかを確認しますif(buttonGPIO.IsDriveModeSupported(GpioPinDriveMode.InputPullUp))buttonGPIO.SetDriveMode(GpioPinDriveMode.InputPullUp); else buttonGPIO.SetDriveMode(GpioPinDriveMode.Input); //デバウンスタイムアウトを設定して、ボタンを押したボタンからのスイッチバウンスノイズを除外しますGPIO.DebounceTimeout =TimeSpan.FromMilliseconds(50); // ValueChangedイベントに登録して、ボタンが押されたときにbuttonPin_ValueChanged //関数が呼び出されるようにしますbuttonGPIO.ValueChanged + =buttonPin_ValueChanged; }
次に、ボタンクリックハンドラーを呼び出す関数を追加します。
private void buttonPin_ValueChanged(GpioPin sender、GpioPinValueChangedEventArgs e){//ボタンが押されたときにメッセージを送信するif(e.Edge ==GpioPinEdge.FallingEdge){sendMessageToIOTHub(); }}
実際のsendMessagetoIOTHub()関数を追加して、Azure IoTHubにメッセージを送信します。
private static async void sendMessageToIOTHub(){string myString; var msg =new evData(); if(File.Exists(uploadFile)){myString =System.IO.File.ReadAllText(uploadFile); } else {myString ="チェックインするだけです!!"; } msg.id =deviceId; msg.data =myString; var messageString =JsonConvert.SerializeObject(msg); var message =new Message(Encoding.ASCII.GetBytes(messageString)); deviceClient.SendEventAsync(message);を待ちます。 }
デフォルトのDebugx86のソリューションをコンパイルして、動作することを確認します。次に、ターゲットをRelease ARMに変更し、RemoteMachineを選択します。
<図>Windows 10 IOT Coreデバイスがネットワーク上にある場合、Visual Studio 2015はそれを認識し、展開ターゲットとして設定できるようにします。
クイックヒント:
アプリケーションをWindowsIOT Coreにデプロイする前に、プロジェクトを右クリックしてプロパティを選択します。 [アプリケーション]パネルで、[パッケージマニフェスト]ボタンをクリックします。 [パッケージ]タブをクリックし、パッケージ名を特定の名前に変更します(例:IoTHubClientSendEvent)。これを行わないと、Windows 10 IOT CoreWebインターフェイスでアプリケーションを識別することが困難になります。
次に、[ビルド]メニューに移動し、[ソリューションの展開]を選択します。展開が完了したら、Windows IOT CoreWatcherでWindows10 IOTCoreデバイスを見つけます。行を右クリックして、[ここでWebブラウザ]を選択します。ローカル管理者ユーザーでログインし、左側の[アプリ]リンクをクリックします。 [インストール済みアプリ]ドロップダウンからデプロイしたばかりのアプリケーションの名前を選択し、[開始]をクリックします。
<図>とりあえずこれを残して、IoTハブを監視するアプリケーションを開発しましょう。
AzureIOTハブからメッセージを受信するユニバーサルWindowsアプリケーション
Windows10でVisualStudio 2015を起動し、新しいC#Windowsコンソールアプリケーションを作成します。プロジェクトに IoTEventHubReceiver という名前を付けます 。 Nugetを使用して、 WindowsAzure.ServiceBus を追加します および Newtonsoft.Json 。
Program.csファイルの先頭に次のusingステートメントを追加します。
using System.IO; using System.Threading; using Newtonsoft.Json; using Microsoft.ServiceBus.Messaging;
Azure IoTHubから受信した後に逆シリアル化されるJSONデータのクラスをIoTEventHubReceiverクラスに追加します。
class evData {public string id {get;セットする; } public string data {get;セットする; }}
Azure IoTHubからメッセージを受信するための変数をいくつか追加します。 Azure IoTHubデバイスマネージャーからIOT_HUB_CONNECTION_STRINGの値を取得します。
static string connectionString ="IOT_HUB_CONNECTION_STRING"; static string iotHubD2cEndpoint ="messages / events"; static EventHubClient eventHubClient;
これらの2行をmain()関数に追加して、EventHubClientを作成し、メッセージの受信を開始します。
eventHubClient =EventHubClient.CreateFromConnectionString(connectionString、iotHubD2cEndpoint); SynchMessages();
最後に、SynchMessages()関数を追加して連続ループを設定し、ReceiveMessagesを追加してメッセージを受信してディスクに保存します。
private static async void SynchMessages(){while(true){var d2cPartitions =eventHubClient.GetRuntimeInformation()。PartitionIds; foreach(d2cPartitionsの文字列パーティション){ReceiveMessagesFromDeviceAsync(partition); }}} private async static Task ReceiveMessagesFromDeviceAsync(string partition){var eventHubReceiver =eventHubClient.GetDefaultConsumerGroup()。CreateReceiver(partition、DateTime.UtcNow); while(true){EventData eventData =await eventHubReceiver.ReceiveAsync(); if(eventData ==null)続行;文字列データ=Encoding.UTF8.GetString(eventData.GetBytes()); evData d =JsonConvert.DeserializeObject (data); StreamWriter writer =new StreamWriter( "c:\\ gps \\ download \\" + d.id + "。" + DateTime.Now.Year + "。" + DateTime.Now.Month + "。" + DateTime.Now .Day + "。" + DateTime.Now.Hour + "。" + DateTime.Now.Minute + "。" + DateTime.Now.Second + ".csv"); writer.Write(d.data); writer.Close(); Console.WriteLine(string.Format( "{0}から受信したメッセージ。\ n {1}"、d.id、d.data)); }}
開発ワークステーションで、受信したメッセージを保存するための「c:\ gps \ download」フォルダを作成します。
アプリケーションを実行してAzureIoTHubメッセージを送受信する
IoTEventHubReceiver を開始します 開発ワークステーションでプログラムを実行し、コンソール画面が表示されるのを待ちます。次に、Windows 10 IoTCoreと IoTHubClientSendEvent を実行しているRaspberryPi2のGPIOに接続されているボタンを押します。 プログラム。ボタンを押すと、「チェックインするだけです!」というメッセージが送信されます。 AzureIoTイベントハブへのテキスト。メッセージを受信すると、開発マシンのコンソールに次のメッセージが表示されます。
MakerChallengeDevice2から受信したメッセージ。チェックインするだけです!
テキストファイルの内容をメッセージとして送信することもできます。これは、テキストが256KB未満である限り、Azure IotHubの現在の最大メッセージサイズであるためです。 sendMessageToIOTHub()を参照してください 上記の関数を使用して、ファイルがどのように読み取られてシリアル化されるかを確認し、 ReceiveMessagesFromDeviceAsync()を確認してください。 上記の関数を使用して、メッセージがどのように逆シリアル化され、ファイルに書き込まれるかを確認します。
現在、Windows 10 IoT Coreは、コードを介した絶対パスへのファイルアクセスを許可していませんが、多くのトラブルシューティングを行った結果、実行可能ファイルと同じディレクトリにあるファイルを参照できることがわかりました。通常、これはベストプラクティスではありませんが、機能します。テキストファイルをアプリフォルダーに配置するには、Windows 10 IoT Core Watcherでデバイスを右クリックし、[ネットワーク共有を開く]を選択します。ローカル管理者ユーザーで認証し、以下を参照します:
c $ \ Data \ Users \ DefaultAccount \ AppxLayouts
デプロイされたアプリケーションの名前が付いたフォルダーを探し、実行可能ファイルで読み取ることができるテキストファイルをそのフォルダーに配置します。この例では、テキストファイルの名前を data.csv にする必要があります。 256KB未満である必要があります。良いサンプルは、緯度、経度、光センサーの読み取り値、および機能タイプをリストしたCSVファイルです。 Raspberry Pi2 GPIOに接続されているボタンをクリックすると、コンソールに次のように表示されます。
MakerChallengeDevice2.LAT、LNG、LT、TYP45.45926、-110.57361,45,645.78546、-110.02487,156,3から受信したメッセージ
ファイルアップロードの拡張-「AzureIoTHub for .NETの使用を開始する」の例に従うと、「次の手順」セクションにファイルをAzure BlobStorageにアップロードする例があります。
まとめ
このプロジェクトは、情報を記録し、収集されたデータを分析し、クラウドを使用して収集された情報を管理するためのシンプルなArduinoGPSデータロガーを作成する方法を示しています。このプロジェクトには、次のような多くの拡張ポイントがあります。
- ArduinoGPSデータロガーにさまざまなセンサータイプからの情報を記録します。
- WIFI、Bluetooth、またはCellularを使用して、ArduinoデバイスからAzureに情報を直接アップロードします。
- さまざまなタイプの空間分析を実行して、環境に関する決定を下すための準備を整えます。
- 生の情報または分析された情報を表示するためのマッピングWebアプリケーションを開発します。
- Azure Stream AnalysticsのEventProcessorsを使用して、IoTHubが受信したデータに基づいて処理します。
コード
ArduinoGPSデータロガー
ArduinoGPSデータロガーのスケッチと配線図。https://github.com/ShawnCruise/ArduinoGPSDataLoggerAzureIoTハブの例
Windows 10 IoTCoreにデプロイしてAzureIotHubにメッセージを送信するユニバーサルWindowsアプリケーションhttps://github.com/ShawnCruise/AzureIotHubExampleAzure SDK
ここからAzureIoTデバイスエクスプローラーを入手します。https://github.com/Azure/azure-iot-sdks/blob/master/tools/DeviceExplorer/doc/how_to_use_device_explorer.mdWindows 10IoTコアサンプル
Windows 10 IoTCoreにデプロイするサンプル。https://github.com/ms-iot/samples 回路図
GPSDataLogger.fzz RPi2%20IOT%20Core.fzz 製造プロセス