This post will be a fast guide for people who want to try to build an IoT DIY project. When you enter the IoT world for the first time, the impact can be a little scary. There are so many topics included in the IoT world and different technologies. The IoT is a growing topic in the world and many big players are working on it. It is possible, anyway, experiment by yourself some IoT DIY projects. There are many different IoT definition pointing to several IoT aspects. The basic concept that stands behind is:
IoT world is a smart network of “intelligent” electronic systems, called things, inter-connected that are able to send and receive data
There are several application fields:
- Smart home
- Smart cities
- Connected car
- Industrial applications
and so on. As you can realize, the application field is wide.
First steps with IoT DIY projects
So what do you need to build IoT DIY projects? You should buy a smart object that is able to connect to the internet. If not, you are not building an IoT project. These objects are dev board because you can use them to build your IoT DIY projects. There are several dev boards available in the market with different specification. The first approach might be difficult to select the right one. In my opinion, there are two dev board families that should be considered at the beginning:
- Arduino families
- Raspberry families
Families because there is a different version of Arduino and Raspberry board. Arduino UNO is one of the most famous IoT dev board with Raspberry Pi 2. You can look at the available Arduino board. Raspberry has several dev boards too. While Raspberry has integrated ethernet connection and even WI-FI (in Raspberry Pi 3), Arduino doesn’t have it. In this case, you have to buy an expansion shield like an ethernet shield or wi-fi shield. Recently a new dev board is available called Arduino MKR1000 made for IoT project. I use Arduino Uno and Raspberry Pi 2 model B+and MKR1000 to build IoT project.
Arduino Uno dev board
Arduino UNO is a microcontroller that can be programmed in C/C++. It has an IDE to simplify the development process. Arduino UNO can use an ethernet shield or WI-FI shield so that it can send and receive data. It can be controlled remotely. Arduino UNO is perfect for IoT project based on sensors when the project requirements are sending sensor data to the cloud. An interesting topic to consider is when the smartphone controls remotely Arduino board.
Raspberry Pi board
Raspberry is much more powerful than Arduino Uno and it can be considered like a small computer. Raspberry can implement more complex IoT project. Raspberry can connect to a computer monitor (using HDMI connection). It has, moreover, a bigger internal memory. Raspberry uses Linux-based OS and you can develop app using several programming languages. Python is the most used one. The Raspberry computational power is useful when there is the need to control a set of Arduino boards.
There are other dev boards like Samsung Artik or Intel Galileo suited to implement IoT projects.
What kind of dev board do you use in your project? Let me know commenting the post!. If your IoT project is more focused on electronic side (like sensors, servo etc.) Arduino is the best choice. Use Raspberry when you have to make a more complex IoT project.
All these boards have to be powered using a USB cable or a battery. Regarding batteries this is a very interesting read: the Samsung reality battery, so when powering your boards using a battery make sure its safe and high quality so there is no risk of over heating and exploding.
IoT cloud platforms
One important component in IoT architecture is the IoT cloud platform. When building an IoT system based on sensors, dev board sends data to the cloud platforms. These platforms store data and use it to build charts. An IoT cloud platform is like a PaaS that provides some services useful in IoT ecosystem. These services enable dev boards connecting to remote services (like Twitter, Facebook, etc.) or other service providers. It would be pretty expensive to connect Arduino to a remote service. These platforms make the heavy work. They execute a set of custom rules based on the incoming events from Arduino sensors. These events trigger external action: send a short message, a twitter message and so on. They provide also a set of services that are particularly important in IoT project. Most of the platforms have a free account (with some limitation) that is useful to build an IoT project. Just to name a few of this IoT cloud platforms there is:
and others. You can use these platforms to test your IoT project sending data to them or triggering events that sent to your dev boards. All these platforms work with Arduino and Raspberry Pi.
IoT ecosystem uses several protocols suitable for exchange information between components. Some of these protocols are widely used in other fields like HTTP. This protocol can be used in IoT ecosystem too and it is very useful when you want to integrate IoT components to the rest of the world. Arduino Uno, for example, supports an HTTP Web server so that it handles HTTP connection. Moreover, Raspberry runs an HTTP Web server. Even if HTTP is used, in IoT ecosystem there are some protocols more efficient and suitable to send and receive data. One of them is MQTT protocol (Message Queuing Telemetry Transport). This protocol uses publish/subscriber pattern and it is extremely lightweight protocol. There are libraries that implement this protocol for Arduino and Raspberry. Another interesting protocol is CoAP (Constrained Application Protocol). As the name implies, this protocol is very efficient and it is used in constrained network. It is lightweight and it is meant to be used in very simple devices (like sensors, valves and so on).
This post wanted to give you an overview of IoT ecosystem and how to start building IoT DIY projects. There are infinite IoT DIY projects to develop, your fantasy is your limit. You can build IoT sensor based projects or you can control remotely Arduino with a smartphone. Comment below describing your next IoT project you are developing.