The Art of Connecting Things – Opdracht 2

Deze opdracht is onderdeel van de ICR3ATE | Digital Makers Lab IoT Workshop ‘The Art of Connecting Things’.

Je gaat in twee- of drietallen zelf aan de slag om een (bescheiden) IoT casus te maken m.b.v. beschikbare hardware en software.

Alle opdrachten gaan ervan uit dat je redelijk handig bent met PC/Mac, hardware aansluiten en (draadloos) Internet. Er worden redelijk wat technische termen gebruikt en je moet een redelijk Cloud vaardig zijn. Je hoeft niet te kunnen programmeren of solderen om de basis opdrachten succesvul uit te voeren.

Er zijn 5 opdrachten beschikbaar in oplopende moeilijkheidsgraad. De opdrachten 1 t/m 4 hebben het karakter van “assembleren en configureren” en zijn basis. Opdracht 5 heeft het karakter van zelf “ontwikkelen en programmeren” en is uitsluitend voor gevorderden.

Deze Opdracht 2 betreft sensorische data collectie in de Cloud plus een ‘actuator’ m.b.v. een MCU als IoT device (wederom Particle Photon) en een draadloze Internet verbinding.

Opdracht 2 bouwt voort op 1. Je moet dus een werkend IoT device hebben, voordat je aan 2 kunt beginnen. Heb je dat nog niet? Ga dan terug naar 1.

T.o.v. opdracht 1 komen er echter 4 elementen bij waardoor deze opdracht pittiger is:

  1. gebruik maken van een krachtig en gebruikersvriendelijk IoT platform voor o.a. een rijk grafisch dashboard
  2. toegangsrechten tot devices (en de data) aan restricties  onderwerpen
  3. een symbolische actuator in de vorm van een LED op Photon die vanaf het IoT platform wordt bediend middel een ‘opdrachtwoord’
  4. er wordt gewerkt in een multi user / multi sensor situatie representatief voor een organisatie met een serieuze IoT toepassing

Er worden wederom omgevingstemperatuur en luchtvochtigheid gemeten. Met deze twee gemeten waarden worden vervolgens twee weerkundige grootheden berekend: de warmte-index en het dauwpunt.

1. Wat ga je doen en leren in deze opdracht?

Deze opdracht heeft de volgende leerdoelen:

  1. Bestaand IoT device kunnen verbinden met Internet via Wifi
  2. IoT device kunnen voorzien van software middels Build Particle WebIDE
  3. Werkende IoT device kunnen koppelen aan een IoT platform m.b.v. zogeheten security credentials
  4. IoT platform kunnen inrichten met een – reeds beschikbare – applicatie
  5. Sensor waarden grafisch kunnen presenteren in een volwaardig Cloud dashboard
  6. De standaard aanwezige Photon LED kunnen aan en uitzetten middels software

2. De benodigdheden

Je hebt het volgende nodig:

  1. Particle Photon als MCU gemonteerd op Grove Base Shield (1)
  2. Grove Temperature / Humidity sensor DHT22 (2)
  3. Een Grove verbindingskabeltje (3)
  4. Een gekleurd micro USB kabeltje (4)
  5. Een login account op de Particle Web IDE https://build.particle.io (zie hieronder voor details)
  6. Software om de Photon MCU en Sensor te verbinden met de Particle Cloud
  7. Software om de Photon MCU te kunnen opnemen als Device binnen het IoT platform
  8. Minimaal 1 deelnemer heeft: een PC/Mac met Internet access en USB poort om Photon te voeden

Gebruik als login naam de kleur van het micro USB kabletje dat je hebt gekregen volgens onderstaande lijstje:

  • [email protected]
  • [email protected]
  • [email protected]
  • [email protected]
  • [email protected]

3. Waar vind ik de benodigde software?

  • De kant en klare software die je nodig hebt voor opdracht 2 staat hieronder en is geschikt om te kopiëren en te plakken
  • Het is een zogeheten sketch die je nodig hebt om de Particle Photon te laten doen wat nodig is voor deze opdracht
  • Let op: deze software is geconfigureerd voor slechts één IoT device (dus voor één kleur). Welke? dat staat in de sketch en dit moet je aanpassen voor je eigen device!
  • Voordat dat kan ga je eerst de hardware aansluiten en verbinden met Internet
  • Als dat is gebeurd ga je deze source code aanpassen voor jouw specifieke IoT Device (jouw eigen kleur)
/**
 * Example for connecting a Particle Photon to the
 * Losant IoT Platform using MQTT.
 *
 * Copyright (c) 2016 Losant. All rights reserved.
 * https://www.losant.com
 */
 
