Raspberry Piの環境構築は前回やったので、今回は何となくアプリ作成です。
ハードで動き続けるのでちゃんと動いているかわからないためHeatBeatをAzureStorageTableに1分おきに送信するプログラムを作ります。
VisualStudioの環境回りについては環境構築編を参考にしてください。
AzureStorageを利用するのでnugetでStorageクラスの取得が必要です。
PM> Install-Package WindowsAzure.Storage
1、まずはエンティティクラスを作成
{
public HeatbeatEntity()
{
}
public string message { get; set; }
public string TimeStamp { get; set; }
}
2、次にストレージアクセス、メッセージ送信のプログラムを作ります。
public CloudStorageAccount StorageAccount { get; private set; }
public CloudTableClient TableClient { get; private set; }
public clsAzureStorageContoroller(string storagename, string storagekey )
{
StorageAccount = new CloudStorageAccount(new StorageCredentials(storagename, storagekey), useHttps: false);
TableClient = StorageAccount.CreateCloudTableClient();
}
public void doHeartbeat()
{
const string tableName = "HearBeatForIoT";
var table = TableClient.GetTableReference(tableName);
// テーブル作成
var reesut = table.CreateIfNotExistsAsync();
var entity = new HeatbeatEntity()
{
PartitionKey = DateTime.Now.Ticks.ToString("D19"),
RowKey = "HeatBeat",
TimeStamp = DateTime.Now.ToString("yyyyMMdd hhmmss"),
message = "working!!!"
};
// テーブルストレージに追加
var operation = TableOperation.Insert(entity);
var cloudTable = TableClient.GetTableReference(tableName);
var resultexec = cloudTable.ExecuteAsync(operation);
}
3、そしたらStartupTaskでストレージに1分おきにハートビートを送るようにする。
public sealed class StartupTask : IBackgroundTask
{
private string StorageName = "ストレージ名";
private string StorageKey = "ストレージキー";
public void Run(IBackgroundTaskInstance taskInstance)
{
clsAzureStorageContoroller asc = new clsAzureStorageContoroller(StorageName, StorageKey);
while (true)
{
try
{
asc.doHeartbeat();
var temptime = DateTime.Now.AddSeconds(60);
while (true)
{
if(temptime < DateTime.Now)
{
break;
}
}
}
catch
{
//todo
break;
}
finally
{
//todo
}
}
}
}
System.Threading.ThreadがないのでSleepが使えないという罠にはまりました。
なんでないんだろう、Thread.Sleep、非同期前提なのかしら。
VisualStudioからBuildしますが、実行時はARMを選択するようにしてください。
組み込み用のBuildエンジンと解釈してますが、これでやらないとエラーになります。
とりあえず動いているかAzureStorageTableをみて確認します。

転送されていることを確認できました。
これでプログラムが動いているかどうかが判断できます。
次はセンサー系をいじりたいと思います。



コメント