Mijn eerste individual focus project betreft het bestuderen en toepassen van de techniek achter de particle photon met als doel het verbreden van mijn programeerkennis, in specifiek: C++.

Bekijk hier mijn PLP voor een betere blik op mijn leerdoelen in dit project.

Dit project startte toen ik op thepool.act.saxion.nl de post van Kasper Kamperman tegenkwam die iemand zocht om te helpen met het bouwen van een interface voor de Lumiflow. Dit product maakt gebruik van een particle photon. Bij het formuleren en herschrijven van mijn leerdoelen kwam ik er echter achter dat ik liever aan de slag ging met de software achter het apparaat zelf in plaats van het verbinden van de software met een interface. Zodoende ben ik onderzoek gaan doen naar de IDE van particle, wat ik er mee kan en welke problemen ik ermee kan oplossen.

Terwijl ik mij verdiep in de techniek kom ik erachter dat ik de code in testprojecten niet goed begrijp, dit komt omdat ik nog geen ervaring heb met c++. Om deze reden ga ik een cursus c++ volgen online, na wat rondzoeken naar een geschikte cursus heb ik deze gevonden: https://www.udemy.com/video-course-c-from-beginner-to-expert/learn/v4/overview een vrij duidelijke serie tutorials met toetsen tussendoor. Deze duurt (naar inschatting) zo’n 40 uur om af te ronden.

Aan de slag in visual studio
Om C++ te kunnen gebruiken moet ik een IDE kiezen waarin ik prettig kan werken, dit is voor mij microsoft visual studio omdat ik hier ook C# in schrijf voor andere projecten. Om een werkend programma te schrijven moet ik een nieuw project aanmaken en de c++ frameworks downloaden. Zodra ik dit heb gedaan kan ik mijn eerste programma runnen: 

Azure
Na het lezen van dit artikel heb ik Microsoft Azure geïntergreerd in mijn photon console, Azure is een platform met veel mogelijkheden rondom IoT. Later ga ik kijken naar de verdere mogelijkheden om dit platform te verwerken in mijn project.

Eindproduct
Mijn eerste idee voor een eindproduct is een platform waarop knt studenten en creatievelingen zelf eenvoudig zonder code een interactieve installatie kunnen prototypen/bouwen, dit is een probleem dat ik als knt’er had in het tweede leerjaar waarin ik de helft van mijn project moest zoeken naar een manier waarop ik technieken met elkaar kon verbinden in plaats van het bouwen van de installatie zelf. Nu vind ik dit een leuk leerproces, de meesten willen liever een manier om snel te kunnen prototypen en onderzoeken of hun installatie werkt op creatief niveau. Voor dit idee heb ik een simpele Flowchart gemaakt waarin te zien is hoe ik de technieken wil verbinden en een prototype voor een Interface waarin te zien is hoe ik de interactie wil realiseren.

Update over platform: Na gesprek met mijn begeleider heb ik besloten mijn project in andere richting verder vorm te geven. Ten eerste past het niet precies bij mijn leerdoelen, ik ga mij meer focussen op mijn hoofdleerdoel, namelijk programmeren in C++. Ten tweede was ik blij te horen dat het product dat ik wilde bouwen al bestaat: blynk.cc doet precies wat ik in gedachten had voor mijn product. Nu ga ik via onderzoek in de techniek op zoek naar een passend eindproduct.

IFTT
Op zoek naar inspiratie voor een nieuw project doel kwam ik IFTT (if this than that) tegen in de particle docs. Dit is een service die eenvoudig technieken en platformen met elkaar verbindt. Om te testen hoe simpel dit platform is heb ik mijn led.cpp script verbonden met mijn google calender, een half uur voor mijn afspraak gaat mijn photon knipperen. Hier is te zien welke platformen er worden ondersteund, nadat ik mijn c++ cursus heb afgerond ga ik brainstormen over het intergreren van deze platformen in mijn eindproduct.

