The “internet of things” (IoT) is simple: everyday objects that have internet connectivity and sensors that can gather, transmit and receive information. But why does this ubiquitous functionality affect you as an Android developer?
Just as smartphones are being built with more and more sensors - for everything like movement, sound, temperature and touch - so the devices around your home will slowly begin to have the same. Soon, your fridge may have a barcode scanner so it knows when you run out of milk. It could then notify your car, which could in turn remind you if you are near a supermarket to pick up some semi-skimmed.
Granted, we've been talking about commercial ubiquitous computing for over ten years now but with more and more big companies getting involved, the range and choice of developer-friendly kit out there is vast. The barriers to entry are now low enough that you can pick up a few bits on Amazon and be coding your own omnipotent fridge in no time. (Wondering what you need to get started? I will show you a few choices at the end of this article.)
As an Android developer you are already coding for an IoT enabled device -your smartphone - but why should Android developers start developing the rest of the internet of things?
1- It will affect your job anyway
Android applications don’t do much without external input, they need to talk to things. With more and more devices becoming internet connected, the apps you write will communicate with them. You might think you get away with this because the devices talk to the server and you just obey the server. However, security and performance being high value requirements for mobile, potentially having your Android apps talk to IoT devices on local networks or pairing with them one on one are highly crucial features.
2- Barriers to entry (skills needed) are lower than ever
In the past to get started with the Internet of Things, you’d need knowledge of hardware protocols, networking, and board manipulation, amongst other things. While this knowledge is still valuable, kits now exist built specifically for beginners that aim to remove a lot of barriers. Super early adopters have created communities to support this and there is now a vast array of knowledge, blog posts and videos available on the internet to fall back upon. The IoT kits available (usually a starter board) also come with starter guides and walkthroughs allowing you to create a hello world morse code flashing LED in no time.
3- Early adoption allows you to mould and choose the direction
Understanding a technology early can help you become the 'go to' person at your company, you can have a big impact on the way the company technology is shaped. Early adoption can be hard, but like I said in the last point it’s not super early adoption; this adoption is more in terms of your company (or you can think of it as mastery of your own career), so you still have the internet to reference. Learning the hard way gives you a solid foundation of knowledge to pull from and when the technology evolves and advances you can understand why; because you were there pulling your hair out at those crazy nonsensical (at the time) bugs. You can have a direct impact on the direction and strategy and choice of IoT technologies that are used.
4- Google is doing it!
You know the old adage "You wouldn't jump off a cliff just because everyones doing it" but Google getting into IoT means they believe there is a product space. Google have announced Brillo and Weave - low level technologies for communicating between devices and sensors - in an attempt to offer an standard for IoT. While many manufacturers are building IoT devices with their own protocols and stacks, this can mean devices incapable of communicating with one another. Google is pushing Weave (and Brillo as a platform) to be a standard protocol to allow communication and information sharing across manufacturers. This would mean a unified platform, a better experience for consumer and, hopefully, greater adoption. As a developer, this means a fun, potentially lucrative new product space.
5- You should always be learning
Knowing what's around the corner keeps you on top of your game. Hey! Even if the internet of things doesn't work out you will have learnt something. If the next big thing is Project Ara1 instead, you’ll still be able to apply what you have learnt about dispersed communication in IoT to Ara modules. As a developer, learning something new is never a bad thing and can only make you better at your job.
Now that you are convinced, how do you get started?
First off you need a computer to code, compile, and ship your software to an IoT device. For different IoT devices different computers and operating systems will be the recommended system to use (i.e. Windows, Mac, Linux). In my experience a Linux machine has the most compatibility across IoT solutions.2
Next you need to select your weapon of choice. This is the board you will be working on. It's the underlying hardware that will run your sensors and gather your information. This blog post isn't about comparing these, so below is a list of five possibilities:
- Intel Edison Board
- Brillo C++
- Qualcom Dragon Board
- Brillo C++
- Arduino Board
- Raspberry Pi
- Scratch, Python (many other languages supported)
- BBC Micro
Once you have a board you need to connect it your computer (so you can push code to it). Some boards come with a few built in sensors, but you also need a way of attaching more sensors to the board. The five things you usually need to get started are:
- Power cable
- USB cable
- Breadboard wires
- sensors, LEDs, resistors, buttons
For more reading about board peripherals, what they are, and how they work. I cannot recommend https://learn.sparkfun.com enough it is a great resource for all knowledge hardware related.
This blog post tried to show the potential value in working on IoT and that the entry barrier for Android developers wanting to learn about it is very low. I hope as an Android developer you can see the benefits in understanding and participating in creating hardware and software for the Internet of Things. Go forth and build!
1: Google's modular phone, where you can strap together different modules, i.e. camera, extra storage
2: You don't have to code on Linux, you could just code on your machine and send it to that box to run and build on the connected devices. Virtual Linux machines sometimes work, but you can get yourself into a confusing death spiral when one of your USB devices is only recognised intermittently, this is why I'd recommend a dedicated Linux machine.