How sunny is the Blue? (partea a II-a)

Dacă în prima parte a acestui proiect am explicat cum construim un dispozitiv electronic ce măsoară câțiva parametrii asociați cu radiația solară (intensitate luminoasă, index radiații ultraviolete, temperatură ambientală generată) și cum configurăm serviciul Cloud IBM BlueMixTM pentru a putea conecta dispozitivul la acest serviciu, în cadrul părții a doua vom vedea ce alte posibilități interesante oferă platforma cloud.

Configurarea serviciului IBM Watson IoT Platform – Boards and Cards

Cea mai la îndemână facilitate pusă la dispoziție de serviciul IoT IBM Watson este realizarea unui panou de control (dashboard sau board) în care pot fi urmărite în timp real toate informațiile transmise de dispozitivul nostru IoT. La crearea serviciului panoul vine preconfigurat cu 3 secțiuni de supraveghere (boards): Usage Overview – secțiune în care pot fi vizualizate informații legate de cantitatea de informații transferată de dispozitivul IoT către platforma Watson; Device-Centric Analytics – secțiune în care se pot consulta informații legate de proprietățile de bază ale dispozitivului și un istoric al alarmelor generate de aceste (vom vedea imediat într-o secțiune următoare cum definim alarme asociate dispozitivului); Rule-Centric Analytics – similar cu precedenta secțiune dar cu un grad de detaliere mai mare asupra evenimentelor generate de dispozitiv.

2

Bineînțeles, putem crea noi secțiuni de supraveghere (+ Create New Board) în care putem defini afișaje personalizate (+ Add New Card). Pentru dispozitivul nostru vom defini o secțiune pe care o vom denumi DATA și în care vom adăuga 3 afișaje (Cards) – câte unul pentru fiecare dintre parametrii transmiși de dispozitivul nostru: un indicator de tip gauge pentru indexul UV, un  indicator de tip bar chart pentru intensitatea luminoasă și un indicator de tip grafic pentru temperatura ambientală.

3

4

Configurarea unui astfel de afișaj este foarte simplă, trebuie indicate: dispozitivul (în cazul nostru WICED), parametrul dorit pentru afișare (în captura de mai jos Temperature) și tipul de date al parametrului, tipul de afișaj și schema de culoare.

5

Aceste afișaje nu arată istoricul de evoluție al unui parametru ci doar valorile măsurate în timp real. În acest moment platforma nu stochează în nici un fel informațiile transmise de dispozitivul nostru ci doar este capabilă să le afișeze pe măsură ce sunt recepționate.

Configurarea serviciului IBM Watson IoT Platform – Data Storage

Dacă dorim ca informațiile transmise de dispozitivul nostru să fie stocate pentru a putea fi prelucrate ulterior (statistic sau în scopul afișării pe anumite perioade de timp) trebuie să activăm extensia Historical Data Storage. Acest lucru este posibil accesând secțiunea Extension / Historical Data Storage.

6

Această extensie va utiliza baza de date implicită a aplicației create în platforma cloud în lecția anterioară. Datele salvate nu sunt utile direct platformei IBM Watson IoT dar pot fi utilizate de către o aplicație cloud asociată.

7

 

Configurarea serviciului IBM Watson IoT Platform – Definirea de alarme

O altă facilitate utilă oferită de platforma IBM Watson IoT este definirea de alarme asociate datelor recepționate de serviciul IoT. Acestea se definesc în secțiunea Rules. Există două tipuri de alarme Edge Rule și Cloud Rule. Edge Rule este un tip de alarmă ce permite generarea de evenimente către alte aplicații din cloud – un fel de preprocesor de alarme – nu dă naștere la o alarmă propriu-zisă ci trimite mai departe evenimentul. Cloud Rule permite generarea de evenimente imediate: trimiterea unui email, trimiterea evenimentului către IFTTT sau către o aplicație Node-RED. Pentru exemplificare vom defini o alertă de tip Cloud Rule ce va trimite un email de fiecare dată când parametrul temperatură va depăși valoarea de 35oC.

