Startups hebben het graag over het veranderen van de wereld, maar dan hebben ze het niet over de planeet of fysieke zaken in de wereld. De meeste willen datapakketten en verwijzingen in databases veranderen. Dat zijn belangrijke bitjes, maar het blijven bitjes.

We kunnen inmiddels veel meer dan enen en nullen schrijven: code kan machines vertellen hoe de fysieke wereld om ons heen moeten aanpassen. Software bedient verlichting en huiskamers, bestuurt auto's, maakt deuren open - en meer.

De meeste markten en kansen voor ontwikkelaars zitten in de echte wereld, niet in de virtuele. Programmeurs moeten bij zelfrijdende auto's, domotica, intelligente kantoren en dergelijke ontwikkelingen goed in de vingers hebben hoe veranderingen in datastructuren van invloed zijn op wijzigingen in objecten. De term objectgeoriënteerd programmeren zou hier perfect voor zijn als we die al niet ergens anders voor gebruikten.

Dit soort werk vereist nieuw talen, of nieuwe protocollen die werken met oudere talen. Als je de wereld wilt veranderen, moet je weten hoe deze werken en hoe je ze inzet. Om je op weg te helpen volgt hier een aanzet voor een lijst met talen en protocollen die van pas komen in het IoT-tijdperk. Als je eenmaal deze bitjes onder de knie hebt, is het moeilijk om nog terug te gaan naar alleen maar databases.

1. Basic

Basic? Ja, een van de klassieke talen die de vroege microcomputerrevolutie voortdreef bestaat nog altijd in simpele hardwarecontrollers. De makers van de ESP8266-module gebruiken de taal omdat het volgens hen een "simpele maar krachtige taal in waardoor je fantastische dingen kunt doen zonder dat je informatica hoeft te hebben gestudeerd".

De klassieke structuur zit erin, inclusief die oude TODO. Maar je hebt ook nieuwere commando's (bij ESP8266 grotendeels gebaseerd op Run BASIC) om webpagina's op te halen of om e-mail te versturen. De meeste tijd ben je kwijt aan het aanspreken van hardware om data te verzamelen om die door te kunnen geven via het netwerk.

Een korte tutorial over het aansturen van de ESP8266 met Basic.

2. X10

Dit is de originele tool waarmee programmeurs de echte wereld leerden aanspreken. Het is nooit een ingewikkeld of uitgebreid protocol geweest, waarschijnlijk omdat het dateert uit 1975, een jaar voor Steve Wozniak en Steve Jobs de Apple I uitbrachten. Ondanks zijn leeftijd blijft X10 populair omdat veel goedkope apparaten het nog altijd ondersteunen.

Het protocol heeft maar een paar belangrijke functies. Je kunt een paar bitjes naar schakelaars sturen om ze aan of uit te zetten of om ze te dimmen. Dat is het wel zo'n beetje. Er zijn opties om schakelaars op afstand aan te spreken en meer data te versturen, maar de grootste functionaliteit is in- en uitschakelen. De pakketjes worden verstuurd over het lichtnet en worden aangemaakt door een apart X10-apparaat als de FireCracker.

Een aantal softwareprojecten als Flipit en Bottle Rocket maken het werken met de hardwaremodule FireCracker gemakkelijker. Maar je kunt ook met de originele master werken, X10, van het bedrijf dat er al sinds 1978 voor zorgt dat we de baas kunnen spelen over domotica.

Veel domotica maken gebruik van X10.

3. Insteon

In 2005 kwam het bedrijf Insteon met een vervanger voor X10 die grotere databerichten aankon en beter zou versturen. Dit omdat er klachten waren dat X10-signalen verloren raakten in grote percelen of huizen met complexe bedrading. Anderen klaagden over interferentie. In het systeem van Insteon wordt iedere switch een repeater om de signalen beter te verspreiden.