//include "SparkJson/SparkJson.h"
//include "MQTT/MQTT.h"
//include "Adafruit_DHT/Adafruit_DHT.h"
//Device LOSANT_DEVICE_ID = "Photon iot-blauw"
#define LOSANT_BROKER "broker.losant.com"
#define LOSANT_DEVICE_ID "5723c591194e0601004c0942"
#define LOSANT_ACCESS_KEY "e585e326-6889-4c93-8cf1-590693ab08be"
#define LOSANT_ACCESS_SECRET "7accced68830e555975fae7defbcda182f5f16d3e040aecef68af812df71e276"
#define DHTPIN 4 // what pin we’re connected to
// Uncomment whatever type you’re using!
#define DHTTYPE DHT11
// #define DHTTYPE DHT22 // DHT 22 (AM2302)
// #define DHTTYPE DHT21 // DHT 21 (AM2301)
// Topic used to subscribe to Losant commands.
String MQTT_TOPIC_COMMAND =
    String::format("losant/%s/command", LOSANT_DEVICE_ID);
// Topic used to publish state to Losant.
String MQTT_TOPIC_STATE =
    String::format("losant/%s/state", LOSANT_DEVICE_ID);
// The Photon's onboard LED.
int LED = D7;
DHT dht(DHTPIN, DHTTYPE);
// Callback signature for MQTT subscriptions.
void callback(char* topic, byte* payload, unsigned int length);
// MQTT client.
MQTT client(LOSANT_BROKER, 1883, callback);
// Toggles the LED on/off whenever "toggle" command is received.
bool ledValue = false;
void callback(char* topic, byte* payload, unsigned int length) {
    
    // Parse the command payload.
    StaticJsonBuffer<200> jsonBuffer;
    JsonObject& command = jsonBuffer.parseObject((char*)payload);
    Serial.println("Command received:");
    command.printTo(Serial);
    Serial.println();
    
    // If the command's name is "toggle", flip the LED.
    if(String(command["name"].asString()).equals(String("toggle"))) {
        ledValue = !ledValue;
        digitalWrite(LED, ledValue ? HIGH : LOW);
        Serial.println("Toggling LED");
    }
}
void setup() {
    Serial.begin(9600);
    while(!Serial) { }
    
    pinMode(LED, OUTPUT);
}
// Connects to the Losant MQTT broker.
void connect() {
    
    Serial.print("Connecting to Losant...");
    
    while(!client.isConnected()) {
        client.connect(
            LOSANT_DEVICE_ID,
            LOSANT_ACCESS_KEY,
            LOSANT_ACCESS_SECRET);
            
        if(client.isConnected()) {
            Serial.println("connected!");
            client.subscribe(MQTT_TOPIC_COMMAND);
        }
        else {
            Serial.print(".");
            delay(500);
        }
    }
}
// Used to only send temperature once a second.
int lastUpdate = millis();
void loop() {
    if (!client.isConnected()) {
        connect();
    }
    
    // Loop the MQTT client.
    client.loop();
        
    int now = millis();
    
    // Publish state every second.
    if(now - lastUpdate > 1000) {
        lastUpdate = now;
        
        // Build the json payload: { "data" : { "temp" : val }}
        StaticJsonBuffer<800> jsonBuffer;
        JsonObject& root = jsonBuffer.createObject();
        JsonObject& state = jsonBuffer.createObject();
	
		// Read temperature as Farenheit
        state["tempF"] = dht.getTempFarenheit();
        // Read temperature as Celsius		
        state["tempC"] = dht.getTempCelcius();
        // Read humidity as Percentage		
        state["humid"] = dht.getHumidity();	
		state ["hI"] = dht.getHeatIndex();
        state ["dP"] = dht.getDewPoint();
        state ["tempK"] = dht.getTempKelvin();
        root["data"] = state;
        
        // Get JSON string.
        char buffer[800];
        root.printTo(buffer, sizeof(buffer));
        client.publish(MQTT_TOPIC_STATE, buffer);
    }
}

4. Sluit de DHT22 sensor aan op de Photon Grove shield

  • Gebruik daarvoor het Grove verbindingkabeltje (1)
  • De stekker past maar op één manier; let daar goed op b.v. door de gele draad aan te houden zoals hieronder getoond (2) en (3)
  • Kies de postie op de Photon Grove Shield zoals onderstaande afbeelding toont (4)
  • Dit is een zogenaamde Digitale GPIO aansluiting D4
  • Alleen deze aansluiting gaat werken, alle andere niet!