8

9

Astfel, de fiecare când temperatura va depăși valoarea dată vom primi un email de tipul:

10

 

Configurarea unei aplicații Node-RED – postarea de mesaje pe Twitter

În momentul în care am creat aplicația inițială (sundetector – în lecția anterioară), pe lângă baza de date asociată și activarea serviciului Watson, a fost generată și o aplicație implicită Node-RED cu domeniul asociat numeaplicatie.mybluemix.net (în cazul nostru sundetectori.mybluemix.net).

Node-RED este un instrument de programare vizuală destinat sistemelor IoT. Pentru mai multe informații legate de Node-RED puteți consulta și:

Node-RED

https://nodered.org/

What is Node-RED? How can it be used for the Internet of Things?

http://heidloff.net/article/21.01.2015081841NHEAL8.htm

Node RED Programming Guide – Programming the IoT

http://noderedguide.com/

11

Accesând domeniul asociat aplicației Node-RED vom putea utiliza editorul ce ne va permite dezvoltarea aplicației propriu-zise. Aplicația Node-RED poate fi de tip web și atunci domeniul asociat aplicației se va transforma într-un portal web conectat la sistemul nostru IoT. În cazul exemplului de față vom realiza o aplicație ce va prelua datele primite de serviciul Watson și va transmite periodic valoare indexului UV ca postare pe Twitter.

12

Vom șterge toate diagramele predefinite – aplicația conține un flux Node-RED predefinit (o mică aplicație demonstrativă) – și vom realiza următoarea aplicație:

13

în care vom utiliza următoarele următoarele blocuri funcționale:

14

Nod de tip ibmiot ce ne va furniza datele provenite de la serviciul Watson. Trebuie configurat cu tipul și numele dispozitivului IoT.

15

 

16

Nod de tip function ce va extrage valoarea indexului UV din mesajul json transmis de dispozitivul IoT.

17

 

18

Nod de tip rbe ce va lăsa să treacă mai departe fluxul de informații doar dacă indexul UV se modifică – facem acest lucru pentru a nu posta mesaje duplicat pe Twitter.

19

 

20

Nod de tip function ce va contrui textul postării pe Twitter.

21

 

22

Nod de ieșire ce va trasmite datele către Twitter. Trebuie configurat cu credențialele de acces ale unui cont valid Twitter.

23

Nod de ieșire pentru depanarea aplicației. Va afișa în fereastra de debug ieșirile nodurilor conectate la el. Nu este esențial în funcționarea aplicației.

După construirea aplicației și după ce vom activa (Deploy) aplicația vom putea deja să vedem pe Twitter primele postări.

24

Facilitățile platformei Cloud IBM BlueMixTM prezentate în acest proiect acoperă într-o foarte mică măsură funcționalitățile acesteia. Platforma pune la dispoziție limbaje multiple de programare pentru dezvoltarea de aplicații cloud, diverse tipuri de baze de date și o multitudine de servicii conexe extrem de interesante (machine learning, analiză de imagini, analiză lexicală ș.a.m.d.). Sperăm doar să vă fi trezit interesul și în acest sens dăm ca exemplu și:

IBM Bluemix, IoT, and Star Wars Droids

https://youtu.be/_pMG6TL04Q0

A sample project to control BB-8 Droid using Bluemix IoTF and MQTT

https://github.com/shamimshossain/bb8-bluemix

How sunny is the Blue? (partea I)

