Tuesday, August 1, 2017 IoT platform (2): controlling a Raspberry Pi from a smartphone Android application


- Layout for this exercise:

* This exercise is based in the previous one

1 - Introduction

- The goal of this exercise is to control remotely a red LED connected to a Raspberry Pi device that has been added to the open source IoT platform

- A device token will be generated to control the red LED from a smartphone using the Android application.

2 - Installig WiringPi at the Raspberry Pi

- WiringPi is a PIN based GPIO access library written in C for the BCM2835 used in the Raspberry Pi. It’s released under the GNU LGPLv3 license and is usable from C, C++ and RTB (BASIC) as well as many other languages with suitable wrappers.

- Let's install WiringPi at the Raspberry Pi. First of all, to work with the git-core repository:

- Downloading WiringPi:

- Fetching an updated version:

- All the folders and files have been installed:

- Building the application:

- It is important to notice the NOTE warning that to compile programs it is necessary to add -lwiringPi

- Moving the library wiringPi.h to the folder thinger_client/src:

3 - Writing the program

- The main.cpp program used in this exercise:

- Let's analyze the program.

- Including the libraries:

- Providing parameters to connect to the platform

- According with WiringPi pin numbering scheme the pin GPIO 17 corresponds to 0:

- Starting the connection of the device, passing the already defined parameters:

- The pin GPIO 17 is set as OUTPUT mode:

- The device will take 2 possible input modes: HIGH (LED on) and LOW(LED off):

- Starting the application:

4 - Running the application

- Before running the application, and in order to perform a correct compilation two lines must be modified at the configuration file CMakeLists.txt, indicating that the -lwringPi option is called:

- Running the application, finally the connection is achieved between the Raspberry Pi device and the IoT platform

5 - Controlling the Raspberry Pi device from the IoT platform website

- Signing in the website (see previous exercise), a new device is found. 

- The Boolean input can take two values: 0 (LOW = LED off) and 1 (HIGH = LED on):

- By default the red LED is off, with a value "in":false

- Switching the Boolean button the red LED turns on and the "in":true

- At the last point (7) a video will show the final testing of this exercise.

6 - Controlling the Raspberry Pi device from a smartphone Android application

This Android application allows controlling IoT devices connected to the platform, and can be easily installed in an smartphone from Google Play: 

- In order to use the application a device token is required. Going back again to the web dashboard of the platform, clicking OK:

- A device token is automatically generated. 

Clicking ShowQRCode:

- Now, the QR code is scanned from the smartphone using the application. Once scanned, the application can be used for controlling the Raspberry Pi remotely.

7 - Testing the exercise

- This video shows the successful operation of the exercise:

 IoT platform (1): connecting a Raspberry Pi device to the cloud


- Layout for this exercise:

1 - Setting a account

- is a free and open-source platform for the Internet of Things:

- provides a ready to go scalable cloud infrastructure that can be controlled with an easy to use admin console, or integrated into a business logic with REST API. 

- The entire project is open-source and does not depend on any specific hardware, what avoids the need to select a compatible vendor hardware:

- Signing up for a account, a name, email and password must be provided:

2 - Adding a device

- At first no device is connected:

- Adding a device:

- Some parameters must be entered, like Device Id, description and credentials (the last one can be generated either manually or randomly):

- For accessing the Dashboard just click the words "device dashboard". As expected, no data/output is available at this moment:

3 - Connecting Raspberry Pi 3 to

- Going to the Raspberry Pi command line, let's install some updates and dependencies:

- Compiler for C and C++:

CMake is a cross-platform build system generator:

- libssl-dev package is part of the OpenSSL project's implementation of the SSL and TLS cryptographic protocols for secure communication over the Internet, containing development libraries, header files, and man pages for libssl and libcrypto:

- Finally, downloading the thinger-io application from GitHub:

- Unzipping:

- Renaming the folder Linux-Client-master to thinger_client:

- The folder contents some files and subfolders:

- Inside src there is the main C++ program of the application:

- Editing:

 - The library thinger/thinger.h allows to connect the Raspberry Pi to the IoT Platform:


 - These 3 parameters must be introduced from the account creation at point 2 (Adding a device) of this exercise:

- Eventually, the main.cpp file is like this:

- Let's notice that this application simply adds two numbers and outputs the result

- pson is a variable type that can contain booleans, numbers, floats, strings, or even structured information like in a json document.

- The operator = defines a function that has both input and output. In this case the function takes two different pson parameters. One for input data and another one for output data.

- The pson structure can store values with keys, like any json document. The result provides a value in sum key, that it is translated to json when accessed them from the API.

- Going back one level into the folder path, there is the script

- Giving execution permissions to

- Running the script, finally the connection between the Raspberry Pi device/application and the IoT platform is successful:

4 - Testing and running the application

- After performing previous steps, now the connected device whitelist_rbpi is found at the Console Dashboard:

- Clicking View API two values can be introduced, and clicking Run the sum of the two numbers is displayed:

- Clicking Show query displays the REST API calls done by the console while interacting with the device. These calls can be used and integrated in other programs, like clients in .NET, PHP, Node.JS, C++, C, bash, ...: