Just like pretty much every other tech outlet, IEEE Spectrum has been nattering on for a while now about the coming Internet of Things (IoT). This is the vision of a world where not only our PCs and smartphones are connected to the Internet but where nearly every device that runs on electricity—fridges, scales, lightbulbs—has sensors, a small glob of processing power, and a network connection.
Makers have been building IoT-style gadgets for some time, but it can be quite fiddly to glue together all the required bits of hardware and software. In a bid to make it easier for developers to get their feet wet and start experimenting with the concepts behind the IoT, IBM and ARM have teamed up to create the US $120 Mbed IoT Starter Kit, intended to be “a slick experience…particularly suitable for developers with no specific experience in embedded or web development.”
On the hardware side, the Starter Kit consists of an FRDM-K64F microcontroller and an application shield that fits on top. Pin-compatible with Arduino boards, the FRDM-K64F has an Ethernet interface built in and is based on a chip with an ARM Cortex-M4 core that’s capable of running at up to 120 megahertz (in comparison, the Arduino Mega clocks in at 16 MHz). The application shield is equipped with a temperature sensor, three-axis accelerometer, RGB LED, five-way joystick, two potentiometers, a loudspeaker, and a small 128- by 32-pixel LCD.
On the software side is IBM’s Internet of Things Foundation and its Bluemix service, which lets you build and deploy apps for IoT devices.
Initial setup was as easy as promised. I pushed the FRDM-K64F and application shield together, snapped in a live Ethernet cable, and hooked up a micro-USB cable to my computer to provide power. While the Starter Kit booted up, I navigated to the URL of the IBM Quickstart page. By the time I got there, the application shield announced via its display that it was connected. I called up my Starter Kit’s ID number on the shield’s display, typed the number into the Quickstart page and was presented with a live visualization of sensor and other data streaming from all the shield’s input channels. The whole process—from opening the box to watching data scroll by—took less than 3 minutes (including the time spent fishing around at the bottom of a drawer for the right USB cable), which has to be some kind of Hands On record.
The possibilities inherent in the Starter Kit’s sensors are somewhat limited by the fact that this board is tethered by Ethernet and USB cables—for example, the length of an Ethernet cable sets sharp limits on where you might choose to monitor temperatures.
Consequently, I wanted to go wireless. There’s a socket on the application shield for ZigBee and Wi-Fi daughterboards, but as most of the online examples and documentation assumed an Ethernet connection, I opted for a quick-and-dirty approach. I bought a small Netgear Ethernet to Wi-Fi adapter, set it up to talk to my Wi-Fi router, and plugged the Starter Kit in. As well as being small in size, the Netgear adapter can also run off a USB port. So I dug out a USB battery of the sort used to recharge a smartphone to provide power. A second battery powered the Starter Kit, and I was portable.
IBM’s Bluemix service allows you to do more interesting things with the data coming from the Starter Kit than just watching it make simple charts. After a few minutes perusing the official online tutorial, I had the Starter Kit hooked into IBM’s browser-based Node-RED editor and running the suggested sample program. This reads the temperature sensor and prints different messages depending on whether or not the temperature is above some threshold value. The editor allows you to configure and wire together graphical blocks that represent various input, function, and output nodes . This lets you build complex applications that live in the cloud and that can communicate with IoT devices and things like smartphone apps or online databases.
But things got complicated fast when I tried to move to the next stage: sending commands from the cloud-based program to the Starter Kit. This requires the Starter Kit to be registered with the Internet of Things Foundation in order to get an organization ID, authentication token, and so forth. Once I had these credentials, I had to go to IBM’s code repository, where the default program that runs the Starter Kit lives, paste details into the code, compile the code online, and download the binary file to my MacBook Pro. The Starter Kit’s USB connection doesn’t just provide power; it also allows the kit to look like a flash drive to a computer where binaries can be “dropped off” for installation.
In theory, transferring the updated binary should have taken just a moment of drag and drop, but in practice it resulted only in a cryptic error message. After a bit of head scratching and a helpful e-mail exchange with an engineer at ARM, it was determined that the problem probably lay in something specific to Apple’s USB implementation. So I wandered through the IEEE’s New York City HQ till I found a PC I could commandeer. From there, the binary installed as it should, and I could pick up the output from the newly registered Starter Kit in the Node-RED editor running back on my MacBook Pro. Getting the board to respond to basic commands sent by IBM’s starter “recipe” was a matter of plugging in some more logic blocks and adding an output node, so that the blink rate of an LED on the microcontroller could be controlled by turning a potentiometer on the shield. However, getting all this to work was complicated by the scattered and sometimes inconsistent nature of the available documentation. The Starter Kit has the potential to be an impressive intro to the idea of a world in which digital smarts are seamlessly distributed among the cloud and simple pieces of hardware. All it needs is just a little more polish.
This article originally appeared in print as “A Kit for the Internet of Things.”