5. Sluit de Photon aan op je PC/Mac via USB

  • Gebruik daarvoor het gekleurde micro USB kabeltje (1) en (2)
  • Wanneer je dit hebt gedaan zie je een kleuren LED aangaan op de Photon (3)
  • De betekenis van alle modi waarin de Photon kan zijn die d.m.v. kleuren LED wordt aangegeven, vind je hier
  • De noodzakelijke precondiguratie van Wifi met toegangscode, is reeds voor je gedaan omwille van snelheid en eenvoud
  • Daarom heb je na deze stap een Photon die gelijk al aan Internet verbonden is
  • Dat zou niet het geval zijn als je zelf met een Photon vanaf scratch gaat beginnen!

6. Login op de Web IDE van Particle

  • Ga daarvoor naar: https://build.particle.io
  • En gebruik de login naam die overeenkomt met je kleur
  • Dus voor team ‘geel‘: [email protected]
  • Het wachtwoord is identiek aan de login naam zonder @icr3ate.nl erachter

7. Je bent nu in het Particle WebIDE Console

  • Dat ziet er na inloggen uit zoals onderstaande afbeelding

8. Maak een App en haal de software op

  • Creeer een App ‘Opdracht2’ genaamd
  • Verwijder je de eerste 7 regels die er stonden toen je inlogde in Particle WebIDE Console
  • Copy de eerder genoemde sketch (zie stap 3) op je klembord

9. Kopieer de source code

  • Plak de code in App Opdracht2 die je zojuist hebt gemaakt in de WebIDE

10. Sla de App op

  • Sla Opdracht2 nu op voordat je verder gaat

11. Zoek de benodigde software libraries voor de DHT22, JSON en MQTT

  • Er zijn 3 software libraries nodig om deze sketch te kunnen gebruiken
  • Activeer de Library mogelijkheid in WebIDE middels onderstaande knop (1)
  • Zoek op ‘DHT’ (2)

12. Voeg deze libraries toe aan je App

  • Neem deze libraries op je in je App middels onderstaande knop
  • En herhaal stap 11 voor JSON en MQTT
  • En sla je App opnieuw op

13. Controleer je code op de aanwezigheid van de libraries

  • In de source code die je kreeg stonden de volgende regels bijna bovenaan
//include "SparkJson/SparkJson.h"
//include "MQTT/MQTT.h"
//include "Adafruit_DHT/Adafruit_DHT.h"
  • Deze regels zijn een reminder om nu te controleren of je alledrie libraries ook daadwerkelijk hebt toegevoegd aan de App
  • Als je alle handelingen goed hebt verricht, zie je Web IDE er als volgt uit
  • De drie regels (1) staan nu op juiste wijze opgenomen in de source code (2)
  • Dit gebeurt automatisch zoals aangegeven in commentaar
  • De libraries zijn ook daadwerkelijk opgenomen in de App (3)
  • Als jouw situatie afwijkt is er waarschijnlijk iets niet in orde
  • Ga terug naar stap 8

14. Aanpassen van de source code voor het specifieke IoT device dat je gebruikt

  • Login op Losant
  • Gebruik je eigen login naam en welbekende wachtwoord

15. Je komt in in Dashboard startscherm terecht

  • Je ziet onderstaande openingsscherm
  • Je bent lid van de organisatie ICR3ATE | Digital Makers Lab (1)
  • Er is al een kant en klaar dashboard voor je beschikbaar zonder meetwaarden, dat later gebruikt wordt (2)
  • Er is ook al een applicatie beschikbaar die nog wel verbonden moet worden met jouw specifieke IoT device (3)
  • Daarvoor ga je naar de volgende stap

16. Ga naar de applicatie: ‘The Art of Connecting Things’

  • Je ziet onderstaande openingsscherm (1)
  • Voor deze applicatie zijn de volgende elementen van belang:
    • Devices (2)
    • Workflows (3) en
    • Events (4)
  • Je hoeft je nu alleen maar te richten op Devices (2)

17. Voeg een Device toe

  • Voeg een Device toe aan deze applicatie (1)

18. Maak een device op basis van een recipe

  • Kies Create from Recipe
  • Waarbij er gekozen wordt voor het recept Photon iot-“kleur”

19. Geef je eigen device ook je eigen kleur naam

  • In onderstaande scherm geef je je eigen Photon ook je eigen naam op basis van je kleur (1)
  • In dit geval geel. Pas verder nergens wat aan in dit sjabloon!
  • En kies voor Save Device (2)

