NetduinoGO

Open source nature and community for bringing .Net Micro Framework to a new life !

Yesterday, the biggest manufacturer of .Net Gadgeteer devices announced a bad news to the community: they won’t produce the boards based on it anymore.

To be precise, they won’t abandoned the entire .Net Micro Framework development but “only” all the boards known for the simplicity of developing prototypes avoiding soldering but using simple socket instead.

Of course, I’m speaking about the GHI Electronics.

I have some of their great boards used in a lot of demos and examples on .Net Micro Framework development for the Internet of Things during my sessions around Italy. Today, I can understand their decision: .Net Gadgeteer was created by Microsoft but today there isn’t so much effort on it and the community isn’t so huge for bringing the framework to the next level. In the last years, GHI Electronics was alone in order to support this framework and having it alive. From my point of view, it’s a pity because using .Net Gadgeteer boards, the ideas become reality in a very short time: from the advantage of using socket connection for the hardware to the application development with C# and .Net Micro Framework. The way to a final product is very long … but as starting point it was good.

To this bad news, we can add the silence by SecretLabs about another well-known board in the .Net Micro Framework world: the Netduino.

Netduino was my first love starting from its first version (without Ethernet) to the latest WiFi board. I played a lot with it, learning .Net Micro Framework development, even without the simplicity of hardware connections because I like “flying wires”. Even SecretLabs tried to do something like .Net Gadgeteer with Netduino Go without so much luck (they used a completely different “standard” for that).

The bad news and the silence let me start thinking about the future of the .Net Micro Framework.

Of course, to be precise, the framework life isn’t related to the future of the maker platforms provided by GHI Electronics and SecretLabs, because some companies are designing their own boards for running it.

It was born in the Microsoft research laboratories as the SPOT (Smart Personal Objects Technology) framework presented in the 2002. It became .Net Micro Framework and after some years Microsoft decided to provide it as open source without focusing so much on its development. Developers started to use it but only for hobbystic projects; only few companies decided to start developing real world products.

With the new IoT business, a couple of years ago Microsoft re-started to focus on it showing a lot of demos all around the world (at Build as well) based on .Net Micro Framework devices connected to Azure services (even before IoT Hub but using Service Bus and Event Hub). It seems that today this strong support is ended … Microsoft wants to provide better Cloud experience (the “I” in the IoT business) for all kind of devices without any difference on the running operating system or framework.

It seems to be another bad news for developers who believe in the .Net Micro Framework but fortunately … it’s always open source and the community can change its destiny.

As an open source developers (you know, I work for Red Hat … the company leader on open source) I believe in community projects : I started to write a lot of open sourced code for .Net Micro Framework a bunch of years ago and the community helped me to improve my libraries.

Today, Microsoft is providing few “human” resources to the .Net Micro Framework project hosted on GitHub in order to make the big changes on it and coordinate the community: I agree on that … now the community has the framework in its hands. At same time I know the Microsoft guys who are supporting it … they are great guys … trust me !

I know a lot of great guys who are working on .Net Micro Framework for their commercial products and for this reason I’m confident in the future. I know that the community around it isn’t so huge and it could be a problem for having a platform used as primary choice for embedded development. It’s also true that embedded world (yes ! embedded … not IoT !) is so much heterogeneous and each developer has its preferences: there is space for all of them, from ARM mbed platform to the .Net Micro Framework itself for example.

In the last months the interest about .Net Micro Framework was revamped by the new LILIUM project; to be precise it’s not the new version of the framework which has its own roadmap but a new way to develop in C# and UWP on embedded devices with the power of pre-compiled native code !

In order to define the right way for the community effort, two interesting discussions were opened on GitHub and all the main protagonists are arguing on the objectives and the roadmap: this is the essence of “to be a community”.

The first one is focused on the future of the .Net Micro Framework and its version 5 (today we are at 4.4) and the other one on the differences with LILIUM project; it’s worth for you to follow them both.

Let’s see … the IoT business opened a lot of scenarios … no doors are closed … can the open source nature and the community bring embedded C# development to a new life ?

.Net Micro Framework e regular expressions … “out of range exception” !

