Windows Azure, Windows 8 a Netduino Plus 2

V tomto článku si ukážeme, jak si vytvořit jednoduchý teploměr, který bude teplotu ukládat na Windows Azure a tu pak budeme zobrazovat v pravidelných intervalech na dlaždici Windows Store aplikace.

Windows Azure Web Sites

Nejdříve vytvoříme Windows Azure Web Site, kam budeme ukládat informace a ty pak poskytovat dlaždici Windows Store aplikace.

Datové úložiště

Jako datové úložiště použijeme Windos Azure Data Storage. Teploty budeme ukládat do jedné tabulky, kde jako PartitonKey pro jednoduchost použijeme aktuální datum.

clip_image001

clip_image002

Pro přístup na Windows Azure Storage budete potřebovat příslušné klíče pro přístup.

clip_image003

Web Site

Po založení Windows Azure Web Site si uložte Publishing Profile. Použijeme ho pro publikace aplikace z prostředí Webmatrix.

clip_image004

clip_image005

clip_image006

clip_image007

Vytvoření webové aplikace v nástroji Webmatrix

clip_image008

clip_image009

clip_image010

Než začneme programovat, tak je třeba přidat do aplikace knihovny pro Windows Azure Storage.

clip_image011

Vlastní aplikace je vcelku snadno pochopitelná. Podstatné pro nás je generování šablony pro živou dlaždici. Jedna z možností, jak dlaždici aktualizovat je Periodic notification. Stačí si připravit šablonu pro živou dlaždici, kterou si pak aplikace, resp. systémová služba, stahuje v pravidelných intervalech.

@{

Response.ClearHeaders();

Response.ContentType = "text/xml";

Response.ContentEncoding = System.Text.UTF8Encoding.UTF8;

var temperature = Data.GetLastTemperature();

}

<tile>

<visual>

<binding template="TileSquareBlock">

<text id="1">@temperature.ToString("0.0")</text>

<text id="2">°C</text>

</binding>

</visual>

</tile>

Získání teploty

Pro sběr dat použijeme Netduino Plus 2 s .NET Micro Framework 4.2. Předchozí verze Netduino Plus měla obrovský problém s velikostí volné paměti, pokud jste použili síťovou vrstvu. Původní Netduino Plus mělo cca 30 kB volné RAM pro aplikaci. Nová verze má přes 100 kB RAM a 384 kB paměti pro uložení aplikace. Také máme k dispozici podstatně výkonnější procesor Cortex-M4. Podrobná technická specifikace Netduino Plus 2.

 using System;
using System.Net;
using System.IO;
using System.Net.Sockets;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;

namespace TemperatureLogger
{
    public class Program
    {
        public static void Main()
        {
            AnalogInput temperature = new AnalogInput(AnalogChannels.ANALOG_PIN_A0);

            while (true)
            {

                string url = "https://stepanb.azurewebsites.net/Save.cshtml?t=" + ((temperature.Read() * 78) - 22).ToString();

                using (var request = (HttpWebRequest)WebRequest.Create(url))
                {
                     using (var response = (HttpWebResponse)request.GetResponse())
                     {
                         Debug.Print(response.StatusCode.ToString());    
                     } 
                }

                Thread.Sleep(1000 * 60 * 20);
            }
        }

    }
}

Vlastní měření probíhá jednou za 20 minut. Jak vidíte, tak celý kód je „normální“ .NET, jen pro čtení hodnoty z teplotního senzoru se používá třída specifická pro .NET Micro Framework AnalogInput.

clip_image012

Windows Store aplikace

Windows Store aplikace zobrazuje poslední naměřenou teplotu, ale hlavně nastavuje periodickou aktualizaci dlaždice.

 function setLiveTile(e) {
        var t = document.getElementById("_liveUpdateCommand").winControl;

        var notifications = Windows.UI.Notifications;

        if (t.selected) {
            notifications.TileUpdateManager.createTileUpdaterForApplication().startPeriodicUpdate(
                new Windows.Foundation.Uri("https://stepanb.azurewebsites.net/GetTile.cshtml"),
                notifications.PeriodicUpdateRecurrence.halfHour);
        }
        else {
            notifications.TileUpdateManager.createTileUpdaterForApplication().stopPeriodicUpdate();
        }
    }

Periodické aktualizace slouží k zobrazení obsahu s dlouhou dobou platnosti, který nevyžaduje okamžitou aktualizaci. Aktualizace dlaždice probíhá v pravidelných intervalech. Délku intervalu nastavujete přímo v metodě startPeriodicUpdate společně s URL, kde se nachází šablona dlaždice pro aktualizaci.

clip_image013

Přiložené zdrojové kódy jsou maximálně zjednodušené pro lepší pochopení.

Štěpán, @stepanb

TemperatureLogger.zip