In deze toepassing vervang je de klassieke IR-module, die bij de meeste RGB LED-strips hoort, door een
raspberry pi.
De RPi wordt via een tussenschakeling verbonden met de LED-strip. De klassieke
afstandsbediening ga je vervangen door een app en door een website die je eveneens op de RPi host.
Zodra de
RPi met het internet verbonden is, kan je de LED’s wereldwijd bedienen.
$ cordova create PIstrip be.uwnaam.pi_strip "Pi Strip"
$ cd PIstrip
$ cordova platform add browser android
$ cordova plugin add cordova-plugin-shake
Voor de communicatie tussen de app en de RPi gebruik je PubNub. PubNub is een realtime Data Stream Network (DSN) en een realtime infrastructure-as-a-service (IaaS) voor web-, mobiele en IoT-toepassingen. Met een gratis account kan je per maand tot 100 devices connecteren en tot 1M berichten zenden/ontvangen.



In de console kan je alle berichten volgen. Je kan hier ook een nieuw bericht verzenden. Voor deze toepassing
zenden we een object met als key het woord color en als value de HEX-kleurwaarde zonder hekje. Om
de LED-strip groen te laten oplichten zend je: {"color":"00FF00"}.
Wil je deze opstelling thuis bouwen, volg dan bijbehorende tutorial.
In de les
hoef je enkel de app te maken. Deze kan je dan uittesten op de LED-strip die in het labo aanwezig is.
div#vibrate zal
straks een willekeurige kleur genereren.
div#lightOff
dooft de LED-strip.div#colorBlock komen straks enkele voorgedefinieerde kleuren te staan. Deze links worden
vanuit de JavaScript-code gegenereerd.
.jscolor verbonden met button#colorWheel.onChange-event in actie. De
achtergrondkleur van de button wijzigt en de tekst wordt vervangen door de gekozen HEX-waarde.Deze pagina is volledig klaar. Hier hoef je niets meer aan te wijzigen.
colors bevat een reeks voorgedefinieerde kleuren. Elke string
binnen de array bestaat uit twee delen. Voor de spatie staat de HEX-kleur die je publiceert op PubNub
en na de spatie een rgba-kleur die de rand van de buttons accentueert.
c is terug een array en deze bevat twee elementen.c[0] = 2A0000 en c[1] = 255,0,0,.3.<span class="..." data-rgb="2A0000" style="border-bottom-color:
rgba(255,0,0,.3)">...</span>div#colorBlock
toegevoegd. Merk op dat je aan de span-tag enkel de border-bottom-color meegeeft. De twee
overige eigenschappen ( border-bottom-width en border-bottom-style) zijn voor alle buttons
hetzelfde. Deze vind je terug in de CSS-code op de indexpagina.
#vibrate klikt, wordt een willekeurige kleur gegenereerd en
vervolgens via PubNub gepubliceerd.
data-rgb uit en publiceer deze.
000000) te publiceren.
Met de plug-in cordova-plugin-shake kan je
een schudbeweging detecteren. De gevoeligheid staat ingesteld op 40. Elke gedetecteerde beweging roept de
functie shuffle() op en publiceert deze waarde op PubNub.
Voorlopig genereert shuffle() enkel een rode kleur.
shuffle() door:
Genereer een random HEX-waarde voor rgb. De laagts HEX-waarde is 000000, de hoogte
HEX-waarde is FFFFFF. Om al te felle kleuren te vermijden, ga je niet het volledig spectrum
gebruiken, maar ga je de maximale waarde beperken tot 6F6F6F.
Helemaal bovenaan de pagina vind je twee arrays (digit1 en digit2). Binnen de for-lus ga je drie
maal een willekeurige waarde uit beide arrays plukken en deze aan de string rgb plakken.
Hiervoor gebruik je enkele wiskundige functies van JavaScript. Math.random() genereert een getal
tussen 0 en 0.999.... Vermenigvuldig dit getal nu met de lengte van de array. Voor digit2
geeft dit een getal tussen 0 en 15,999.... Vervolgens ga je dit getal met Math.floor
naar beneden afronden. Je houdt nu nog enkel een geheel getal (0, 1, ... of 15) over. Stel
dat je op getal 11 uit komt, dan is digit2[11] gelijk aan B.
De init-functie bevat de volledige configuratie van PubNub.
m.message. Haal vervolgens de kleur op (m.message.color) en geef de waarde door
naar de functie _changeColorWheel(rgb).
_changeColorWheel(rgb). Dit is
vooral handig als meerdere personen dezelfde app gebruiken. Zo blijven alle apps volledig synchroon met
elkaar.
Verder bevat het script nog twee functies.
{"color":"0000FF"}. Tip: je kan alle wijzingen opvolgen in de PubNub console.
button#colorWheel. Merk op dat we via
try-catch werken. Het kleurenpalet van jscolor bevat niet alle 16M kleurcombinaties die je
met RGB kan vormen. Stel dat je een random kleur genereert die niet in het palet voorkomt, dan krijg je op
lijn 52 een fout. Catch zal de fout dan opvangen. Werk je niet met catch, dan "hangt" de
toepassing en zal je de app volledig moeten herstarten.