IoT development projects are everywhere, and affordable, advanced technology is the driving force behind this fast-growing phenomenon. Smaller, more accessible hardware and the flexibility to use common programming languages make it easier than ever before to develop these embedded IoT systems. From hobbyists programming their own single-board computers to companies developing devices we can control from our mobile devices, the IoT is rapidly expanding.
Whether you’re creating a quick prototype or an entire IoT-powered business application, here’s a look at the small but incredibly smart technology of IoT development to give you an idea of what hardware and software you’ll need and some skills to look for in an IoT programmer.
Developing an IoT device or distributed IoT service
From a development standpoint, creating IoT devices hinges on embedded programming. There are both software and hardware angles to consider when creating an IoT prototype—the small computer embedded in the object or device, and the software that makes it run. Fortunately, many of these software systems and software development kits (SDKs) now use programming languages and operating systems that engineers already use for mobile and web development, which opens the field up to many more developers.
If you’re creating a fully fledged distributed IoT service—an embedded device, the server-side applications that power it, and an integrated UI (e.g., a mobile app to control your home’s thermostat)—you may even opt to use the Node.js development environment, allowing you to write all aspects of your service in JavaScript, from backend to endpoint device.
You’ll need to:
- Choose your hardware platform (i.e., your processing board)
- Develop the application software
- Create the integrated UI
- Develop the APIs, beacons, web sockets, and procedure calls that enable the high-level communications that occur between devices
IoT development platforms
To get started, you’ll need a platform for the product development team to develop and launch the product on.
One incredibly popular hardware/software platform for creating interactive IoT objects and devices is the Arduino platform, which includes a physical board processor, shields with individual libraries of C code, and an integrated development environment (IDE) for writing, compiling, and uploading code.
Windows has also gotten into the IoT game with Windows 10 IoT Core, an IoT-optimized version of Windows 10 that uses Visual Studio and the Arduino Wiring API. It runs on a few different boards, including Raspberry Pi 2. IBM has launched Quarks IoT tools, another enterprise-grade option.
IoT Hardware & Operating Systems
The range of embedded devices is vast—from small prototypes people develop for fun, to mass-produced technology—and there’s hardware to suit every project. Usually, these small computers are referred to as boards, or chips, and they come with a wide range of price points and processing capabilities.
Hardware components can include low-power boards; single-board processors like the Arduino Uno; field-programmable gate arrays (FPGA); and shields, which are smaller boards that plug into main boards to extend functionality by abstracting specific functions (e.g., GPS, light and heat sensors, or interactive displays). A programmer will specify a board’s inputs and outputs, then create a schematic to determine how these inputs and outputs interact.
Another well-known IoT platform is Raspberry Pi 2, a ”tiny affordable computer” that can house a web server that fits in the palm of your hand. Often shortened to just “RasPi,” it has enough processing power and memory to run Windows 10 IoT Core. RasPi is great for more heavy-duty processing, especially when using the Python programming language.
BeagleBoard is a single-board computer with a Linux-based OS that uses an ARM processor. They’re capable of even more powerful processing than RasPi, and have a price tag to match. Tech giant Intel’s Galileo and Edison boards are other options, both great for larger scale production, and Qualcomm has manufactured an array of enterprise-level IoT technology for cars and cameras to healthcare. Samsung’s ARTIK platform has three circuit boards, with small ones for wearables and a larger 8-processor chip capable of video functionality.
This is just a glimpse at some of the technology that’s out there; an IoT pro can help recommend the kind of power and operating system you’ll need on the hardware side that’s appropriate for your device or prototype.
Embedded eyes and ears: sensor and beacon technology
Beacons embedded within devices allow IoT objects to broadcast information to nearby mobile devices. These low-power sensors with technology like Bluetooth Low Energy (BLE)—the one-way communication from objects to nearby devices—let our mobile phones listen for signals when we’re close to an IoT object. BLE is different from traditional Bluetooth technology in that it’s cheaper, requires less power (one beacon can go three years without a charge), and is ideal for simple applications and quick pops of data, like sending a coupon to a nearby mobile phone.
In 2013, Apple launched iBeacon, a low-power bluetooth sensor that can be embedded in objects and picked up by nearby iOS or Android devices running apps that have been programmed with the Core Location APIs. Another popular BLE beacon is AltBeacon, a free option with a bit more data capacity than iBeacon. While both iBeacon and AltBeacon rely on databases for their functionality, Google’s URIBeacon project delivers URLs (similar to a QR code) rather than packets of information from a database, so it’s easier to update, reconfigure, and has the entire web as its database.
IoT Software & Programming Languages
IoT programming languages used to be unique to embedded systems, but now this software uses more common languages that web developers already know and use. So how do you choose which language to use for your IoT project?
First, embedded systems have a certain set of limitations to consider—low processing power, and smaller amounts of RAM and storage. The most commonly used operating systems for these embedded computers are Linux or UNIX-like OSs like Ubuntu Core or Android. While you may have to decide based on your chosen hardware platform, you also can opt for a language your developer is already familiar with, or decide based on factors like its compatibility with your IoT ecosystem, the size and memory of the code, efficiency requirements, or speed of development.
IoT programming languages range from general-purpose languages like C++ and Java to embedded-specific choices like Google’s Go language or Parasail. Each offers a few advantages and disadvantages. Your developer will be able to advise you which is best, but here’s a quick overview.
- C & C++: The C programming language has its roots in embedded systems—it even got its start for programming telephone switches. It’s pretty ubiquitous, and many programmers know it. C++ is the object-oriented version of C, popular for both the Linux OS and Arduino embedded IoT software systems. Both languages have an advantage because they were designed to be written specifically for the hardware they’re running on, so you can accomplish the fine-tuned coding ideal for embedded systems.
- Java: Where Java has an advantage over C and C++ is that the code is less hardware-specific, making it more portable. It requires libraries to run on different hardware, but once you’ve invested in that code base, you’re all set—it’s the “write once, run anywhere” language.
- Node.js and JavaScript: JavaScript is a great option for IoT. Node.js code can run a complete IoT system, running on both an embedded smart device and the server-side software that’s powering it. It’s an interpreted language, however, making it a better match for more robust embedded systems, like Raspberry Pi. DeviceJS is a JavaScript-based development platform for programming sensors and controlling devices.
- Python: Python has become one of the “go-to” languages in Web development, and its use has spread to the embedded control and IoT world—specifically the Raspberry Pi processor. Python is an interpreted language, which makes it flexible, easy to read, and quick to write. Plus, it’s a powerhouse for data-heavy applications.
- Languages designed for I/O programming include Go from Google, Rust from Mozilla, Forth, and Parasail—a language designed specifically for embedded programming.
- B#: Unlike most of the languages mentioned so far, B# hasn’t been retrofitted for embedded systems, it was designed for them. It’s small and fast, and can run on smaller hardware platforms thanks to its 24k memory size.
IoT security considerations
While the IoT opens up amazing new possibilities, it also opens up new security concerns. Anytime we’re advancing the way we monitor, detect, and track ourselves and the things around us, what we do with the data—and how it’s sent across networks—can get sensitive. That’s why security needs to be incorporated at every stage to keep hackers at bay.
An article in Sophos pointed out security vulnerabilities with Wi-Fi-connected Ring doorbells, noting, “If you’re a programmer, and you’re enabling your latest electronic gadget to join the IoT, remember to think security, even if you never expect that device to be installed on the public-facing internet.”
This means it’s important to take certain programming steps (and avoid certain security shortcuts) like proxies and encryption, to keep hackers from using devices to access a user’s personal network.
Want to dive into the world of possibilities with IoT programming? Read more about the IoT or search for freelance IoT pros on Upwork today.