Sviluppando la mia libreria per l’acesso al Microsoft Azure Service Bus (event hubs, queues, topics/subscriptions) basata su AMQP (e sulla libreria AMQP .Net Lite) mi sono imbattuto in un bug nel codice delle regular expression nel .Net Micro Framework.

Il bug si è verificato per puro caso, quando mi sono ritrovato con una “connection string” all’interno della quale c’era il campo “SharedAccessSignature” che va valorizzato nel caso in cui utilizziamo la connessione AMQP con CBS (Claim Based Security) ossia quando pubblichiamo su event hubs verso un “publisher” endpoint e con sicurezza basata su un SAS token.

In questo caso, il campo suddetto assume un valore abbastanza lungo, basta vedere la “connection string” nella quale mi sono imbattuto :

"Endpoint=sb://ppatiernoeventhubs.servicebus.windows.net/;SharedAccessSignature=SharedAccessSignature sr=http%3a%2f%2fppatiernoeventhubs.servicebus.windows.net%2fnetmftesteventhub%2fPublishers%2fdevice1&sig=FttwMBQt0T1e1hPQIk0TbRSfuPohbTXAi5L8dPSQzbA%3d&se=1306887634&skn=EventSendKeyName;EntityPath=ppatiernoeventhub;Publisher=device1;TransportType=0";

Per estrarre i campi, ho scritto le seguenti righe di codice :

Regex regex = new Regex("([^=;]+)=([^;]+)");

IDictionary connectionStringParams = new Hashtable();

MatchCollection matches = regex.Matches(connectionString);
foreach (Match match in matches)
{
	connectionStringParams[match.Groups[1].Value] = match.Groups[2].Value;
}

Alla seconda iterazione ossia in corrispondenza del campo “SharedAccessSignature” mi sono ritrovato di fronte ad una OutOfRangeException … dovuta a cosa ?

 regex_netmf

Dallo screenshot si evince che il campo “Length” del match riscontrato ha un valore negativo pari a -80. Come mai ?

Ebbene, il valore del campo “SharedAccessSignature” (il SAS token) ha una lunghezza pari a 208 e facendo una semplice sottrazione 128 – 208 è proprio pari a -80.

Probabilmente nel .Net Micro Framework viene utilizzata una variabile del tipo “signed byte” per contenere tale valore che determina un ovvio overflow; la lunghezza massima di un valore in un match è stata probabilmente fissata a 128.

Purtroppo, fino alla correzione del bug che ho provveduto a segnalare, vi consiglio di evitare matching con valori più lunghi di 128 caratteri !

🙂

Netduino : la nuova “terza” generazione anche con Wi-Fi integrato

Ed ora … posso finalmente scrivere qualcosa !! 🙂

Circa due settimane fa ho ricevuto un bel regalo dalla Secret Labs (grazie a Chris Walker) … la nuova scheda Netduino 3 Wi-Fi !

WP_20150429_22_18_19_ProWP_20150429_22_18_35_Pro

Personalmente, ho iniziato la mia “carriera” con il .Net Micro Framework utilizzando le board Netudino e Netduino Plus (prima e seconda generazione), divertendomi tantissimo nello sviluppo di driver gestiti per i componenti ad esse collegati. Con l’esplosione dell’Internet of Things, ho iniziato a sviluppare la mia libreria M2Mqtt ed a testarla sulla versione della board dotata di connessione Ethernet, ma per quanto riguarda il collegamento con i servizi Azure come il Service Bus (event hubs, queues e topics/subscription) mi sono dovuto fermare a causa di un grosso problema: il mancato supporto per il protocollo SSL/TLS ! (necessario per Azure).

Ufficialmente a partire da ieri (ma poche settimane fa per me) … non abbiamo questo limite ! La “terza” generazione delle board della famiglia Netduino supporta i protocolli sicuri come SSL/TLS e quindi fornisce la possibilità di connettersi a tutti i servizi Microsoft Azure ! 🙂

Per ora, solo la versione Wi-Fi è già disponibile su Amazon qui e la versione Ethernet sarà disponibile nel mese di giugno qui.

L’hardware

