Con l’aumentare dei dispositivi embedded “intelligenti” nel mondo, comincia ad assumere un’importanza sempre maggiore il concetto di Internet Of Things (IoT), un neologismo attraverso il quale si vuole esprimere la capacità che hanno tali dispositivi (brutalmente “le cose”) nel potersi connettere alla rete mondiale Internet e scambiarsi informazioni. In quest’ottica entrano in gioco una serie di piattaforme online che fornisco il servizio di upload e storicizzazione delle informazioni in tempo reale per poi renderle disponibili ad altri dispositivi che ne facciano richiesta. L’architettura a cui si orientano tali piattaforma è ovviamente quella RESTful in cui i dati raggruppati in canali e feeds sono raggiungibili attraverso il concetto di URL.
Una delle principali piattaforme è sicuramente ThingSpeak, per la quale ho implementato un client per il .Net Micro Framework e che ho incluso nella mia libreria uPLibrary (giunta alla versione 1.8.0.0) presente su CodePlex, nel namespace uPLibrary.IoT.ThingSpeak.
La classe principale è ThingSpeakClient, che mette a disposizione l’unico metodoUpdate(string writeApiKey, DataEntry dataEntry) per l’upload di un data entry nel proprio canale dati che abbiamo creato sul sito di ThingSpeak. Il data entry è rappresentato attraverso l’omonima classe DataEntry che permette di specificare i valori dei campi del feed associato al canale, un messaggio di stato, la posizione (latitudine, longitudine ed altezza) nonché un account Twitter con relativo messaggio da “twittare” al caricamento del dato online.
Per quanto riguarda la lettura dei dati, sono disponibili più metodi di read ossiaReadFeeds(), ReadLastFeedEntry(), ReadField() e ReadLastFieldEntry() che forniscono un’ampia scelta e rispettivamente per un intero feed (tutti i campi), l’ultima entry di un feed (tutti i campi), tutti i valori di un campo nel canale ed infine l’ultima entry di uno specifico campo nel canale. Ciascuno di essi ritorna una collection di DataEntry con le informazioni lette dal server online. Inoltre, è disponibile il metodo ReadStatusUpdate()per leggere l’ultimo aggiornamento di stato del canale.
Un esempio di applicazione è banalissimo; immaginando di dover caricare online una qualsiasi grandezza fisica rilevata (es. temperatura, pressione, umidità, …) il codice di esempio potrebbe essere il seguente.
public static void Main()
{
ThingSpeakClient client = new ThingSpeakClient(false);
var data;
DataEntry dataEntry = new DataEntry();
while (true)
{
// rilevamento del dato
// data = ....
dataEntry.Fields[0] = data.ToString();
client.Update("writeApiKey", dataEntry);
Thread.Sleep(15000);
}
}
Altrettanto semplice può considerarsi l’esempio di lettura dei dati dal server.
public static void Main()
{
while (true)
{
ArrayList dataEntries = client.ReadLastFieldEntry(null,
<channeId>, <fieldId>);
// consumo di data entries...
Thread.Sleep(15000);
}
}
Insomma, grazie ad un’iscrizione gratuita su ThingSpeak ed utilizzando il mio client, avrete la possibilità di condividere online tutti i dati letti dai sensori dei vostri prototipi, magari realizzati con Netduino !
Ovviamente, il tutto è disponibile su Codeplex ed è stato anche aggiornato nella Nuget Gallery!