În cadrul proiectului de față vom prezenta implementarea unui sistem de tip IoT (Internet of Things) ce supraveghează radiațiile solare (intensitate luminoasă, factor radiații UV, temperatură ambientală generată) și utilizează serviciul cloud IBM BlueMixTM. Serviciul IBM BlueMixTM este un serviciu comercial dar care oferă posibilitatea de evaluare pentru o perioadă de 30 de zile sau, pentru studenții și profesorii din unele instituții de învățământ superior, accesul este gratuit. Platforma Cloud IBM BlueMixTM pune la dispoziția utilizatorilor un serviciu IoT specializat și anume IBM Watson IoT Platform. Accesul la acest serviciu face parte din serviciile puse la dispoziție de platforma cloud. Primul pas pentru accesarea acestui serviciu este înregistrarea unui cont trial – spre deosebire de alte servicii similare (Microsoft Azure, Google Cloud Platform sau Amazon Web Services) înregistrarea nu necesită introducerea de informații legate de un card bancar:

Sign up for IBM Bluemix

https://console.ng.bluemix.net/registration/

După înregistrare și conectare la platformă se va naviga în zona de aplicații și se va crea o aplicație nouă (Create Application) de tipul Boilerplates / Internet of Things Platform Starter:

2

Se va alege un nume pentru aplicație (în cadrul lecției se va utiliza numele sundetector dar numele aplicației trebuie să fie unic) și se va da comanda (Create) de alocare de resurse cloud pentru această aplicație nouă.

3

Alocarea de resurse poate dura câteva minute sau zeci de minute. Finalizarea operației este marcată de schimbarea stării aplicației în Running.

4

Pentru a putea conecta dispozitivul la aplicația nou creată trebuie să mergem în Dashboard-ul de administrare a serviciului sundetector-iotf-service (Connect your devices / Launch dashboard). Comanda ne va direcționa către portalul IBM Watson IoT Platform unde vom crea un nou dispozitiv (Devices / Add Device). Nu trebuie să completăm decât tipul dipozitivului (în exemplul nostru Adafruit_Feather) și numele dispozitivului (în exemplul nostru WICED). La finalizarea adăugării noului dispozitiv trebuie să notăm informațiile de autentificare furnizate de platformă pentru a putea să le folosim în programul dispozitivului (Organization ID, Device Type, Device ID, Authentication Method și Authentication Token).

Este posibilă utilizarea platformei IBM Watson IoT Platform și fără autentificare utilizator (fără a înregistra un cont trial pe IBM BlueMixTM), ca și Demo User, dar nu vom utiliza această variantă deoarece nu oferă nici un fel de securitate sau garanție de funcționare a serviciilor – această variantă este denumită Playground (loc de joacă). Dacă se dorește totuși efecturarea unor teste rapide adresa de conectare este:

Play with the IBM Watson IoT Platform dashboard

https://play.internetofthings.ibmcloud.com/dashboard/#/boards/

Pentru mai multe informații despre utilizarea și configurarea serviciului IBM Watson IoT Platform se poate consulta documentația oficială:

Getting started with Watson IoT Platform

https://console.ng.bluemix.net/docs/services/IoT/index.html

Pentru construirea dispozitivului IoT de supraveghere a radiațiilor solare vom utiliza o placă de dezvoltare Adafruit Feather WICED WiFi – cea mai nouă și mai puternică placă WiFi din gama Adafruit Feather ce combină un microcontroler STM32F205RG ARM Cortex M3 ce rulează la 120MHz cu modulul WiFi BCM43362 802.11b/G/N și care poate fi totuși programată cu mediul Arduino IDE.

5

https://www.robofun.ro/wireless/wireless-wifi/adafruit-wiced-wifi-feather-stm32f205-with-broadcom-wiced-wifi

Pentru mai multe informații despre instalarea (procedura de instalare sub mediul Arduino IDE necesită puțină mai multă atenție decât alte plăci Adafruit Feather) și utilizarea plăcii Adafruit Feather WICED WiFi se poate consulta:

Introducing the Adafruit WICED Feather WiFi | Adafruit Learning System

https://learn.adafruit.com/introducing-the-adafruit-wiced-feather-wifi/