Parlando della Netduino 3 Wi-Fi, questa scheda ha un STM32 MCU (microcontrollore a 32 bit) Cortex-M4 a 168Mhz con 2 MB di Flash dual-bank e 256 KB di RAM. Naturalmente, a causa del .Net Micro Framework TinyCLR abbiamo fino a 1408 KB per il nostro codice applicativo (in Flash) e circa 164 KB di RAM disponibile. Per me, si tratta di enormi quantità di memoria per le applicazioni embedded complesse !

netduino3wifi

Abbiamo lo stesso pulsante ed il led come le schede precedenti e tutti i pin, 22 pin digitali e analogici come GPIO, che possono essere utilizzate con le seguenti caratteristiche specifiche :

  • Porte UART
  • Segnali PWM
  • Porte SPI
  • Porte I2C

La grande differenza con le schede precedenti è la presenza di 3 porte GoBus 2.0 e sembra che la Secret Labs stia sviluppando nuovi componenti da connettere ad essi. Se volete sapere che cosa è GoBus, potete approfondire con il seguente articolo : sembra essere una caratteristica simile a .Net Gadgeteer ma ha molteplici differenze.

Il modulo Wi-Fi è una grande caratteristica in più perché è completamente integrato sulla scheda senza la necessità di un dispositivo esterno. Il chip è un TI CC3100 (Texas Instruments), con tutte le certificazioni necessarie e supporta 802.11 b/g  n con SSL/TLS ed i tre livelli di sicurezza: aperto, WEP e WPA2.

Ultima caratteristica ma non meno importante è il connettore microSD (fino a 2 GB) per la memorizzazione dei dati.

Il software

Naturalmente le nuove schede Netduino sono tutti basate sulla più recente versione del .Net Micro Framework (4.3 QFE2-RTM) e tutto il codice è open source: si può trovare il porting per Netduino su GitHub.

Una grande differenza con il passato è il Netduino.IP: il nuovo stack TCP/IP per .Net Micro Framework. Come sappiamo, uno dei grandi problemi del .Net Micro Framework è lo stack di rete che non è molto affidabile. Per questo motivo, Secret Labs ha deciso di iniziare il nuovo progetto di cui sopra con lo sviluppo di uno stack TCP/IP completamente gestito ed avere il pieno controllo su di esso. Naturalmente, questo nuovo “nato” è ancora in Technical Preview e sotto test ogni giorno per migliorare le sue featues e prestazioni. La buona notizia è che ha supporta per le classi standard in System.Net  (Socket, HttpWebRequest, …) per garantire retrocompatibilità ed utilizza solo 4 KB di RAM. Come progetto open source, è disponibile su GitHub per due chip Ethernet: il solito Microchip ENC28J60 e Asix AX88796C.

Per quanto riguarda il supporto Wi-Fi, lo stack TCP/IP per il TI CC3100 è in un altro progetto (che sarà assimilato nel Netduino.IP) disponibile qui. In questo caso, abbiamo il pieno supporto per la classe SslStream per SSL/TLS 1.2. Questo progetto è in fase di sviluppo ed ha alcune alcune limitazioni relative al numero di socket aperte simultaneamente e buffer. Le prestazioni potrebbero essere superiori perché la versione corrente usa l’UART per comunicare con il chip ma il supporto SPI arriverà presto.

Dal punto di vista degli sviluppatori, abbiamo Visual Studio 2013 ma è già pronto il supporto per Visual Studio 2015.

Infinite possibilità

Con questa nuova terza generazione, ora abbiamo molte possibilità nell’ambito dell’Internet of Things con la famiglia delle board Netduino. Il grande vantaggio è l’accesso a tutti i servizi Microsoft Azure come Event Hubs (e tutti gli altri servizi del Service Bus) e di tutti i servizi on-line che hanno bisogno di supporto SSL (le Twitter APIs per esempio). Ho già provato la mia board nelle ultime due settimane ed ho avuto buoni risultati usando la libreria AMQP Net Lite per la connessione al Service Bus e con la mia libreria M2Mqtt con un broker MQTT nell’iinviare e ricevere molteplici messaggi. Tutti i miei test sono correlati al lato client dell’uso della board poichè non concordo nell’avere un server su un dispositivo embedded per motivi di sicurezza, quindi non ho approfondito le funzionalità disponibili per sviluppare un server HTTP(S) a bordo. La scheda con tutti i relativi stack software sembra essere affidabile ma la performance potrebbero essere migliorate. So che Chris lavorerà duramente nei prossimi mesi per fornire nuove funzionalità e miglioramenti per darci un prodotto migliore per collegare le “nostre” cose all’Internet degli oggetti in rete.

