raspberry pi2 開発編?

スポンサーリンク

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をみて確認します。

refer

転送されていることを確認できました。

これでプログラムが動いているかどうかが判断できます。

次はセンサー系をいじりたいと思います。

コメント