Month: March 2014

Welcome to the Internet of Your Things !!

6445.IoYT_thumb_4F254080

Oggi è “comparso” un nuovo sito web dedicato all’Internet of Things da parte della Microsoft che parla di Internet of Your Things per evidenziare che l’IoT può essere realizzato da ciascuno di noi con le proprie “cose” che possiamo interconnettere fra loro attraverso il Cloud.

Sul sito è possibile trovare tutte le informazioni su questo nuovo (o già maturo ?) progetto su cui la Microsoft sta orientando il proprio business utilizzando quanto già di buono ha per il mondo embedded (tutti i sistemi operativi della famiglia Windows Embedded ai quali aggiungerei il .Net Micro Framework) ed unendolo a quanto di potente ha con il Cloud (Microsoft Azure è noto a tutti).

E’ proprio vero che ciò che ha detto il nuovo CEO Satya Nadella nell’intenzione di volere “a cloud for everyone, on every device” per cui il #cloud4device può essere inteso nell’accezione più generale, non solo smartphone e tablet ma device e “cose” che si collegano alla grande rete !

Ci si può iscrivere ad una newsletter che però inizierà il 1° Luglio … forse a partire da quella data … ne vedremo di “cose” belle !!

M2Mqtt : bug fix e nuova versione 3.2.0.0

Se utilizzando la versione 3.1.0.0 vi rendete conto che gli eventi di Connect e Disconnect non sono sollevati … è corretto … non sono gestiti nel client e dovete aggiornare la libreria oppure ignorarli !

Ho rilasciato un aggiornamento della libreria M2Mqtt (versione 3.2.0.0) che mette a posto questa dimenticanza.

A seguito della fusione del codice tra la libreria client M2Mqtt ed il futuro broker GnatMQ ho commesso l’errore di includere la gestione dei messaggi di SUBSCRIBE, UNSUBSCRIBE, CONNECT e DISCONNECT anche nel client (ovviamente senza alcun senso) con i corrispondenti eventi.

L’aggiornamento è disponibile come sempre anche su Nuget ed ho provveduto ad aggiornare anche il corrispondente componente M2Mqtt4CE per Windows Embedded Compact 2013.

M2Mqtt : MQTT per le piattaforme .Net con la nuova versione e sempre più social !

4503.m2mqttpng_thumb_4B412890

Ed anche questa volta arriva puntuale un aggiornamento per la mia libreria M2Mqtt ormai giunta alla versione 3.1.0.0 !

Le novità principali riguardano una migliore gestione del QoS Level 2, alcune proprietà del client esposte all’esterno ma soprattutto il fatto di aver valutato ed aggiunto alcune richieste che mi sono state fatte dagli utilizzatori che ovviamente ringrazio !

Inoltre, in alcune parti del codice sorgente potrete notare una direttiva di compilazione condizionata alla definizione del simbolo BROKER … perchè ? Ho uniformato il codice della libreria M2Mqtt al codice di un broker MQTT che sto sviluppando e che a breve sarà rilasciato in versione beta. Il suo nome è GnatMQ ed il progetto è già pubblicato online sempre su CodePlex e quindi open source. Attenzione che attualmente è ancora una versione in via di sviluppo e non completamente stabile ma il rilascio è imminente !

Oltre ad aggiornare il progetto su CodePlex, ho provveduto ad aggiornare il relativo package su Nuget (che ormai ha superato i 1000 download !), il codice nella Microsoft Gallery ed il progetto M2Mqtt4CE per includere il nuovo componente nelle proprie immagini di Windows Embedded Compact 2013.

L’ultima novità riguarda una libreria sempre più social ! Ho creato l’account twitter ufficiale @M2Mqtt e la pagina Facebook !

Non avete scuse per non poter seguire la sua evoluzione !

Packt Publishing celebra i 2000 titoli !

0116.2000th-Book-Home-Page-Banner_thumb_0F3314AF

Chi segue il mio blog sa che la casa editrice Packt Publishing è stata uno degli sponsor della Microsoft Embedded Conference 2014 tenutasi a Napoli il 15 Febbraio.

Volevo segnalarvi un’interessante promozione che sta tenendo in questi giorni per celebrare i 2000 titoli e che consiste nell’acquisto di un libro per riceverne un altro gratuitamente !

Al seguente link potete trovare tutte le informazioni su questa incredibile offerta !

Windows Embedded Compact 2013 : utilizziamo il componente proprietario M2Mqtt4CE in un’applicazione managed MQTT