Webhooks
Een webhook werkt als een brug tussen een particle apparaat en een web service (api). Webhooks zijn geïntergreerd in het event systeem van particle en kunnen zo eenvoudig worden aangesproken naar een web request. Mijn eerste webhook heb ik gedaan naar thingspeak, zoals de particle guide dit voordeed. De software is echter vernieuwd en de guide nog niet dus dit gaf een paar problemen die simpel op te lossen waren door in de menu’s door te klikken. Ik stuur elke 10 seconden de temperatuur zoals gemeten door mijn photon op pin A0 naar thingspeak, die maakt daar een grafiek van de temperatuur tegen de tijd.

C++ cursus

De cursus is afgerondt, ik heb in totaal 40 uur besteed aan het volgen van de cursus en maken van de opdrachten. Het is erg behulpzaam geweest en het voelt goed om mijn vaardigheden uit te breiden, dit wilde ik al een tijd doen en ik ben blij dat ik nu de tijd heb kunnen nemen om dit van A tot Z goed door te nemen en toe te passen.
Mijn aantekeningen zijn hier te vinden.
Mijn opdrachten zijn hier te vinden.

Welkom thuis
Om mijn project een passend eindresultaat te geven ga ik een product bouwen die alle geleerde kennis van de afgelopen weken met elkaar verbindt. Dit wordt een app die de positie van mijn telefoon opvraagt en wanneer ik thuis kom zet het mijn pc aan door middel van wake-on lan, geeft het de temperatuur van mijn kamer door pin A0 uit te lezen en door te sturen naar een push notificatie en een programma van tv kanalen die die avond te zien zijn. Een uitwerking van dit idee is hier te zien.

Locatie detecteren
De Photon kan gebruik maken van 4 manieren van geolocatie.
GPS: global positioning system, kan een apparaat lokeren op +/- 4 meter afstand.
Telefoonnetwerk: elke telefoontoren heeft een id code die met google geolocation kan worden opgevraagd, dit is snel maar kan een apparaat plaatsen in ongeveer 4 kilometer (in bebouwd gebied, dus in principe overal in nederland).
Wifi: De photon heeft de mogelijkheid om wifi locaties op te vragen, deze zijn even precies als het bereik van het wifi netwerk. Meestal niet meer dan 30 meter.
IP addres: Wifi apparaten kunnen hun laatst aangesloten ip adres terugsturen, dit kan echter onbetrouwbaar zijn bijvoorbeeld wanneer een apparaat al een tijd geen verbinding heeft gehad en is verplaatst in de tussentijd.
Ik gebruik de wifi connectie methode omdat ik maar 1 wifi netwerk hoef te checken, dit is snel, gemakkelijker en precies genoeg.
Door google maps device locator library te importeren kan ik een webhook oproepen wanneer mijn smartphone in de buurt komt, ik sta namelijk ingelogd met mijn google account op deze telefoon en heb locatievoorzieningen altijd aan staan. Met iftt kan ik vervolgens functies starten, namelijk: in de agenda zetten hoe laat ik ben thuisgekomen, een notificatie geven van mijn planning vanavond en batch files executeren via dropbox.

Wake-on lan
Ik heb een pc die wake on lan kan ontvangen, dit heb ik in de bios aangezet en uitgetest. Het probleem is dat ik een prive netwerk heb aangesloten thuis, dit maakt een webrequest voor wake on lan onmogelijk op mijn systeem. Na het op vele manieren te proberen las ik hier dat ik een nieuwe router zou moeten kopen en installeren om dit werkend te krijgen.