Daarnaast is het protocol rijker, complexer en bevat het meer redundantie. In plaats van opdrachten van 2 bit, zijn Insteon-pakketjes 10 bytes, waarvan 2 bytes zijn gereserveerd voor commando's. Kortom, je hebt 14 bitjes meer voor opdrachten in pakketjes die naar de apparaten worden gestuurd. De meeste opdrachten richten zich nog steeds op simpelweg in- en uitschakelen, maar er zijn opties om sensoren aan te spreken of een slimme thermostaat te maken.

Insteons protocol wordt gebruikt door meerdere smarthubs of domoticatools zoals Echo van Amazon of Harmony van Logitech. Er zijn verder open source-tools als Linux Home Automation biedt of OpenRemote dat ervoor zorgt dat alles integreert met lichtnetcontrollers die worden gebruikt om de netwerkpakketjes te verzenden.

Een tutorial om Insteon-apparaten aan te sturen.

4. ZigBee, Z-Wave en meer

X10 en Insteon zijn nog maar het begin. Er zijn veel meer methodes om signalen te sturen naar apparaten, soms over het lichtnet en soms draadloos. Zowel ZigBee als Z-Wave zijn draadloze standaarden die weinig energie gebruiken en daarom speciaal geschikt zijn voor sensoren en processors die in IoT-apparaten zijn verwerkt.

ZigBee kondigde bijvoorbeeld recent aan dat supermarkten experimenteren met klimaatbeheersingssensoren om groenteafdelingen te monitoren om te voorkomen dat producten niet bederven. Een deel van Z-Wave's website is gewijd aan het leveren van een draadloze knop waarmee ouderen hulp kunnen inroepen mochten ze ten val komen. Er zijn honderden van deze toepassingen die slechts enkele bitjes per keer hoeven te sturen.

ZigBee en Z-Wave zijn niet de enige standaarden die zich op dit gebied ontwikkelen. De lijst groeit met Panstamp, AMX, KNX, Lutron en nog veel meer. Sommige richten zich op niches, bijvoorbeeld AMX dat is bedoeld voor audiovisuele apparatuur in vergaderzalen. Of Panstamp voor de kleine draadloze controllers die overal embedded draaien.

Ze gebruiken allemaal hun eigen format, maar met wat extra programmeerwerk zijn ze vast te integreren. De waslijst aan concurrerende standaarden is misschien verwarrend voor programmeurs, maar het is tenminste beter dan helemaal geen standaarden.

De eigenschappen van verschillende draadloze technologieën bepalen welke voor jou als programmeur geschikt zijn:

5. XBMC, Freebox en meer

Audiovisueel materiaal is allang niet meer het domein van de televisie en lineaire videoconsumptie is een overblijfsel van de twintigste eeuw. Verschillende protocollen als XBMC, Freebox en VLC zijn ontworpen voor lineaire consumptie van beeld via het scherm, maar ze worden nu ook ingezet voor allerlei toepassingen in gebouwen.

Het lijkt allemaal niet zo wereldschokkend omdat ze alleen maar digitale content verplaatsen, maar worden steeds belangrijker nu schermen met informatie om ons heen een steeds belangrijkere plek innemen. Ook visueel verandert er veel. De gebouwen in Times Square zijn bijvoorbeeld voorzien van panelen die zich aanpassen op basis van welke beelden er op de grote schermen worden weergegeven. Dat betekent dat beeldmateriaal als decoratie dient en leidend is om bijvoorbeeld een gebouw te 'verven'.

Voor de fanatieke cord-cutters onder ons: installatie van Kodi (XMBC) naar een usb-drive.

6. PostScript

Niet iedereen begrijpt hoe complex de datastructuur is om data op te slaan in PDF of te versturen naar een printer. De data in een PostScript-bestand is geen lijst van letters, maar instructies over hoe lijnen bewegen over de pagina waarmee letters, lijnen, cijfers en vormen worden geproduceerd. De taal heeft instructies voor rechte bewegingen of Bézierkrommen om vervolgens vormen in te vullen. De lettertypes zijn geen bitmaps, maar complexe verzamelingen van lijnen en krommingen die naar verschillende posities te schalen zijn met nauwkeurigheid op subpixelniveau.