Siamo giunti all’ultima puntata di questo tutorial che ci ha guidato attraverso la realizzazione di un componente proprietario (utilizzando la M2Mqtt library come esempio) per Platform Builder e la relativa inclusione nell’immagine di Windows Embedded Compact 2013. In questo ultimo post vedremo in che modo è possibile utilizzare questo componente in un’applicazione managed di esempio eseguendone anche il debugging.

SDK e Application Builder

Quando realizziamo un’immagine di Windows Embedded Compact 2013 che dobbiamo fornire al team di sviluppo software che realizzerà l’applicazione di alto livello per il target device, dobbiamo necessariamente mettere a disposizione anche il relativo SDK. Quest’ultimo contiene tutti gli header files e le librerie statiche che gli sviluppatori potranno utilizzare per la realizzazione di applicazioni in codice nativo, evitando di utilizzare delle API che non abbiamo incluso nella nostra immagine. Tipicamente non avremmo bisogno dell’SDK nel caso applicazioni managed con il .Net Compact Framework ma purtroppo senza alcun SDK installato, Visual Studio 2012 non rende disponibile alcun template per applicazioni basate su Windows Embedded Compact 2013. Tale SDK può essere creato e generato mediante Platform Builder cliccando su SDKs e poi su “Add New SDK”; il sistema di build produrrà un file .MSI da distribuire a chiuque ne abbia bisogno.

6175.SDK_thumb_2576DA7E

Oltre all’SDK, il team di sviluppo ha bisogno di installare Application Builder per Windows Embedded Compact 2013 che è possibile scaricare qui.

Per poter supportare il debugging attraverso Application Builder, è necessario includere il corrispondente componente “Application Builder Debugging Support” del catalog items nell’immagine e che possiamo trovare in Core OS –> Windows Embedded Compact –> Applications and Services Development –> Diagnostics and Debugging Tools.

4431.AppBuilder_01_thumb_59AD9475

Utilizzando questi due strumenti, chi ha il compito di sviluppare le applicazioni per il target device e non il sistema operativo, non ha alcun bisogno di installare Platform Builder.

Sviluppo, distribuzione e debug di un’applicazione managed

Dopo aver installato l’SDK (generato a partire dall’immagine realizzata fino a questo punto del tutorial) ed Application Builder sul PC di sviluppo, avviamo Visual Studio 2012 e selezioniamo il template Visual C# –> Windows Embedded Compact 2013 –> <SDK generato> (nel mio caso VirtualCEPC2013); per il nostro esempio va benissimo una Console Application.

4011.Managed_01_thumb_4F7E8AB9

Aggiungiamo un reference all’assembly M2Mqtt (deve essere lo stesso distribuito con il componente M2Mqtt4CE avendo un Public Key Token) ma impostiamo la proprietà “Copy Local” a False, in modo che esso non sarà distribuito con l’applicazione essendo già incluso nell’immagine del sistema operativo.

8244.Managed_02_thumb_6E578F48

Siamo pronti per scrivere la nostra applicazione che non farà altro che pubblicare periodicamente un messaggio con un dato random su un topic attraverso l’utilizzo del broker Mosquitto da installare su un PC.

static void Main(string[] args)
{
 Console.WriteLine("Welcome to C# on Windows Embedded Systems");

 MqttClient client = new MqttClient(IPAddress.Parse("192.168.1.4"));
 client.Connect("netcfclient");

 Random random = new Random();
 while (true)
 {
 int data = random.Next(10);
 client.Publish("/data", Encoding.ASCII.GetBytes(data.ToString()));
 Thread.Sleep(1000);
 }
}

Avviamo il target device (nel mio caso Virtual PC) e ricaviamone l’indirizzo IP assegnato per impostarlo nelle proprietà del progetto della nostra applicazione per la connessione al Core Connectivity.

5100.Managed_03_thumb_62582FC5

Impostiamo un breakpoint alla prima istruzione ed avviamo l’applicazione; subito dopo il deploy vedremo il debugger funzionare correttamente e permetterci di eseguire l’applicazione step by step direttamente sul target !

1200.Managed_04_thumb_4D693E03

Windows Embedded Compact 2013 : supporto per il debugging di un’applicazione .Net Compact Framework 3.9

