Month: June 2013

.Net Micro Framework sul polso ? AGENT smart watch !

Dalla Secret Labs (produttrice della famiglia di board Netduino), un interessantissimo progetto finanziato attraverso Kickstarter : AGENT smart watch, un orologio “intelligente” completamente basato su .Net Micro Framework !

L’obiettivo iniziale di 100.000 $ è stato ampiamente superato raggiungendo addirittura quota 1.000.000 $ !! Ben dieci volte superiore all’obiettivo prefissato ! Ma che cosa promette questo prodotto, la cui distribuzione inizierà alla fine del 2013 per tutti coloro che hanno partecipato al finanziamento (i “backers”) ?

a53b45f08030da177e0d342a1cc16718_large

Managed Runtime

08d97b81a0a897f753d09ad63bbc06d0_large

Come anticipato, l’AGENT è completamente basato sul .Net Micro Framework (versione 4.3) con tutti quelli che sono i vantaggi per gli sviluppatori in codice managed (es. C#) ma soprattutto legati all’ambiente di sviluppo che ovviamente è Visual Studio 2012 !

Hardware : doppio processore, LCD e Sensori

a0eecaf98667f663f94fbdd79ac3de60_large

Poiché le applicazioni sviluppate per lo smart watch possono richiedere sempre più potenza, la dotazione in termini di processore è quella di un Cortex-M4 a 120 Mhz al quale però è stato affiancato un secondo processore (un AVR, molto più ridotto) in modo tale che il primario possa rimanere in modalità “sleep” per più tempo (quando non necessario), consumando di meno a vantaggio della batteria.

Anche il display LCD di cui è dotato ha un consumo ridottissimo garantendo comunque buone performance nel caso di animazioni veloci e leggibilità all’aperto.

Per quanto riguarda i sensori onboard, lo smart watch è dotato di un accelerometro e di un sensore di luminosità attraverso il quale il display si illumina in maniera più o meno intelligente in base alle condizioni di luce.

Connessione e ricarica

fdb2fb7679c4e17b878172640d852fa9_large

La comunicazione con l’AGENT è possibile attraverso il Bluetooth 4.0 LE, grazie al quale possiamo connetterci ad esso da uno smartphone (Windows Phone 8, Android o iPhone). Esso supporta il profilo SPP (Serial Port Profile), per cui l’applicazione sullo smart watch non usa nient’altro che una porta seriale.

La ricarica è solo ed esclusivamente Wireless attraverso lo standard Qi, per cui si possono utilizzare i caricatori già in commercio per i Nexus o Nokia Lumia ad esempio. Per la durata della batteria sono garantiti 7 giorni con l’utilizzo del Bluetooth e 30 giorni senza (watchface-only); l’AGENT in grado di disabilitare il Bluetooth e passare in modalità “semplice orologio” nel momento in cui la batteria raggiunge circa il 10% di autonomia.

Conclusioni

Un prodotto molto interessante che a differenza di tanti altri smart watch ha puntato su un framework completamente Microsoft per il funzionamento ed il relativo sviluppo. Se volete approfondirne le caratteristiche vi rimando anche al sito ufficiale, dal quale è anche possibile scaricare un AGENT SDK mediante il quale poter iniziare a sviluppare applicazioni da testare su un emulatore dedicato !!

image_17

MQTT e .Net Micro Framework con la board Netduino Plus : un semplice sistema di allarme !

Da quando ho caricato il mio piccolo client MQTT per .Net Framework (Desktop, Compact e Micro) su CodePlex, non ho mai postato un semplice esempio di utilizzo per questioni di tempo.

In questo post, vedremo come sia possibile realizzare un “semplicissimo” sistema di allarme costituito da due board Netduino Plus collegate entrambe in rete; attraverso la prima scheda siamo in grado di rilevare un movimento mediante l’utilizzo di un sensore PIR (Passive InfraRed) mentre la seconda è in grado di ricevere la notifica del rilevamento (in questo caso non fa altro che scriverlo sulla console di Debug). Ovviamente, la seconda scheda potrebbe essere banalmente sostituita da uno smartphone attraverso il quale potremmo essere avvisati dell’intrusione in tempo reale.

Per quanto riguarda il broker, viene utilizzato il semplice RSMB (Really Small Message Broker) della IBM che può essere utilizzato in maniera totalmente gratuita per scopi non commerciali e scaricato qui. Non è necessario installarlo ma, nel caso di Windows, è un semplice eseguibile da lanciare per avere un broker in regola ed in ascolto sulla porta di default MQTT (porta 1883). Nel nostro esempio, quest’ultimo è in esecuzione sul mio PC che funge in un certo senso da server.

La banalissima applicazione in esecuzione sulla board che funge da parte rilevatrice è la seguente :

public class Program
{
   private const string MQTT_PIR_TOPIC = "alarm";
   private const string MQTT_BROKER_ADDRESS = "192.168.1.5";
   private const int MQTT_BROKER_PORT = 1883;

   private static MqttClient mqttClient;

   public static void Main()
   {
       Pir pir = new Pir(Pins.GPIO_PIN_D0);
       pir.Motion += new Pir.MotionEventHandler(pir_Motion);

       mqttClient = new MqttClient(IPAddress.Parse(MQTT_BROKER_ADDRESS));
       mqttClient.MqttMsgPublished += new MqttClient.MqttMsgPublishedEventHandler(mqttClient_MqttMsgPublished);
       mqttClient.Connect("MQTTNetduinoPir");

       Thread.Sleep(Timeout.Infinite);
   }

   static void mqttClient_MqttMsgPublished(object sender, MqttMsgPublishedEventArgs e)
   {
       Debug.Print("Message published [" + e.MessageId + "]");
   }

   static void pir_Motion(object sender, PirEventArgs e)
   {
       Debug.Print("Motion " + e.Motion + " Time " + e.Time);
       if (e.Motion)
           mqttClient.Publish(MQTT_PIR_TOPIC, new byte[] { 0x01 }, MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE);
   }

}

Viene utilizzata la classe Pir per il sensore (vedi uPLibrary su CodePlex), il quale solleva un evento in corrispondenza della rilevazione di un movimento. Attraverso la classe MqttClientviene effettuato il collegamento al broker e viene pubblicato un messaggio sul topic “alarm” per segnalare la rilevazione del sensore.

L’applicazione che riceve le segnalazioni è la seguente :

public class Program
{
    private const string MQTT_PIR_TOPIC = "alarm";
    private const string MQTT_BROKER_ADDRESS = "192.168.1.5";
    private const int MQTT_BROKER_PORT = 1883;

    private static MqttClient mqttClient;

    public static void Main()
    {
        mqttClient = new MqttClient(IPAddress.Parse(MQTT_BROKER_ADDRESS), MQTT_BROKER_PORT);
        mqttClient.MqttMsgPublishReceived += new MqttClient.MqttMsgPublishEventHandler(mqttClient_MqttMsgPublishReceived);

        mqttClient.Connect("MQTTNetduinoReceiver");
        mqttClient.Subscribe(new string[] { MQTT_PIR_TOPIC }, new byte[] { MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE });

        Thread.Sleep(Timeout.Infinite);
    }

    static void mqttClient_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
    {
        if (e.Message[0] == 0x01)
            Debug.Print("Alarm !!");
    }

}

Essa, attraverso l’MqttClient, non fa nient’altro che registrarsi al topic “alarm” attraverso il quale riceve le notifiche tramite un messaggio girato dal mittente attraverso il broker.

Fondamentalmente, abbiamo realizzato un semplicissimo sistema di Push Notification che senza alcun problema potrebbe essere sfruttato attraverso Internet, utilizzando magari un Worker Role di Windows Azure per eseguire il broker, in quanto ad oggi non esiste alcun broker scritto interamente in C#.

ioProgrammo : Facebook Messenger fatto in casa !

2677.4-186g_00BEA3B6

Questo mese su “ioProgrammo” (n. 186, Luglio/Agosto 2013) c’è un articolo dedicato al protocollo MQTT ed ad una sua applicazione reale : Facebook Messenger !

Eh si…il noto sistema di messaggistica di Facebook si basa proprio su questo protocollo utilizzato nell’ambito M2M e quindi molto più orientato alla comunicazione tra device embedded (nel mondo reale) e server centralizzati ma proprio grazie alla sua “leggerezza” trova una buona applicazione su dispositivi specifici come gli smartphone.

Nel corso dell’articolo, dopo una breve introduzione ad MQTT, viene implementato un sistema di messaggistica simile a Facebook Messenger.

Come sempre, non mi stancherò mai di dirlo, non perdetevelo !

Windows Embedded Compact 2013 è tra noi !

Dopo averne sentito parlare per mesi, finalmente Windows Embedded Compact 2013 è arrivato !

Il successore di Windows Embedded Compact 7 promette una serie di migliorie che vi riporto di seguito :

  • Miglioramenti generali relativi al core;
  • Migliorate le performance del file-system (che a mio parere era uno dei punti deboli delle versioni precedenti);
  • Avvio ottimizzato della fase di boot che ha una durata di pochi secondi, eventualmente con una UI ed una serie di driver già attivi;
  • Supporto integrato per Wi-Fi, reti cellulari e Bluetooth;

Ovviamente il sistema operativo supporta le architetture ARM ed x86 e l’ambiente di sviluppo è perfettamente integrato con Visual Studio 2012, nonché è garantita la coesistenza side-by-side di un ambiente precedentemente installato come Visual Studio 2008 (WCE7) o Visual Studio 2005 (WCE6).

Per poter iniziare ad assaporare le nuove caratteristiche, è possibile scaricarlo al seguente link e può essere molto utile seguire i due webinars di Douglas Boling del 18 e 25 Giugno :

Windows Embedded Compact 2013 is for Application Developers too !

Windows Embedded Compact 2013 BSP mysteries revealed !