Ermers Consultancy was presented the following research question:
We have an in-field application which everyday has to report its status to some webserver. Moreover, the current solution uses old hardware. Also, power consumption should be as low as possible. What is the best solution to update our application to modern standards.
We have worked on this project (from a Sioux Project Manager), suggested some solutions which were later carried out by two student groups.
In the solution we considered several options:
Option 1: Use an Android Phone for communication. Use an STM32 based board for modern hardware. (Cerebot from Digilent)
Some details: This software was written for Android 2.0. An interesting task was to create an (USB) interface between Android and the STM32 board, which we did based on the ADB (Android Debug Bridge). The Cerebot has USB Host capabilities, needed for this. The benefit of this solution was that it is cheap and that it can easily communicate with Google services, over secure network connections.
Option 2: Use a .NET based board (GHI Fez Domino) with a USB Internet Dongle.
Some details: The board could be used for all the hardware interfaces (I2C, SPI, Real USB communication with the dongle). All software can be written in an OO language (.NET microframework with C#). The software can easily be tested by the use of Dependency Injection. We created a complete, fully functional framework in .NET. Unfortunately, the communication with the dongle was not stable and moreover, only a few dongles were supported. Therefor we opted for other solutions:
Since this board also has USB Host capabilities we wrote some .NET code to communicate with an Android phone. So this becomes a compareble solution as Option 1 (See Note below).
Also, it is possible to add an ethernet shield. Unfortunately, it turned out that the GHI provided ethernet stack is quite buggy. Also, it didn’t allow for SSL secured connections. Therefor, this option was ruled out.
Option 3: Use a board to your likes and use a Telit Ethernet Controller.
Some details: Although a very easy option to use, it is not possible to do secure connections. Also, it is more expensive.
At one point we received a new board from NXP, with an ARM-Cortex M3 processor. It has a nice online IDE (mbed.com) with a good C++ compiler and an active community. Therefor we ported all software to this board as well. This went without very much hassle. For the end user this board came in too late to be considered.
In the end we opted to implement Option 1 and 3 further. Two groups of students worked on this under my technical supervision. Option 1 turned out to be too difficult (It needed a lot of ICT techniques) but with Option 3 (using the Cerebot board mentioned by Option 1) we designed and implemented a state based protocol which turned out to be successful.
- USB Host / Client.
- C and C++ programming.
- Cooperative mutitasking on Microchip.
- .Net microframework, C#.
- Self defined framework on .NET as device driver interface.
- Android Application coding with Java, Eclipse and Android SDK.
- ADB Bridge.
- IDEs used: Eclipse/Android SDK, Visual Studio, AVRStudio, mBed online IDE.
The experiments with mBed processors, GHI Micro Framework and Microchip processors in conjunction with PC and Android using many possible interfaces (USB, AOA, ADB) can be found at Github.