Pentru partea de achiziție a parametrilor propuși vom utiliza doi senzori digitali (I2C):

Senzorul de lumină și radiații UV Si1145

6

https://www.robofun.ro/senzori/lumina/si1145-digital-uv-index-ir-sensor

Senzorul de temperatură TMP102

7

https://www.robofun.ro/senzori/vreme/senzor_temperatura_tmp102

Schema de interconectare între senzori și placa de dezvoltare este tipică pentru o magistrală multi-slave I2C:

8

Atenție!!! Conectarea pinului ADD0 la masă (GND), pentru senzorul TMP102, este necesară doar pentru varianta mai veche (cu pini pe două părți), varianta mai nouă (cu toți cei șase pini pe o singură parte) trage acest pin la masă prin intermediul unui contact intern.

Pentru implementarea software vom utiliza două biblioteci externe mediului Arduino IDE:

Arduino MQTT – pentru implementarea protocolului MQTT

https://github.com/256dpi/arduino-mqtt

Adafruit SI1145 – pentru utilizarea senzorului SI1145

https://github.com/adafruit/Adafruit_SI1145_Library

#include <adafruit_feather.h>

AdafruitTCP net;

#include <MQTTClient.h>

MQTTClient client;

#include <Wire.h>

#define tmp102Address 0x48

#include “Adafruit_SI1145.h”

Adafruit_SI1145 uv = Adafruit_SI1145();

#define WLAN_SSID            “……………

#define WLAN_PASS            “……………

Trebuie configurate valorile WLAN_SSID și WLAN_PASS în concordanță cu rețeaua WiFi prin care dispozitivul se va conecta la Internet.

În cadrul secțiunii setup() se va inițializa conexiunea cu platfotma Watson. Procedura client.begin trebuie personalizată cu parametrul Organization ID iar procedura client.connect cu: Organization ID, Device Type, Device ID și Authentication Token.

O inițializare corectă a dispozitivului va afișa în consola serială ceva similar cu următoarea captură de ecran:

9

void setup() {

  Serial.begin(9600);

  while (!Serial) { delay(10); }

  if (! uv.begin()) {

    Serial.println(“Didn’t find Si1145”);

    while (1);  }

  Feather.printVersions();

  while ( !connectAP() )  { delay(500);  }

  Feather.printNetwork();

  client.begin(“OrgID.messaging.internetofthings. \

ibmcloud.com”, 1883, net);

  Serial.print(“Connecting to BlueMix”);

   while (!client.connect(“d:OrgID:DeviceT:DeviceID“, \

“use-token-auth”,”AuthenticationToken“)) {

      Serial.print(“.”);

      delay(1000);

  }

  Serial.println();

  Serial.println(“Connected to BlueMix.”);

}

Secțiunea loop() va fi responsabilă cu citirea parametriilor (temperatură de la senzorul TMP102; intensitate lumină și index radiații ultraviolete de la senzorul Si1145) și cu postarea acestora către serviciul IBM Watson IoT. Publicarea datelor achiziționate se va face o dată pe minut.

void loop() {

  client.loop();

  float temperature = getTemperature();

  Serial.print(“Temperature: “);

  Serial.println(temperature);

  int light = uv.readVisible();

  Serial.print(“Vis: “); Serial.println(light);

  float UVindex = uv.readUV();

  UVindex /= 100.0; 

  Serial.print(“UV: “);  Serial.println(UVindex);

  client.publish(“iot-2/evt/status/fmt/json”, \

  “{\”d\”:{\”myName\”: \”SunDetector\” \

  ,\”Temperature\”: \”” + String(temperature, 2) + “\” \

  ,\”Light\”: \”” + String(light,DEC) + “\” \

  ,\”UVIndex\”: \”” + String(UVindex, 2) + “\”}}”);

  delay(60000);

}

Procedura messageReceived() este necesară pentru a respecta caracterul bidirecțional al protocolului MQTT chiar dacă sistemul nostru nu va prelua date sau comenzi de la platforma IBM Watson IoT.