De taal zelf is een overblijfsel van de jaren 70 met een LIFO-stack die data verwerkt met haakjes. Iedereen die ooit met een programmeerbare HP-rekenmachine heeft gewerkt zal zich direct thuisvoelen. De taal is Turing-compleet en mensen hebben PostScript-code geschreven om complexe fractalen en andere vreemde dingen te maken - o, en virussen

SVG is groter aan het worden, omdat deze XML-variant breed ondersteund wordt op het web. Maar de onderliggende structuur lijkt sterk op PostScript en conversie is betrekkelijk eenvoudig. Beide talen kunnen worden gebruikt voor bijvoorbeeld toepassingen als draaibanken en lasersnijders met verschillende pakketten zoals PSToEdit.

Om je een beeld te geven: een stukje programmeren met PostScript met David Brailsford.

7. OBD-II

De auto is allang geen verzameling meer van zuigers, assen, tandwielen en dergelijke om de machine voort te bewegen. De auto's van vandaag zijn complexe netwerken van computers, maar dan op vier wielen. De OBD-II-standaard is de manier waarop wij stervelingen kunnen communiceren met een auto om te ontdekken wat eraan scheelt.

Veel van de code die tussen computer en auto beweegt is pure informatie. Je kunt bijvoorbeeld een paar bitjes versturen naar de poort onder de stuurkolom en deze stuurt informatie terug over bijvoorbeeld de snelheid, het toerental, benzineverbruik, uitstoot en tientallen andere cijfers. Verschillende applicaties, zoals Torgue, spreken de OBD-II-poort aan om informatie op te vragen.

Dit soort applicaties zijn populair bij automonteurs en amateurracers, maar ze zijn handig voor veel meer mensen. Als je zelf een computer met de auto wilt verbinden om meer informatie te verkrijgen, is bijvoorbeeld de Arduino-library ArduinoOBD een goed begin.

De Arduino verbonden met een OBD-poort kan bijvoorbeeld dit soort displays opleveren, maar er is veel meer mogelijk, van diagnostische informatie tot interactie met andere hardware.

8. G

Draaimachines en Computer Numerical Control (CNC) kwamen op in de jaren 50 en machinebouwers en programmeurs ontwikkelden vlug G, een programmeertaal die snijdmachines vertellen hoe ze moeten bewegen. Het proces is enigszins contra-intuïtief omdat het zich richt op wat moet worden weggesneden in plaats van het object dat overblijft. Maar als je dat denken eenmaal omdraait krijg je enorme fysieke bewegingsvrijheid.

Veel van het programmeerwerk draait om het selecteren van coördinaten en het bewegen van het snijdinstrument naar bepaalde posities. Machines kunnen bij lijnen en cirkels middenposities op basis van beginpunten en eindpunten interpoleren, waardoor simpele vormen relatief makkelijk te maken zijn. Voor complexere structuren moet je wat meer plannen.

G is sterk veranderd door de jaren heen toen verschillende fabrikanten hun eigen toevoegingen maakten. De meeste daarvan gebruiken nu moderne macro's en objectgeoriënteerde lagen die naar ruwe G-code worden gecompileerd om naar de machines te sturen. Vandaag de dag wordt een variant gebruikt om 3D-printers aan te sturen. Die code is anders, maar de basisprincipes zijn hetzelfde.

Een simpel G-programma om een CNC-machine aan te sturen.

9. STL

Over 3D-printen gesproken, de standaard om 3D-objecten te beschrijven is de lingua franca van de 3D-printwereld. Online worden virtuele objecten aangeboden via STL-bestanden die je kunt bewerken of meteen kunt doorsturen naar de printer.

De taal zelf is behoorlijk basaal. Het grootste deel bestaat uit driedimensionale coördinaten voor de vertexen van driehoeken die samen het oppervlakte van een object vormen. Het format ondersteunt complexere polygonen, maar de bestanden bevatten traditioneel driehoeken. Om een 3D-object te ondersteunen moeten de driehoeken alle delen van een oppervlakte bestrijken, maar het is geen vereiste van het STL-bestand.