20. Je eigen IoT Device is nu bekend binnen Losant

  • Nadat je in de vorige stap het IoT device bekend hebt gemaakt, zie je in ditzelfde scherm twee belangrijke zaken:
    • Het Device ID door Losant is toegekend aan je IoT Device (1)
    • Het feit dat het Device nog niet verbonden is met Losant (2)
  • Het Device ID tezamen met 2 andere beveiligingsparamters hebben we nodig om de source code aan te passen voor de Photon
  • Dat ga je hierna doen waardoor de status van het Device vervolgens zal veranderen in “connected”

21. Sleutels aanmaken voor je IoT Device

  • Ga naar het onderdeel Access Keys (1)
  • En vanaf nu moet je erg goed opletten, want het wordt een beetje een gegoochel met beveiligingssleutels waarmee de meesten niet zo vertrouwd zijn

22. 2 beveiligingssleutels genereren voor je eigen IoT Device

  • Genereer een zogeheten key (1)

23. Selecteer het Device dat je hiervoor hebt gemaakt

  • Kies voor je eigen Device als restrictions (1)
  • En genereer uiteindelijk de key (2) – beter is het om te spreken over een sleutelpaar, maar dit terzijde!

24. Bewaar nu de Access Secret goed!

  • Er wordt je nu eenmalig een scherm getoond met de door Losant gegenereerde Access Secret die hoort bij de Access Key (het sleutelpaar)
  • De Access Secret heeft niet voor niets zo. Als je deze sleutel hebt, kun je data onderscheppen en decoderen
  • In echte situaties is het dus van belang dat deze sleutel door jouwzelf en alleen door jou kan worden teruggehaald
  • En Losant kan dat niet en daar wordt je dan ook voor gewaarschuwd
  • Voor nu kiopieer je alleen deze Access Secret naar je klembord
  • Voor degenen die wat minder strikt zijn in security is er sinds kort ook de mogelijkheid om je keys te bewaren in een file!
  • Gebruik die optie vooral als je wat minder handig bent in knippen en plakken met het klembord!

25. En pas als eerst de source code aan voor de Access Secret van dit Device

  • Ga daarvoor naar Web IDE van Particel
  • Daarin heb je de source code staan voor Opdracht 2
  • In dit voorbeeld wordt in regel 27 de LOSANT_ACCESS_SECRET gedefineerd
  • Deze vervang je door degene die op je klembord staat. LET GOED OP DE aanhalingstekens. Die moeten blijven staan!
  • LET OP: in jouw situatie kan de LOSANT_ACCESS_SECRET op een andere regel staan. Dat is niet erg.
  • Je moet dus intelligent plakken op inhoud en betekenis!

26. En vervolgens pas je ook nog de LOSANT_ACCESS_KEY en LOSANT_DEVICE_ID aan

  • Als je deze waarden uit Losant hebt overgenomen, is de code compleet en uniek gemaakt voor jouw unieke IoT Device
  • Er is niemand anders die bij de data kan, ondanks dat er via het publieke internet wordt gecommuniceerd
  • Je vindt handige Copy buttons op twee plaatsen in Losant voor:
    • de Access key (1) en
    • Device ID (2)
  • Door deze Copy buttons te gebruiken weet je zeker dat je exact de juiste tekenreeks te pakken hebt

27. Sla de App op

  • Sla Opdracht2 op

28. Flash de software op de Photon

  • Controleer of je Photon on line is
    • Dat kun je zien door naar ‘Device’ status te gaan in het Console (1)
  • Als dat het geval is kun je je code ‘flashen’ (2)
  • Lees goed de aanwijzingen in het WebIDE scherm tijdens het flashen om te controleren of het proces goed verloopt

29. Controleer de juiste werking met kleuren LED op Photon

  • De kleuren LED geeft de huidige modus aan van de Photon
  • De betekenis van alle modi waarin de Photon kan zijn die d.m.v. kleuren LED wordt aangegeven, vind je hier
  • Ga zelf na of de modus klopt met wat je verwacht in dit stadium

30. Ga naar Losant

  • Als je alle handelingen goed het uitgevoerd zie je in onderstaande scherm bij Device Overview “Connected” staan
  • Wees niet te ongeduldig, soms gaat er een enkel minuutje overheen
  • Met de refresh button kun je het proces bespoedigen
  • Soms is het noodzakelijk de Photon uit en weer aan te zetten, danwel te resetten
  • Maar als de status Connected is, kan heb je de grootse IoT hobbel met succes genomen

31. Zie de sensor data binnenkomen van dit IoT device

  • In het Device venster waarin je nu al bent, kun je nu ook de data gaan tonen van het IoT Device
  • Ga daarvoor naar het DEBUG tab (1)
  • Je ziet ieder seconde dan actuele waarde binnengekomen en gelogd worden (2)
  • Wat is de gemeten waarde en wat is de berekende parameter?
  • Klopt de data?
  • En tenslotte kun je ook zien wanneer je device connected of disconnected was (3)

