Photon: Das Board für IoT-Maker

Seite 3: Apps entwickeln

Inhaltsverzeichnis

Zur Veranschaulichung der Programmierung folgt nun der Code für die Standard-App aus der IDE, mit der sich eine LED über die Cloud beziehungsweise über das Web fernsteuern lässt. Zunächst müssen Entwickler die LEDs beziehungsweise deren digitale Ausgänge deklarieren:

int led1 = D0; // Erste  LED an Digitalausgang 0
int led2 = D7; // Zweite LED an Digitalausgang 7

Danach erfolgt in der Initialisierungsroutine setup() die Anmeldung eines neuen Dienstes beziehungsweise der Cloud-Funktion namens led, die das ferngesteuerte Ein- und Ausschalten von LEDs an D0 und D7 erlaubt. Den eigentlichen Code der Cloud-Funktion enthält die Methode ledtoggle():

void setup()
{
pinMode(led1, OUTPUT); // led1 ist ein Ausgang
pinMode(led2, OUTPUT); // led2 ist ein Ausgang
   // Registrieren des Cloud-Dienstes led => 
// Funktionalität in ledtoggle():
Spark.function("led",ledToggle);

digitalWrite(led1, LOW); // Zum Start Licht von LED 1 aus
digitalWrite(led2, LOW); // Zum Start Licht von LED 2 aus
}

In der Hauptereignisschleife ist kein weiterer Code hinterlegt, zumal die Vereinbarung einer Cloud-Funktion ein reaktives Programmierparadigma impliziert:

void loop() { /* Nichts zu tun */ }

Am Schluss findet sich in der App die Definition der über die Cloud aufrufbaren Funktionen. Über das Argument command können Aufrufer Befehle als Argument übergeben. Der Befehl on schaltet die LEDs an den digitalen Ausgängen D0 und D7 ein, der Befehl off schaltet sie wieder aus. Die Funktion liefert eine ganze Zahl als Ergebnis zurück: nach Einschalten der LED 1, nach Ausschalten 0 und bei einem nicht erkannten Kommando -1.

int ledToggle(String command) {
if (command=="on") {
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
return 1;
}
else if (command=="off") {
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
return 0;
}
else {
return -1;
}
}

Sobald das drahtlose Flashen der Anwendung auf dem Photon erfolgt ist, stehen die beschriebenen Funktionen per Cloud zur Verfügung. Ergänzend sei bemerkt, dass Anwender neben Cloud-Funktionen zusätzlich Cloud-Variablen zur Verfügung stellen können.

Beispielsweise ist der Zugriff darauf über die Kommandozeilenwerkzeuge des Particle CLI (Command Line Interface) möglich. Die zurückgemeldeten Resultate 1 und 0 sind jeweils auf der Folgezeile der Befehlssequenz zu sehen.

iMaciMike:~ michael$ particle call MichaelsPhoton led on
1
iMaciMike:~ michael$ particle call MichaelsPhoton led off
0

Um die Kommandozeilenunterstützung zu verwenden, müssen Entwickler Folgendes besitzen:

  • ein System mit Linux, OS X oder Windows
  • eine Installation von Node.js

Der Paketmanager npm erlaubt die Installation der Kommandozeilenumgebung (CLI) über folgende Kommandofolge:

$ npm install -g particle-cli
$ particle login

Weitere Installationsdetails stehen in der offiziellen Dokumentation.

Zugriff über JavaScript

Auch JavaScript lässt sich für den Zugriff auf das Photon verwenden. Eine Installation von Node.js vorausgesetzt, braucht es hierfür die Installation der Particle JavaScript API:

$ npm install particle-api-js

Die App apidemo.js im nachfolgenden Listing meldet sich nach Aufruf von

node apidemo.js

in der Cloud an und ruft – wie das vorangegangene Beispiel für die Kommandozeilenkonsole – die Cloud-Funktion led auf, um die LED auf dem Photon einzuschalten.

Entwickler müssen die App noch um Folgendes ergänzen:

  • Name und Passwort,
  • ein Authentisierungstoken, das sich in der jeweiligen Entwicklungsumgebung unter Einstellungen (Settings) verbirgt,
  • die Device ID, die in der Entwicklungsumgebung unter Geräte (Devices) auftaucht.
  // API importieren
var Particle = require('particle-api-js');

var particle = new Particle();

// Einloggen:
particle.login({username: '<USER>',
password: '<PASSWORD>'});
  var token = '<TOKEN>'; 
  // Geräteliste abfragen:
var devicesPr = particle.listDevices({ auth: token });
  // ... und anzeigen:
devicesPr.then(
function(devices){
console.log('Devices: ', devices);
},
function(err) {
console.log('List devices call failed: ', err);
}
);

// Cloud-Funktion aufrufen:
fnPr = particle.callFunction(
{ deviceId: '<DEVICE-ID>',
name: 'led', argument: 'on', auth: token });

// ... und Ergebnis anzeigen:
fnPr.then(
function(data) {
console.log(Erfolgreicher Aufruf: ', data);
}, function(err) {
console.log('Fehler aufgetreten: ', err);
});