I’ve been informally exploring the whole microcontroller world recently; because I studied and wrote about electronics and hobby robotics in the past I have an ongoing fascination with these kinds of gadgets but have done very little in this area for years.
One of the main reasons for this is that as an experienced developer I am always conscious of where time is consumed when working on software projects and productivity is something that is always of concern to me. I’ve been disinclined to spend time working on a hobby project that combines electronics with software unless the software platform is truly empowering.
Personally I’d like to at least be able to tackle ambitious projects if I wanted to but so much of the microcontroller world is intimately rooted in low level and inflexible languages and libraries. Much of the coding done on microcontrollers is done in C and also sometimes assembly language or C++ (there a few other more obscure ones too).
Now I’ve written large systems and API libraries in C and I’m quite at home tackling large C projects, but it is not a language I would choose today for any work unless it was imposed by some environment or necessity or was due to legacy infrastructure.
I would only be interested in doing stuff with microcontrollers if I felt I could tackle large software projects and could do work that allowed me to combine a desktop PC or tablet with a microcontroller gadget. This latter requirement means that it would be ideal if I could use the same language and programming environment on a desktop and a microcontroller facilitating an almost seamless integration of the two.
Well the .Net Micro Framework now makes this possible – one can write software for a microcontroller system using C# in Visual Studio and upload the code to the device for execution, a large set of support classes are included too for doing Web and TCP/UPD I/O as well as accessing peripheral devices attached to the microcontroller board like GPS cards, WiFi cards, Camera, Motor Controllers, Audio, Compasses, LCD Displays and much more.
Furthermore Microsoft have also created “Gadgeteer” a standard to which device makers can adhere and which enables a multiplicity of devices to physically connect to a microcontroller board using a family of predefined connecter definitions.
Gadgeteer makes it simple to plug a whole range of devices to a Gadgeteer mainboard and because it’s a standard the devices and mainboards can be sourced from different vendors without the almost inevitable headaches of worrying about compatibility.
GHI Electronics offer a fairly broad range of microcontroller boards that support Microsoft’s NETMF and also offer a variety of Gadgeteer boards too. I’m personally quite interested in looking into the desktop <-> Gadgeteer interaction so that an entire microcontroller subsystem can be abstracted and then manipulated from a desktop PC – a kind of “remoting” for Gadgeteer as it were.
Here is a catalog of GHI’s Gadgeteer mainboards and kits – all the hardware one needs to get started with writing real code for real hardware.
GHI offer both mainboards and modules – a “Raptor” mainboard is shown below:
A module is the actual processor and supporting components, this is the small blue board seen above, these can be purchased alone without any Gadgeteer mainboard:
As you can see the mainboard makes thing easier to connect up and is well suited for use in an experimental, laboratory or workbench environment; the modules are intended for use in manufacture systems like ATMs or other sophisticated machinery.
To explore WiFi based communications between a desktop PC and the Raptor mainboard shown above I intend to connect the mainboard to an RS21 WiFi board:
This has a Gadgeteer socket “S” which can be simply connected to one of the three available “S” sockets present on the mainboard.
Microsoft provide support for Gadgeteer in such a way that every Gadgeteer socket is abstracted by a class in the framework, this makes it straightforward to work with complex electronic devices in Visual Studio where a designer allows you to graphically organize the parts of a system.
I’ll be exploring this fascinating subject further in a future post, including the support for device emulation that’s included in the .Net Micro Framework SDK enabling you to get started even without any physical electronic boards…