IoT per sviluppatori Microsoft

IoTMicrosoftPodcast

Una delle più grandi iniziative del 2014 è stata sicuramente la nascita di DotNetPodcast, podcast completamente in italiano e dedicato alle tecnologie Microsoft. Gli ospiti sono sempre di altissimo livello e ad inizio anno, ho avuto l’onore di poter registrare una puntata, completamente dedicata all’Internet of Things ed allo sviluppo di soluzioni IoT attraverso il .Net Micro Framework. Ringrazio Roberto Albano, Antonio Giglio e Massimo Bonanni per la fiducia !!

Nel corso del podcast, ho cercato di descrivere in maniera semplice cosa sia un sistema embedded e come siamo abituati a convivere con oggetti di questo tipo quotidianamente. Dalle “cose” si arriva all’Internet delle cose ed alla relativa integrazione con i servizi nel cloud. Per poter permettere a tutti gli sviluppatori .Net un approccio “friendly” a questo mondo, Microsoft offre il .Net Micro Framework per il quale abbiamo a disposizioni numerose board di sviluppo : Netduino (Secret Labs) e le board della famiglia FEZ (GHI Electronics). Nel corso della puntata, ho analizzato l’architettura con relativi vantaggi e svantaggi di questo framework e come sia possibile iniziare a sviluppare (in maniera gratuita a meno dell’acquisto dell’hardware) le proprie “cose” da collegare alla rete.

Curiosi ? Non vi resta che ascoltarmi !  (se vi va)

🙂

MQTT OASIS 3.1.1 : supporto ufficiale per M2Mqtt e GnatMQ

oasis_m2mqtt_gnat

Dopo circa un mesetto di lavoro durante il mio tempo libero, è giunto finalmente il momento di rilasciare la nuova versione della libreria M2Mqtt (4.0.0.0) e del corrispondente broker GnatMQ (0.9.3.0 Beta) con il supporto alla specifica MQTT OASIS 3.1.1 (oltre ad una serie di bug fix).

Questa è stata la causa della mia assenza sul blog !

I cambiamenti apportati complessivamente al progetto sono i seguenti :

  • Supporto per entrambe le specifiche, la vecchia 3.1.0 e la nuova OASIS 3.1.1;
  • L’evento MqttMsgDisconnect è esposto solo al broker GnatMQ per poter gestire il messaggio DISCONNECT ricevuto dal client e quindi non è più accessibile dalla classe MqttClient. E’ stato aggiunto il nuovo evento ConnectionClosed che viene sollevato quanto la connessione è chiusa (da uno dei peer). Ovviamente, si tratta di un “breaking change” e ne chiedo scusa …
  • Aggiunta la gestione delle sessioni (con le subscription ed i messaggi in coda con QoS 1 e 2);
  • Il keep alive può essere disabilitato se viene impostato il timeout a zero;
  • Aggiunta la gestione della flag di “session present” nel messaggio di risposta CONNACK con il quale il broker (GnatMQ) avvisa il client che è presente una sua vecchia sessione e che è stata ripristinata (subscription e messaggi in coda);
  • E’ ammesso un client identifier a lunghezza zero. In questo caso il broker (GnatMQ) assegna un client identifier casuale ma è ovvio che non è in grado di gestirne la sessione (il client non è a conoscenza dell’identificativo assegnatogli e non può trasmetterlo al broker in caso di riconnessione);
  • Rimosso il limite di 23 caratteri per il client identifier;
  • E’ possibile impostare la dimensione massima della “inflight queue” in modo che non possano essere inseriti altri messaggi se essa è piena (causa problemi di connessione che non permettono la trasmissione dei pacchetti);
  • Apportati una serie di miglioramenti sul thread di ricezione;
  • Una richiesta di subscription ad un topic può anche essere rifiutata dal broker (GnatMQ) specificando tale errore nel messaggio di SUBACK;