32. Er is een kant en klaar dashboard beschikbaar

  • Ga naar Dashboards
  • Er is een Dashboard ‘WeerWaarden Photon IoT-“kleur”‘ genaamd (1)
  • In het dashboard is een zogeheten block dat een grafiek toont met nu nog slechts twee waarden erin opgenomen (2)
  • Ga na welke dat zijn
  • Dit block gaat deze twee waarden weergeven van alle sensoren die succesvol worden aangesloten in deze opdracht
  • Dat is na enkele stuks natuurlijk niet meer praktisch omdat je naast alle waarden ook je eigen waarden wilt weten en nodig hebt

33. Je gaat dit dashboard nu als sjabloon gebruiken om je eigen exemplaar te maken

  • Maak een eigen block dat je toevoegt aan dit bestaande dashboard
  • Met dit Block worden alleen je eigen sensorwaarden weergegeven

34. Maak een extra Block

  • Kies voor een Time Series Graph
  • Ga na hoe je de twee waarden uit het andere Block er ook in krijgt weergegeven
  • Doe dit door configuratie informatie uit het eerste block te combineren met jouw specifieke device configuratie informatie

35. Je hebt nu een dashboard met meetwaarden van alle sensoren en die van je eigen IoT device

  • Je hebt nu het dashboard gemodificeerd met een extra block voor 1 sensor (van je eigen kleur) waarin alle 2 de meetwaarden worden weergegeven

36. Nu ga je je eigen block uitbreiden met 2 extra meetwaarden

  • Het gaat om de Humidity en Dauwpunt waarden
  • Zorg dat deze ook worden weergegeven in je eigen block
  • Je krijgt nu een dashboard dat er (ongeveer) uitziet als onderstaande afbeeldingen
  • Maak het dashboard zo betkenisvol mogelijk met kleuren, labels, minimale en maximale waarden, tot je tevreden bent over de informatieweergave ervan

37. Alleen voor gevorderden: b.v. dashboard verfijning en maak een workflow

  • Meetwaarde tijden, kleuren van grafieken en middelen van waarden kunnen allemaal aangepast worden; ga na voor jezelf wat de effecten zijn
  • Voor een alarmering naar je telefoon bij een te lage temperatuur
  • B.v. als de temperatuur onder de 0,8 graden komt, moet er een alarm naar de mobiele telefoon afgaan

38. Tot slot van deze opdracht wordt er nog een actuate (regelaar) handeling uitgevoerd

  • Ga weer terug naar de Device pagina van je eigen IoT Device
  • Helemaal onderin vind je het Send Device Command deel
  • Voer het woord toggle in bij Command Name (1) en verstuur dit als Command (2)
  • D7 LED op je Photon gaat branden
  • Als je dit commondo nog een keert geeft gaat de LED weer uit
  • Dit staat model voor een alarmering die b.v. wordt afgegeven nadat de temperatuur onder een bepaalde waarde is gekomen (dat is een workflow die gevorderden hebben gemaakt)
  • B.v. een alarm bij een temperatuur < 0,8 graden voor een fruitkweker die z’n watersprenkelaar aan moet gaan zetten, of dit volautomatisch doet!
  • Hoe? met IoT natuurlijk. Daar heb je nu zelf alle concepten voor gezien en enkele toegepast

39. Verwijder deze App uit je Particle WebIDE

  • Je bent nu klaar met deze eerste opdracht
  • Verwijder deze App uit de WebIDE
  • Dit is alleen nodig in deze leer setting; normaliter kun je deze App natuurlijk gewoon bewaren

40. Resultaat van deze opdracht

  • Gefeliciteerd met je praktische IoT resultaat
  • Wat heb je bereikt?
    • Deze opdracht heeft de volgende leerdoelen:
      • Bestaand IoT device kunnen verbinden met Internet via Wifi
      • IoT device kunnen voorzien van software middels Build Particle WebIDE
      • Werkende IoT device kunnen koppelen aan een IoT platform m.b.v. zogeheten security credentials
      • IoT platform kunnen inrichten met een – reeds beschikbare – applicatie
      • Sensor waarden grafisch kunnen presenteren in een volwaardig Cloud dashboard
      • De standaard aanwezige Photon LED kunnen aan en uitzetten middels software
      • En gevorderden hebben een trigger gemaakt o.b.v. een gemeten waarde
  • Ga voor jezelf na hoe dit resultaat past in het eerder gepresenteerde 5 dimensies model