Siamo giunti alla quarta puntata di questo tutorial che ha come oggetto lo sviluppo e l’utilizzo di un componente proprietario in un’immagine del sistema operativo Windows Embedded Compact 2013. Nel primo post, abbiamo visto come firmare un assembly compilato per il .Net Compact Framework 3.9 in modo da poterlo registrare nella GAC (Gloabal Assembly Cache); per farlo, abbiamo usato l’assembly della libreria M2Mqtt. Nel secondo post, abbiamo realizzato un componente che sia visibile nel catalog items di Platform Builder e che permetta di includere facilmente tale libreria con tutte le impostazioni necessarie per la registrazione nella GAC. Nel terzo post, abbiamo visto come sia possibile distribuire il proprio componente a terze parti e come sia semplice includerlo nel sistema operativo. A questo punto, il passo successivo consiste nel predisporre l’immagine con alcuni strumenti di debug in vista dell’applicazione di esempio nell’ultimo post.

Il framework Core Connectivity

Una delle principali caratteristiche di Windows Embedded Compact sin dalle prime versioni è quella di poter eseguire il debugging delle applicazioni managed (e non) sviluppate con il .Net Compact Framework direttamente sul target device. Tale potenzialità viene fornita attraverso Core Connectivity, ossia un framework di comunicazione che permette di stabilire una connessione con il target device per poter effettuare debugging (oltre ad un’altra serie di funzionalità).

Tale framework è costituito da una serie di file che possiamo trovare sul PC di sviluppo a seguito dell’installazione di Platform Builder nella seguente cartella :

C:\Program Files\Common Files\microsoft shared\Embedded Tools\CoreCon\11.0\Target\wce800 directory (sottocartelle x86 o armv7 in base al target).

In particolare sono :

  • ConmanClient3.exe : avvia il servizio di connessione sul device;
  • Clientshutdown.exe : arresta il servizio di connessione;
  • CMAccept3.exe : disabilita temporaneamente la sicurezza sul device per permettere la connessione dal PC;
  • DeviceagentTransport.dll, EDbgTL.dll, TcpConnectionA.dll : DLL necessarie alla connessione;

Per poter utilizzare tale infrastruttura, è necessario copiare questi file sul target device ed eseguire prima ConmanClient3.exe (per avviare il servizio) e successivamente CMAccept3.exe (per disabilitare la protezione); da questo momento in poi abbiamo 3 minuti per connetterci al target. Per evitare questo timeout e disabilitare la sicurezza sul sistema, è possibile impostare la seguente chiave di registro :

[HKLM\System]
“CoreConOverrideSecurity”=dword:1

E’ importante ricordarsi di rimuovere questa impostazione nel momento in cui andremo a generare l’immagine per la produzione.

L’inclusione di questo framework nell’immagine del sistema operativo è comparabile all’inclusione di un componente (come visto nei post precedenti) per cui è necessario copiare i file nella release directory (con una custom build action o un file batch), modificare il BIB file (dell’OS Design, BSP o SubProject) e modificare il REG file (se vogliamo aggiungere la chiave che disabilita la sicurezza). Anche in questo caso ci viene in aiuto un componente per Platform Builder già pronto e disponibile online su CodePlex : AutoLaunch for Windows Embedded Compact (CE).

AutoLaunch : includiamo il CoreCon con un click !

AutoLaunch è un componente per Platform Builder, sviluppato da Samuel Phung e David Jones, che permette di includere con un semplice click il framework CoreCon nell’immagine del sistema operativo, occupandosi anche di disabilitare eventualmente la sicurezza con la corrispondente impostazione nel registro di sistema e di avviare anche il servizio di connessione al boot del target device. In questo modo, lo sviluppatore non deve fare assolutamente nulla se non stabilire la connessione del proprio ambiente Visual Studio per avviare il debug della propria applicazione.

Questa è la sua funzionalità principale, il cui scopo primario è però quello di fornire la possibilità di impostare delle applicazioni da lanciare all’avvio anche con un eventuale delay. Infatti, questo componente non contiene esclusivamente files da includere o meno nell’immagine ma è caratterizzato anche da un vero e proprio programma scritto in C++ che esegue l’operazione suddetta.

Come tutti i componenti sviluppati da terze parti per Platform Builder, dopo averlo scaricato dal sito CodePlex è necessario estrarre il suo contenuto nella cartella \WINCE800\3rdParty in modo che esso risulti immediatamente visibile nel catalog items.

0285.AutoLaunch_01_thumb_210BE842

E’ possibile decidere di includere o meno i componenti CoreCon, usando l’item “Autolaunch CoreCon”, in modo che la variabile di ambiente BSP_AUTOLAUNCH_CORECON ad esso associata sia settata ed il BIB file includa i files corrispondenti. Sulla base della medesima variabile di ambiente, il REG file permette di impostare la disabilitazione della sicurezza e l’avvio automatico del servizio di connessione.