Come sempre ho provveduto ad aggiornare tutti i repositori nei quali potete trovare il mio progetto :

Questo può essere considerato il mio regalo di Natale !

🙂

.Net Micro Framework : rilasciato l’SDK R2 Beta con il supporto a Visual Studio 2013 e lanciato il nuovo sito !

release

Novità, novità … ancora novità !

L’attesa è finita ! Le prime novità della nuova vita del .Net Micro Framework sono state annunciate pubblicamente ieri con il rilascio dell’SDK R2 Beta per la versione 4.3 del framework.

Visual Studio 2013 … ma non solo !

Questa release cambia completamente la modalità di installazione del framework sul proprio PC utilizzando un package VSIX e garantendo il supporto di più versioni di Visual Studio anche con installazione syde by syde. Da tutto ciò scaturisce l’attuale supporto per Visual Studio 2013 (anche in versione Express) !

Il file zip scaricabile dal sito contiene il file MSI per l’installazione del framework e tre file VSIX per aggiungere i project template nelle tre differenti versioni supportate di Visual Studio (2012, 2013 e “14”).

Infatti, il team è andato oltre fornendo un supporto “light” (per una semplice applicazione “Hello World”) anche per la futura versione Visual Studio “14”.

Il sito ha una nuova veste

Altra novità è il completo re-styling del sito ufficiale dedicato al .Net Micro Framework a partire dalla home page. Questo rappresenta solo il primo passo con un futuro arricchimento di contenuti che la Microsoft chiede anche a tutte le persone che volessero presentare un proprio progetto.

website

La parte relativa al forum è stata rimossa, stabilendo di utilizzare CodePlex (attraverso la sezione “Discussions”) come unico punto di riferimento. Tale sezione è stata suddivisa in Application Development, General, Porting e Showcase.

I prossimi passi …

Il team è già al lavoro per i futuri aggiornamenti da includere nella release definitiva. In primo luogo, il miglioramento dello stack TCP/IP a seguito dei numerosi problemi rilevati e segnalati dalla community. Inoltre, saranno risolti i problemi relativi al debug (attualmente molto lento) ed al deploy.

Open source e Community

Come tutti sanno, il .Net Micro Framework è open source da anni ed ora che la Microsoft ha deciso di puntare anche su di esso, la community assume un ruolo sempre più importante nel miglioramento di questo prodotto. Il team di ingegneri che lavora su di esso fa parte della Microsoft Open Technologies e questo evidenzia anche la volontà di lavorare a stretto contatto con tutti gli sviluppatori che creano soluzioni IoT basate su .Net Micro Framework.

In definitiva … il .Net Micro Framework siamo anche noi !

Occhiolino

M2Mqtt e GnatMQ … adesso anche su Windows 8.1 e Windows Phone 8.1 !!

Windows_logo_-_2012 m2mqttpng
gnat

Sembra che io sia stato in vacanza (vista la mancanza di post sul mio blog) ed è la verità !

Nonostante la vacanza, ho proseguito lo sviluppo del progetto M2Mqtt ed oggi ho il piacere di rilasciare la nuova versione 3.6.0.0 con il supporto per WinRT !!

Ho dovuto intervenire soprattutto nei punti di gestione del networking (in WinRT non ci sono le Socket ma gli StreamSocket), dei thread (passaggio da Thread a Task) e della sicurezza ma finalmente il primo client MQTT per tutte le piattaforme .Net, da oggi funziona anche sui tablet dotati di Windows 8.1 e sugli smartphone con Windows Phone 8.1.

Il nuovo progetto, aggiunto in una solution per Visual Studio 2013, è una “portable class library” che ho utilizzato e testato in una Universal App.

La stessa sorte è toccata al “fratello” GnatMQ, giunto alla versione (Beta) 0.9.2.0, grazie al quale abbiamo a disposizione un broker MQTT da eseguire su tablet e smartphone della famiglia Windows 8.1.

Ovviamente ho provveduto ad aggiornare anche il package Nuget aggiungendo gli assemblies per WinRT.

Spero di aver fatto cosa gradita per moltissimi utilizzatori di M2Mqtt che in passato mi hanno richiesto fortemente questo porting !

Sorriso