Batch opdrachten automatiseren
Het wake on lan idee is niet gelukt maar bij nader inzien zou dit voor mij weinig toevoegen gezien mijn pc in principe altijd aanstaat, ik draai namelijk vertcoin mining software. Een meer nuttige functie zou daarom zijn om de software aan te zetten wanneer ik vertrek (dit wil ik soms nog vergeten) en uit zetten wanneer ik er wel ben, dan heb ik namelijk zelf alle rekenkracht van de pc nodig.
Vandaar dat ik op zoek ben gegaan naar een manier om dit via mijn photon te doen. Een programma opstarten kan met een .bat bestand, deze kan ik elke 10 minuten automatisch runnen met de windows task sheduler. De batch bestanden haal ik uit dropbox, via iftt kan ik namelijk een functie oproepen vanuit de photon die een tekstbestand creert in dropbox, dit tekstbestand wordt dan een functie als het ware. Ik check of het tekstbestand dat ik zoek in de map staat, verwijder het bestand en voer een opdracht uit, bijvoorbeeld het openen en starten van mijn mining software. Een batch bestand opent het console venster altijd eventjes, dit kan voorkomen worden door het programma op te starten in een visual basic script (een .vsb bestand), dit is een taal ontwikkeld door microsoft om onder andere batch bestanden te automatiseren.
De functie doorgeven van de photon naar dropbox duurt minder dan een minuut, het downloaden van bestanden naar mijn desktop duurt 10 seconden en de task scheduler start het programma elke 10 minuten. Dit geeft een reactietijd van 1.5 minuut tot 11 minuten. Dit is voldoende voor als ik bijvoorbeeld boodschappen moet doen of even de stad in ga, dan zou ik er normaal gesproken niet aan denken mijn miner aan te zetten.

Eindproduct

[dvbutton url=”https://go.particle.io/shared_apps/5a036cc6544480d21d0002fc” style=”primary” newtab=”yes”]Bekijk de app[/dvbutton][dvbutton url=”https://merijnkersten.nl/wp-content/uploads/2017/09/welcomehomeapp.zip” style=”primary” newtab=”yes”]Download de code[/dvbutton]

Bekijk hier de iftt applets die ik gebruik in de app:

[dvbutton url=”https://ifttt.com/applets/64775073d-if-you-enter-an-area-then-call-a-function” style=”” newtab=”yes”]Applet 1[/dvbutton] [dvbutton url=”https://ifttt.com/applets/64758869d-if-any-event-starts-on-demerijnkersten-gmail-com-then-call-a-function” style=”” newtab=”yes”]Applet 2[/dvbutton] [dvbutton url=”https://ifttt.com/applets/64739595d-if-merijn-photon-published-notify-then-send-a-notification-from-the-ifttt-app” style=”” newtab=”yes”]Applet 3[/dvbutton] [dvbutton url=”https://ifttt.com/applets/64743653d-if-merijn-photon-published-runprogram-then-create-a-text-file-in-demerijnkersten-gmail-com-s-dropbox” style=”” newtab=”yes”]Applet 4[/dvbutton] [dvbutton url=”https://ifttt.com/applets/PFQhSYaH-blink-led-when-event-starts” style=”” newtab=”yes”]Applet 5[/dvbutton] [dvbutton url=”https://ifttt.com/applets/64706945d-if-merijn-photon-published-posttocalender-then-quick-add-event-to-demerijnkersten-gmail-com” style=”” newtab=”yes”]Applet 6[/dvbutton]

 

Reflectie
C++ programmeren
Dit leerdoel is geslaagd, dit is tevens mijn hoofdleerdoel en hier heb ik het grootste deel van mijn tijd in gestoken. Ik ben op zoek gegaan naar nieuwe stof en nieuwe uitdagingen in een omgeving en taal waar ik geen verstand van had en dit was een leuke en leerzame ervaring.
Interface ontwerp
Dit leerdoel is nauwelijks ten bod gekomen vanwege de herinrichting van mijn project. Ik ga dit in mijn volgend project verder oppakken.
Backend
Dit leerdoel is geslaagd maar niet zo nuttig geweest als ik had gehoopt, het framework biedt veel opties maar geen functies die ik nuttig schat voor mijn onderzoek, vandaar dat ik dit niet heb gebruikt in mijn eindproduct.