void messageReceived(String topic, String payload, \

char * bytes, unsigned int length) {

  Serial.print(“incoming: “);

  Serial.print(topic);

  Serial.print(” – “);

  Serial.print(payload);

  Serial.println(); }

Procedura connectAP() este folosită în secțiunea loop() pentru conectarea la rețeaua WiFi.

bool connectAP(void)

{Serial.print(“Please wait while connecting to: ‘” \

 WLAN_SSID “‘ … “);

  if ( Feather.connect(WLAN_SSID, WLAN_PASS) )

  { Serial.println(“Connected!”); }

  else  {

    Serial.printf(“Failed! %s (%d)”, Feather.errstr(),\

             Feather.errno());

    Serial.println();

  }

  Serial.println();

  return Feather.connected(); }

Având în vedere că pentru utilizarea senzorului TMP102 nu utilizăm nici o bibliotecă software, funcția getTemperature() este utilizată pentru a prelua valoarea temperaturii măsurate de senzor prin intermediul protocolului I2C.

float getTemperature()

{byte MSB = 0x00;

  byte LSB = 0x00;

  int TempCitita = 0;

  float TempCelsius = 0.0;

  Wire.beginTransmission(tmp102Address);

  Wire.write(0x00);

  Wire.endTransmission();

  Wire.requestFrom(tmp102Address,2);

  Wire.endTransmission();

  MSB = Wire.read();

  LSB = Wire.read();

  TempCitita = ((MSB << 8) | LSB) >> 4;

  TempCelsius = TempCitita * 0.0625;

  return TempCelsius; }

Programul a fost dezvoltat și testat utilizând Arduino IDE 1.6.12, Adafruit WICED 0.6.2, MQTT 1.10.1 și Adafruit Si1145 1.0.0.

După punerea în funcțiune a sistemului în cadrul consolei de administrare IBM Watson IoT (dashboard) se va observa schimbarea stării dispozitivului înregistrat anterior.

10

Printr-o simplă inspecție a proprietăților dispozitivului se pot vedea datele trimise de acesta:

11

În partea a doua a proiectului vom utiliza informațiile furnizate de sistem pentru a genera grafice de evoluție și alerte. Tot pe baza informațiilor primite de platforma IBM Watson IoT se pot construi și aplicații specifice serviciului cloud IBM BlueMixTM, aplicații ce pot prelucra aceste informații în diverse scopuri (statistice, decizionale).

Platforma propusă de această lecție nu este singura variantă hardware de implementare, se pot vedea și alte soluții în următoarele proiecte:

Heart Rate Monitor using IBM Watson IoT Platform + Arduino MKR1000 + Pulse Sensor + NodeRED – developerWorks Recipes

https://developer.ibm.com/recipes/tutorials/heart-rate-monitor-using-ibm-watson-iot-platform-arduino-mkr1000-pulse-sensor-nodered/

Connect an ESP8266 with the Arduino SDK to the IBM Watson IoT Platform

https://espressif.com/en/media_overview/articles/connect-esp8266-arduino-sdk-ibm-watson-iot-platform

Arduino + Xbee + Bluemix = Connect Devices to the Cloud

http://www.paasmag.com/2015/05/13/arduino-xbee-bluemix-connect-devices-to-the-cloud/

How cold is the Blue?

În cadrul proiectului de față vom prezenta implementarea unui sistem de tip IoT (Internet of Things) ce utilizează serviciul cloud IBM BlueMixTM. Platforma Cloud IBM BlueMixTM pune la dispoziția utilizatorilor un serviciu IoT specializat și anume IBM Watson IoT Platform. Serviciul IBM BlueMixTM este un serviciu comercial dar care oferă posibilitatea de evaluare pentru o perioadă de 30 de zile sau, pentru studenții și profesorii din unele instituții de învățământ superior, accesul este gratuit.Sistemul prezentat în acest material va utiliza o componentă demonstrativă a serviciului IBM Watson IoT și nu necesită înregistrare (înregistrarea unui cont de evaluare).

