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.
Pro přístup na Windows Azure Storage budete potřebovat příslušné klíče pro přístup.
Web Site
Po založení Windows Azure Web Site si uložte Publishing Profile. Použijeme ho pro publikace aplikace z prostředí Webmatrix.
Vytvoření webové aplikace v nástroji Webmatrix
Než začneme programovat, tak je třeba přidat do aplikace knihovny pro Windows Azure Storage.
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.
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.
Přiložené zdrojové kódy jsou maximálně zjednodušené pro lepší pochopení.
Štěpán, @stepanb