1768.AutoLaunch_02_thumb_40511FC6

Le ultime due operazioni da fare per avere un’immagine pronta per il debugging sono :

  • disablitare il KITL (Kernel Indipendent Transport Layer) avendo incluso i componenti CoreCon;
  • includere il componente “Application Builder Debugging Support” del catalog items (in CoreOS –> Windows Embedded Compact –> Applications and Services Development –> Diagnostics and Debugging Tools) necessario per utilizzare l’Application Builder (di cui parleremo nell’ultimo post);

A conclusione di questo post, abbiamo tutto il necessario per poter buildare un’immagine che sia predisposta per il deploy ed il debugging di un’applicazione .Net Compact Framework 3.9 che faccia uso del componente M2Mqtt incluso; vedremo come fare proprio nell’ultimo post di questa serie !

Il componente M2Mqtt4CE : un client MQTT da includere nell’immagine di Windows Embedded Compact 2013

Nel post precedente, utilizzando il tool CEComponentWiz abbiamo creato un componente custom che sia visibile nel catalog items del Platform Builder.

Abbiamo utilizzato l’assembly della libreria M2Mqtt compilata per il .Net Compact Framework 3.9 ed abbiamo generato il componente corrispondente che ho reso pubblicamente disponibile su CodePlex con il nome di M2Mqtt4CE !

M2Mqtt4CE : descrizione del componente

Tale componente può essere utile ad un qualsiasi OEM che debba produrre un’immagine del sistema operativo Windows Embedded Compact 2013 e che abbia direttamente a bordo un client MQTT per .Net Compact Framework 3.9. Supponendo di essere l’OEM, possiamo scaricare il pacchetto M2Mqtt4CE da CodePlex ed estrarre il contenuto nella cartella \WINCE800\3rdParty (come descritto nel file ReadMe.txt allegato).

I file principali che ne fanno parte sono :

  • M2Mqtt.dll (contenuto nella cartella Resources) è l’assembly firmato della libreria M2Mqtt che viene incluso nell’immagine e registrato nella GAC;
  • M2Mqtt.bib è il BIB file che stabilisce l’inclusione del file M2Mqtt.dll (sezione FILES) nell’immagine rinominandolo in GAC_M2Mqtt_v3_0_0_1_cneutral_1.dll per la registrazione nella GAC;
  • M2Mqtt.reg contiene le chiavi di registro necessarie per la registrazione nella GAC dell’assembly firmato GAC_M2Mqtt_v3_0_0_1_cneutral_1.dll;

Inoltre, il file postlink.bat, eseguito dal sistema di build, effettua la copia de file M2Mqtt.dll dalla Resources directory nella release directory, per poi essere rinominato in GAC_M2Mqtt_v3_0_0_1_cneutral_1.dll (attraverso il BIB file) in fase di generazione dell’immagine.

Includiamo M2Mqtt nell’immagine

Apriamo un progetto esistente oppure creiamone uno nuovo utilizzando il Wizard di Visual Studio 2012. Al termine del Wizard, aprendo il catalog items di Platform Builder il componente M2Mqtt sarà visibile in Third Party –> Embedded101 per poter essere incluso con un semplice click !

5466.CEComponentWiz_04_thumb_4C3A99A0

Clicchiamo su di esso ed eseguiamo il build dell’immagine senza dimenticarci di includere anche il .Net Compact Framework, poichè la libreria M2Mqtt è di tipo managed.

Ispezione del file NK.bin generato

Non tutti sanno che utilizzando Visual Studio (sin dalle prime versioni del Platform Builder) possiamo aprire il file NK.bin e vederne il contenuto del file system oltre che del registro di sistema.

0005.NK_files_thumb_7C647514

Nella sezione “files” vediamo il file GAC_M2Mqtt_v3_0_0_1_cneutral_1.dll incluso come file nascosto e di sistema.

4621.NK_registry_thumb_62903EE5

Nella sezione “Registry” vediamo le impostazioni del registro di sistema necessarie per la corretta registrazione nella GAC (come tutti gli altri assembly del .Net Compact Framework). L’assembly è correttamente firmato con un Public Key Token corrispondente.

Nel prossimo post, parleremo di un altro componente della famiglia Embedded101 attraverso il quale fornire uno dei principali strumenti di debugging in un’immagine del sistema operativo (Core Connectivity), in vista dello sviluppo di un’applicazione di esempio che faccia uso del client MQTT.