Scopul sistemului este de a măsura temperatura și umiditatea ambientală și a trimite datele măsurate către serviciul IBM Watson IoT prin intermediul protocolului MQTT. Accesând platforma Quickstart IBM Watson IoT datele măsurate vor putea fi urmărite în timp real de oriunde din Internet.

Pentru implementare a fost aleasă o placă de dezvoltare Adafruit M0 WiFi ce combină puterea unui microcontroler ATSAMD21G18 ARM Cortex M0+ pe 32 de biți cu interconectivitatea dată de modulul WiFi ATWINC1500.

2

https://www.robofun.ro/feather-m0-wifi-atsamd21-atwinc1500

Pentru mai multe informații legate de utilizarea plăcii Adafruit M0 WiFi se poate consulta:

Adafruit Feather M0 WiFi with ATWINC1500 | Adafruit Learning System

https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500

Pentru măsurarea temperaturii și umidității ambientale vom utiliza un senzor digital SHT11 ce oferă o precizie ridicată și este foarte ușor de utilizat în combinație cu orice placă din familia Arduino.

3

https://www.robofun.ro/senzori/vreme/senzor-temperatura-umiditate-sht11

Schema de interconectare dintre cele două componente este următoarea (VCC senzor – 3V placă de dezvoltare, GND – GND, DAT senzor – pin 11 placă de dezvoltare, SCK – pin 10 placă de dezvoltare):

4

Programul va utiliza următoarele biblioteci software externe mediului Arduino IDE:

Adafruit WINC1500 – pentru comunicația cu modulul WiFi

https://github.com/adafruit/Adafruit_WINC1500

Arduino MQTT – pentru implementarea protocolului MQTT

https://github.com/256dpi/arduino-mqtt

SHT1x Temperature / Humidity Sensor Library for Arduino

https://github.com/practicalarduino/SHT1x

#include <SPI.h>

#include <Adafruit_WINC1500.h>

#include <MQTTClient.h>

#define WINC_CS   8

#define WINC_IRQ  7

#define WINC_RST  4

#define WINC_EN   2

Adafruit_WINC1500 WiFi(WINC_CS, WINC_IRQ, WINC_RST);

Adafruit_WINC1500Client net;

MQTTClient client;

#include <SHT1x.h>

#define dataPin  10

#define clockPin 11

SHT1x sht1x(dataPin, clockPin);

În cadrul programului trebuie completate variabilele ssid și pass pentru ca sistemul să se poată conecta la o rețea WiFi pentru acces Internet.

char ssid[] = “………………“;    

char pass[] = “………………“; 

În cadrul secțiunii setup() se vor inițializa obiectele de comunicație: serială, modul WiFi, protocol MQTT (inclusiv conectarea la platforma Quickstart IBM Watson IoT – adresă quickstart.messaging.internetofthings.ibmcloud.com port 1883). Identificarea dispozitivului IoT în cadrul platfomei se va face pe baza unui identificator unic format din 12 caractere (se recomandă folosirea adresei MAC a plăcii) – trebuie personalizat în program în apelul funcției: client.connect(“…:XXXXXXXXXXXX”).

5

