Venturing down the IoT Rabbit Hole

The Microsoft Hackathon found us this year tinkering with some IoT-related technologies. Bernd, Bence, Balázs and me also tried to evaluate the reality of the commercially available iOT devices — and found a promising, but somewhat grim landscape.

We tried to bring to life the following four devices in different scenarios:

Samsung Artik 5
* 100 USD
* ARM Cortex A7x2 @ 1GHz
* 512MB LPDDR3 + 4GB eMMC
* WiFi, Bluetooth, Zigbee, Ethernet
* Fedora, Arduino® IDE, C, C++, Java, JavaScript, Python, (Go)

WiPy
* 45 USD
* Texas Instrument CC3200, Cortex-M4 @ 80MHz
* 256kb RAM + 2Mb Flash
* WiFi
* MicroPython

Raspberry Pi 3
* 40 USD
* 1.2GHz 64-bit quad-core ARMv8 CPU
* 1GB RAM
* WiFi, Bluetooth, Bluetooth LE, Ethernet
* proper Linux and what not

Sparkfun Blynk
* 30 USD
* ESP8266
* Unknown memory
* WiFi
* Arduino® IDE, Blynk

The Good

The smoothest learning curve was definitely provided by the WiPy.

WiPy with an infrared distance sensor connected

“When the WiPy boots with the default factory configuration starts in Access Point mode with ssid that starts with: wipy-wlan and key: www.wipy.io. Connect to this network and the WiPy will be reachable at 192.168.1.1. In order to gain access to the interactive prompt, open a telnet session to that IP address on the default port (23). You will be asked for credentials: login: micro and password: python.”

Connecting a sensor and typing the following lines in the prompt will give you instant gratification — and data.

> from machine import Pin, ADC
> import time
> adc = ADC()
> apin = adc.channel(pin=’GP4')
> while True:
… print(apin())
… time.sleep(1)

We also verified that IoT cloud services are abundant (MS, AWS, Samsung Artik, IBM BlueMix et al) and they are providing a good and free playground for the amateur to start out.

The most promising emerging communication technology seems to be LoRa as energy consumption will go down and communication range will go up. Go and add your own endpoint ;)

The bad

Getting serious is still hard given the immaturity of the ecosystems:

  • *khm* patchy documentation is everywhere as most devices are still works-in-progress,
  • setup and discoverability is far from trivial, default settings raise serious security concerns— remember, even the Amazon Dash has to chirp home,
  • talking securely to remote services is hard — the OAuth dance is very outlandish to iOT (you have to have an own, exposed IP, maybe be able to handle web callbacks, even HTTPS),
  • there’s no de-facto communication model (push/pull, broadcast/poll) and developers are not even nudged in either direction with best practices,
  • the current state of the union is that IoT devices have to be considered as ‘dumb’, local sensors and you need a bridge (at least a RasPi) to connect them to the outer world.