IoT Platform Options

Now that we are well into the growth phase of IoT we have a lot of platforms and tools to choose from.  The are many databases for time-series data, many hardware device platforms and bunch of choices for device gateways.  In this post I’m looking at device platforms now that the arrival of the Arduino Yun and Intel Edison have reawakened my interest in the subject.

Looking at what others are saying I found some useful posts:

  • Sparkfun wrote a comparison of the Raspberrry Pi vs. the Edison in which they show how different the platforms are and that both have their merits.
  • Readwrite wrote another that included an Arduino, similarly defending the Edison’s price.
  • Adafruit wrote yet another that included the Arduino Yun (and Gallileo rather than Edison).
  • Documents on the Yun seem do indicate that the two processors can operate independently.
  • An old VMware article on Edison suggests that the two cores can operate independently
  • Another article from LinuxGizmos on Edison suggests that the two cores may be treated separately but introduces a lot of confusion about different versions of Edison.
  • Since then Seeed Studio with Mediatek have released the LinkIT One and (with their marketing) another comparison in which they also included the Beaglebone Black. Seeed’s new platform looks impressive and I plan to review it as soon as I can get hold of one.
  • [add others here when found]

To my mind the most interesting generic feature that has emerged is the ability to support two development environments – arduino-like and linux-like – on the same platform.  This could be very useful in educational situations where fluency in both models is an objective. Importantly, I think that the value of this model extends beyond education into helping to compartmentalise functionalities that have different needs within the same system.

For example, we might have a very low-powered peripheral device that needs to be controlled by bit-level operations.  This could of course be done in a multi-tasking environment with cleverly written drivers.  However a nicer solution would sometimes be to have a small but dedicated real-time process just for this.

So far I have seen demonstrated on Edison:

  • A simple Arduino program using the linux side to do various kinds of networking by means of Arduino library calls.
  • A multi-threaded linux program using Arduino-style buffered I/O via drivers native to the linux environment.

These models are useful but limited by a master-slave relationship.  What if the two sides could cooperate through some form of message passing yet run independently of each other?  I have read hints that such capabilities may be available via libraries for these platforms in the near future.  There are many hints to this in the above references.

As to the Yun and the LinkIT One, I have yet to evaluate.  Anyone else have?

Interim conclusions: this diversity is all good and the right choice will always depend on overall system/ application requirements.  However, if we can have the third model that would greatly increase the practical possibilities.

Watch this space.