void setup() {

  #ifdef WINC_EN

    pinMode(WINC_EN,OUTPUT);

    digitalWrite(WINC_EN,HIGH);

  #endif

  Serial.begin(9600);

  while (!Serial) { ; }

  if (WiFi.status() == WL_NO_SHIELD) {

    Serial.println(“WiFi shield not present”);

    while (true);  }

  WiFi.begin(ssid, pass);

  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.print(“.”);  }

   Serial.println();

  Serial.println(“WiFi connected.”);

  IPAddress ip = WiFi.localIP();

  Serial.print(“IP address: “);

  Serial.println(ip);

  byte mac[6];

  WiFi.macAddress(mac);

  Serial.print(“MAC address: “);

  for (int i=0; i<6; i++) {

     if (mac[i]<16) Serial.print(“0”);  

     Serial.print(mac[i], HEX);

     if (i!=5) Serial.print(“:”);  }

  Serial.println();

  client.begin(“quickstart.messaging.internetofthings.ibmcloud.com”, 1883, net);

  Serial.print(“Connecting to BlueMix”);

  while (!client.connect(“d:quickstart:sht11:XXXXXXXXXXXX“)) {

    Serial.print(“.”);

    delay(1000);  }

  Serial.println();

  Serial.println(“Connected to BlueMix.”);

}

În cadrul secțiunii loop() se vor citi valorile pentru temperatura și umiditatea furnizate de senzorul SHT11 și se vor trimite (publica) către serviciul Quickstart IBM Watson IoT. Publicarea se va face o dată la 10 secunde. Procedura messageReceived() este necesară pentru a respecta caracterul bidirecțional de comunicație a protocolului MQTT.

unsigned long lastMillis = 0;

void loop() {

  client.loop();

  float temp_c;

  float humidity;

  temp_c = sht1x.readTemperatureC();

  humidity = sht1x.readHumidity();

  Serial.print(“Temperature: “);

  Serial.print(temp_c, DEC);

  Serial.print(“C “);

  Serial.print(” Humidity: “);

  Serial.print(humidity);

  Serial.println(“%”);

  if(millis() – lastMillis > 10000) {

    if(!client.connected()) {

            Serial.print(“Connecting to BlueMix”);

            while (!client.connect(“d:quickstart:sht11:XXXXXXXXXXXX“)) {

              Serial.print(“.”);

              delay(1000);  }

            Serial.println();

            Serial.println(“Connected to BlueMix.”);   }

    lastMillis = millis();

    client.publish(“iot-2/evt/status/fmt/json”,  “{\”d\”:{\”myName\”: \”SHT11 sensor\”,\”Temperature\”: \”” + String(temp_c, 2) + “\”,\”Humidity\”: \”” + String(humidity, 2) + “\”}}”);  }

  delay(10000);

}

void messageReceived(String topic, String payload, char * bytes, unsigned int length) {

  Serial.print(“incoming: “);

  Serial.print(topic);

  Serial.print(” – “);

  Serial.print(payload);

  Serial.println();

}

Programul a fost dezvoltat și testat utilizând Arduino IDE 1.6.12, Adafruit SAMD Boards 1.0.13, Adafruit_WINC1500 0.6.0, MQTT 1.10.1 și SHT1x Sep 20, 2011.

După punerea în funcțiune a sistemului ne vom conecta la serviciul Quickstart IBM Watson IoT utilizând adresa:

https://quickstart.internetofthings.ibmcloud.com/#/device/ XXX..XXXX /sensor/

unde XXXXXXXXXXXX este identificatorul unic definit în program.

6

Platforma ne permite să vizualizăm în timp real datele transmise de dispozitivul nostru. Atenție!!! Serviciul nu stochează datele trimise – este un serviciu demonstrativ ce ne permite doar urmărirea valorilor.

Pentru implemetarea utilizării serviciului Quickstart IBM Watson IoT se pot parcurge și următoarele proiecte:

Internet of Things: Publishing to IBM Bluemix Node-RED with an Arduino Yun

http://www.zombieprototypes.com/?p=92

Arduino IoT Send Sensor Data to IBM Bluemix

http://wiznetmuseum.com/portfolio-items/arduino-iot-send-sensor-data-to-ibm-bluemix-2/

Build a cloud-ready temperature sensor with the Arduino Uno and the IBM Watson IoT Platform

http://www.ibm.com/developerworks/cloud/library/cl-bluemix-arduino-iot1/