Ze kunnen een ASCII of binaire weergave van de punten bevatten, maar STL-bestanden hanteren in de regel de binaire versie omdat deze data compacter is. Daarnaast gebruiken printers STL-bestanden in combinatie met GCode, waar we hierna op ingaan.

Stereolithografie: van ontwerp naar STL-bestand.

10. Slicer

STL-bestanden bevatten niet genoeg informatie om een 3D-printer daadwerkelijk aan te sturen en de knooppunten moeten worden vertaald naar instructies voor de 3D-kop. Printers gebruiken in de regel GCode, ook bekend als Slicer, dat lijkt op G-code zoals het wordt gebruikt door CNC-draaiers.

Het grootste verschil is dat andersom denken waar we het net over hadden. G gaat uit van de witruimte die weggehaald moet worden om het object los te maken van het materiaal en bij Slicer wordt juist ruimte gevuld om een object aan te maken. Vele instructies om de printkop aan te sturen zijn hetzelfde, maar er zijn nieuwe om de extruder aan te sturen.

Er bestaat een aantal Slicer-programma's, zowel propriëtair als open source. Sommige komen met geavanceerde IDE's om objecten te bewerken voor ze worden doorgestuurd naar de printer. De KISSlicer is er bijvoorbeeld in een gratis versie die werkt met éénkoppige printers en een pro-versie voor geavanceerdere printers met meerdere koppen.

Een instructie over Keep It Simple Slicer, van de download tot het bewerken van het objecten en het genereren van het uiteindelijke model.

11. Python

Deze taal is een favoriet binnen sociale wetenschappen, biologie-labs en binnen de Raspberry Pi-community waar Python zogezegd de officiële voertaal is. Dat laatste is misschien een beetje overdreven, aangezien de bordjes naar Linux booten en de meeste Linux-codebase erop kan draaien, maar alleen als het direct naar ARM compileert.

Maar Python blijft om een goede reden favoriet. Het is een high-level programmeertaal met een opgeruimde syntaxis en met redelijk vergevingsgezinde regels om data te verwerken. Programmeurs hoeven niet verloren te raken in diepe abstracties als closures of complexe regels of pointers uit het hoofd te leren.

Ze schrijven simpelweg een set instructies om data te verwerken en hiermee vertellen ze de Raspberry Pi wat het moet uitvoeren. De RasPi-community biedt uitgebreide documentatie om Python als nieuwe (of ervaren) programmeur te leren.

Informaticaprofessor Charles 'Chuck' Severance legt aan beginnende programmeurs hoe iteraties werken aan de hand van Python.

12. Processing

De wereld van robotica is gevuld met machines die de programmeertaal spreken van Arduino, een subset van C en C++. Dit is niet direct de simpelste taal en misschien hebben programmeurs daarom meer een taal genaamd Processing omarmd. Dit is een versimpelde subset van Java waar wat lastigere details omtrent classes zijn weggelaten en standaardmethoden zijn toegevoegd waarmee data kan worden verwerkt om schakelaars aan te spreken. Java-programmeurs vinden het misschien fascinerend om te zien hoe Processing op de oude AWT-API is gestoeld, maar de rest van de wereld zal gewoon enkele loops willen schrijven en code willen maken.

De code draait in de meeste gevallen op een hostsysteem dat instructies naar de Arduino stuurt, die op zijn beurt een lokale interpreter draait als Firmata. Het programmeren doe je op die host, maar het werk wordt uitgevoerd op de Arduino.

Processing wordt inmiddels ook gebruikt door ontwikkelaars van mobiele apps en als een basis voor Web-apps dankzij een versie die is geschreven in JavaScript, Processing.js. Online opleider Khan Academy gebruikt die taal als voorbeeld om basisprincipes van programmeren te leren.

Een overzicht van nieuwe features en de omgeving van Processing 3 door Processing-boegbeeld Daniel Shiffman.