In my previous blog post, I introduced a proof of concept (PoC) for a room booking application using a Microsoft .NET Gadgeteer device, cloud hosted device management and a central Microsoft Exchange server. This blog post provides more details on the PoC.
I started implementing the client side of the application on the Gadgeteer. The first things you need to do are install the .NET Micro Framework SDK and the Gadgeteer SDK, and ensure the firmware on the mainboard is up to date.
If a room is available for booking the device will show a big green circle and the keyword “FREE”. Touching the green circle shows the home screen which consists of:
- A room description at the top
- A hint about how long the room is available
- Booking capability with two buttons to increment and decrement the booking length (using intervals of half an hour).
If the room is booked, the device shows a big red circle and the keyword “BUSY”, indicating that it is currently unavailable. Clicking on the circle shows for how long the room is booked (e.g. the next free time slot).
The screen shows some limitations of the .NET Micro Framework and the Gadgeteer SDK, respectively. The buttons to increment and decrement the booking length are actually just rectangles with overlaid text. A suitable button object does not exist, and it is not possible to simply resize the font.
The Gadgeteer device communicates with the device management app in the cloud (Microsoft Azure) using REST web services with basic authentication. It exchanges booking details with the cloud service:
- Using GET requests to determine whether the room is currently available/booked and if so for how long
- Booking a room for a specific length using POST requests
The device management app in the cloud is based on the ASP.NET MVC Framework using forms authentication, the Entity Framework, a SQL database and the ASP.NET Web Api for providing the REST web services. The application hosts the bookings and information about the devices. Whenever a device posts a new booking, it is stored in the database. Additionally it is possible to delete a booking.
An example of the use case of booking a room is demonstrated in the following clip.
The PoC does not yet contain a connection and synchronization mechanism to a central server (e.g. a Microsoft Exchange Server) as there are open security issues. However, I would like to summarize my conclusions on whether the .NET Gadgeteer is suitable for a real world professional application.
Some of the advantages are:
- a Gadgeteer setup is quite fast – installing the .NET Micro Framework and the Gadgeteer SDK as well as possibly updating the firmware is all that is needed
- a Gadgeteer device is cheap compared to out of the box solutions available
- it is great fun 🙂
There are also some disadvantages:
- the .NET Micro Framework is very limited due to resource constraints – e.g. there is only one implementation for rounding a number (Math.Round(double a)), so if you want to round a number to two decimal places, constructs like this are needed:
double roundedNumber = Math.Round(valueToRound * 100.0) / 100;
This makes the maintainability harder.
- the memory is limited (e.g. 10 MB RAM for my Hydra Mainboard)
- the network connection using the Ethernet ENC28 Module could be more stable
- the USB Client DP Module did not always supply enough power in order for the application to be stable over longer periods of time
Due to those disadvantages, we have decided to no longer pursue a conference room booking system with a .NET Gadgeteer device. We are now evaluating the possibility of replacing the Gadgeteer with an iPad or an Android tablet using the same architectural setup, however. This is more expensive but in the long run expected to be more maintainable and professional looking.
Another aim of the PoC was to learn as much as possible about the .NET stack. That aim was definitely reached – I have covered the ASP.NET MVC Framework, the Entity Framework, the .NET Micro Framework, the ASP.NET Web Api as well as Microsoft Azure. That is definitely quite a lot of the .NET stack.
So if you want to dive into the world of .NET, I can absolutely recommend just buying a .NET Gadgeteer and start coding. 🙂
Have you had similar experiences with .NET Gadgeteer? What fun projects did you do? Please let me know.