Intel Edison Lands and Does Not Disappoint
A closer look at the postage stamp-sized platform for plumbing the Internet of Things.
When the Intel Edison prototype was unveiled at CES back in January it caused quite a splash and received a great deal of positive media coverage, with its promise of a tiny SD card form factor that packs a dual-core Pentium class SoC running Linux and equipped with WiFi and Bluetooth.
Since then the SD card form factor has been dropped in favour of one which features a less familiar albeit much more practical higher density connector, but while still retaining a truly compact size and some undeniably impressive specifications:
Dual-core Intel Atom at 500MHz
Intel Quark microcontroller at 100MHz (running the ViperOS RTOS)
WiFi and Bluetooth 4.0
70-pin Hirose DF40 connector with USB, SD, UARTs and GPIOs.
This post takes a first look at the Intel Edison Kit for Arduino, which comprises of an Edison module plus a baseboard which adds Arduino compatibility.
Inside the packaging could be found an Edison module, Arduino baseboard and a small bag of hardware. It was great to see that the mounting holes had been provided on the baseboard — these are all too often omitted with development boards! — and that stand-offs were included.
After the module had been secured in place with two tiny nuts and the spacers affixed to the underside of the baseboard, it was connected up to a laptop via 2x USB cables.
Once the board was plugged in I discovered that my laptop had a new USB storage device providing a volume called “Edison”, along with a new network interface, “usb0”.
Interesting! More on these later...
Compiling and downloading an Arduino sketch
There is an Intel edition of the Arduino IDE that provides support for Edison and also the Galileo board, and installing and running this is just the same as with the original Arduino IDE that is used with AVR and ARM-based Arduino boards.
With the IDE installed it was simply a matter of selecting the correct board and correct serial port (ttyACM0 when using a Linux computer), before selecting the trusty blink example to compile and download.
Upon this completing a second LED illuminated on the board and then started to cycle off and on.
So, now we have a system that is compatible with an Arduino Uno, except that it has only 4 PWM outputs instead of 6. Is this something we should be excited by? Well, perhaps in and of itself, no, but this is only part of the story and, of course, we do also have a full-blown Linux system here.
Logging into Linux and network configuration
You may have wondered why the need for 2x USB connections and the OTG one does simultaneously provide mass storage and a network interface. As it happens the other is connected to a USB-UART bridge and in turn to a UART on the SoC, which is used to provide a console.
Step 5 in the Getting Started guide suggests using the Linux utility, screen, to connect to the UART — you could use pretty much any terminal emulator of choice — in order to next configure WiFi.
Now it looks as though there may be a bug in the documentation, as the configure_edison command didn't seem to understand the --setup option. However, the --wifi option worked for me and I later discovered that running the command without an option would run through setup.
At this point I could ping my Edison from the laptop, but I could not load a web page from it as described in the guide, and it didn't actually look as though a web server was listening on port 80.
The Edison Yocto Linux system uses a package manager called OPKG to maintain the installed software, and so I thought I'd see if I could identify any installed web server software.
From a quick search I didn't spot anything immediately obvious, other than libwebsockets, which amongst other things could be used to create a lightweight web server. However, I could SSH into the Edison from a desktop and, if required, installing a web server should be simple enough.
Of course, if you need network access to your Edison and don't have or don't want to use WiFi, don't forget that there is also a USB network interface that can be configured.
The package manager will allow you to upgrade installed software as new releases are made available via the OPKG repositories. But what about completely re-flashing the device? This is as simple as first downloading the latest Yocto system image and extracting it to the USB storage presented by Edison, before executing “reboot ota” from from the console.
Flashing is often a concern for fear of “bricking” hardware if it does not successfully complete. Fortunately, there is a backup mechanism provided in the form of Device Firmware Update (DFU), whereby you simply install the dfu-utils software (e.g. via apt-get install), before extracting the firmware update locally and then running the flashall.sh script contained therein.
Building the Linux kernel and Linux applications
Image source: www.yoctoproject.org
The Edison Linux system is built using the Yocto build environment, which allows you to create custom Linux systems in a modular manner, with support for handy things such as cross-compilation. Custom kernels and applications are built using this system, which is provided via the Edison SDK that is made available for Linux, Mac and Windows.
For an example of how this used to enable audio and video capture, see a blog post over on Richard Barnett's website.
Intel have provided various libraries, plug-ins and examples to make it easier to write applications for the Internet of Things. I haven't spent a great deal of time looking into these, but from what I can tell at the present time they are roughly split into three groups:
Embedded (e.g. native C/C++)
A library and samples are provided for Arduino development. There a C tutorials, which include some for using the popular MQTT and Zero MQ messaging platforms, along with Intel's own IoT Kit. And a selection of examples are provided for node.js.
It might sound like stating the obvious, but the Edison module is tiny and feels ever more so as you stop for a moment to consider what it provides. And it's clear that a lot of thought and a lot of hard work has gone into creating the platform, with careful attention to processes such as configuration and upgrading, and making it easier for developers to get started.
The words Yocto and Poky may be alien to many and while a minimal Ubuntu or Debian install may at first seem like it would have been a better choice, it really makes sense when you consider that the Yocto environment allows you to build a truly bespoke system that does only what it needs to. It is for this reason that it's favoured by consumer electronics companies, many of which are involved in the work group which develops Poky under the auspices of the Linux Foundation.
As an Arduino the kit is not that compact, nor is it that cheap. And writing applications in the Arduino environment may well not result in the most efficient embedded code. However, a great many people are familiar with the Arduino platform, it is eminently friendly to novices and what it provides here is an on-ramp for a tiny, powerful compute platform.
So, once you have you validated your application via a rapidly developed prototype utilising Arduino shields and breadboarded components, you could perhaps next move on to using a much more compact breakout and perfboard, before taking the plunge and getting a PCB made with a 70-pin Hirose connector. And maybe, one day, a fully custom Atom-based board for mass market.
I must say that so far I'm impressed, even though I haven't actually done anything particularly exciting with the kit yet!
Intel Edison - is availible from RS Components
CommentsAdd a comment
Have just started playing with the Edison breakout board (with the Arduino shield compatibility) and I agree with Andrew that this is a remarkable device.
The Arduino is great for smaller projects and is successful largely because of the brilliant implementation of an easy-to-use yet powerful IDE, with libraries for just about anything. The Raspberry Pi is fun but I've never really seen the point of it - (obviously a lot of people disagree - about 1m at last count!) but it's too power hungry for serious embedded applications and for anything else, why not just use a PC or laptop?
Enter the Edison: I've always wanted a fully capable Linux module running in the order of 50-100mA, with sleep modes and RTC and small size, which also includes WiFi and BT. The Edison seems to really fit the bill. Intel haven't wasted resources implementing a video interface (which has always seemed to me a silly waste of real estate and power on the Raspberry Pi), and stuck to the things which really matter on a serious embedded device - low power while maintaining processor capability, and embedded comms.
The more I look at it the more I see that some serious thinking has gone into making this a very useable device.