Bangle.js 2: Smartwatch mit eigenen Apps

Seite 4: Los geht's!

Inhaltsverzeichnis

Die Programmierung der Uhr ist sehr einfach und bedarf keinerlei Zusatzhardware, wie zum Beispiel eines Programmiergeräts. Nicht einmal ein Kabel ist notwendig, denn Programme werden drahtlos per Bluetooth ins Gerät gespielt.

Genauer gesagt passiert das mit Web Bluetooth, einer Technologie, die es Web-Applikationen ermöglicht, per Bluetooth mit der Außenwelt zu kommunizieren. Zurzeit unterstützen noch nicht alle Browser diesen Standard, aber Chrome, Edge und Opera haben ihn bereits integriert.

In diesen Browsern funktioniert daher die Espruino-IDE und mit einem Klick auf das gelbe Connect-Icon in der linken oberen Ecke sucht der Browser nach Bluetooth-Geräten in der Umgebung.

Hier hat der Chrome-Browser gleich zwei Bangle.js gefunden.

Sobald die Verbindung hergestellt wurde, können auf der linken Seite der IDE direkt JavaScript-Anweisungen ausgeführt werden. Das ist völlig analog zu den JavaScript-Konsolen gängiger Browser und eine perfekte Umgebung für Experimente.

Die Espruino-IDE ist einfach aber nĂĽtzlich.

Auf der rechten Seite gibt es einen Editor für umfangreichere Quelltexte, die mit den Icons in der Mitte entweder ins lokale Dateisystem, ins RAM des verbundenen Geräts oder in dessen Dateisystem transferiert werden können.

Videos by heise

Dank der hervorragenden Dokumentation des Espruino-Projekts sind erste Experimente ein Kinderspiel. Wer sich mit JavaScript ein wenig auskennt, kann in ein paar Stunden durchaus nĂĽtzliche Apps erstellen.

Insbesondere ist die Interaktion mit den Sensoren und Aktoren schon beinahe trivial. Vor allen Dingen, weil die API größtenteils auf Ereignissen (Events) basiert und somit alle Messdaten asynchron bereitstellt.

Wer dieses Programmiermodell nicht kennt, wird aber anfangs so seine Schwierigkeiten haben. Beispielsweise liefert die Funktion Bangle.getPressure() nicht wie erwartet den aktuellen Luftdruck zurück. Vielmehr ist ihr Rückgabewert ein Promise-Objekt, wie es heute in der JavaScript-Programmierung häufig verwendet wird. Ein solches Objekt kann entweder einen Wert oder aber einen Fehler enthalten und der Wert wird in der Regel asynchron berechnet.

Das bedeutet, dass die Funktion getPressure immer sofort zurĂĽckkehrt, im Hintergrund aber noch einiges an Arbeit erledigt. Um an das Ergebnis zu kommen, muss man das Promise-Objekt noch auswerten und zum Beispiel ĂĽber die then-Methode definieren, was mit dem RĂĽckgabewert zu tun ist. Bangle.getPressure().then(print) gibt daher den gemessenen Wert aus, sobald er ermittelt wurde. Genauer gesagt gibt diese Anweisung nicht nur den Luftdruck sondern alle Messwerte des BMP280 aus.

So gut wie alle Funktionen basieren auf Ereignissen.

Oft ist es aber gar nicht nötig, sich mit den Details von Promise-Objekten zu beschäftigen, denn die Bangle-Klasse erlaubt die Definition von Event-Handlern mittels der on-Methode. Das ist exakt so, wie in der Programmierung von Web-Anwendungen im Browser. Die folgenden Anweisungen reichen, um den Kompass der Bangle.js 2 zu aktivieren und die aktuellen Messwerte kontinuierlich in der Konsole auszugeben:

Bangle.setCompassPower(true, 'myapp');
Bangle.on('mag', print);

Die erste Anweisung schaltet den Kompass ein, weil er per Voreinstellung ausgeschaltet ist, um Strom zu sparen. Der String 'myapp' steht für den Namen der App, die den Kompass benötigt und auf diese Weise stellt Espruino sicher, dass keine App einer anderen aus Versehen irgendeinen benötigten Sensor abschaltet.

Mit der zweiten Anweisung verknĂĽpft Espruino das Ereignis 'mag' ("Der Magnetometer hat einen neuen Messwert erhalten") mit der Funktion `print` und gibt so jeden Messwert automatisch aus.

Diese kurzen Beispiele demonstrieren schon die wesentlichen Techniken, die bei der Programmierung der Bangle.js 2 zum Einsatz kommen. Zusammen mit der Dokumentation des Projekts dürften auch weniger erfahrene Entwickler – gute Englischkenntnisse vorausgesetzt – schnell erste Erfolgserlebnisse feiern.

Die Hardware ist zwar schon fertig und Tester können mit dem Produkt bereits experimentieren, aber dank eines Emulators kommen alle interessierten Entwickler schon jetzt in den Genuss, Apps für die Bangle.js 2 zu entwickeln.

Der Emulator spielt perfekt mit der Espruino-IDE zusammen und weil er kein Web Bluetooth benötigt, klappt er auch im Firefox-Browser.

Der Emulator funktioniert auch im Firefox-Browser.

Nach einem Klick auf das Connect-Icon fragt die IDE nach dem zu emulierenden Gerät. Momentan stehen lediglich Bangle.js und Bangle.js 2 zur Auswahl. Anschließend öffnet die IDE ein weiteres Fenster, welches das zu emulierende Gerät darstellt.

Es ist zwar nicht das Original, aber fĂĽr erste Tests besser als nichts.

Ab diesem Zeitpunkt erfolgt die Entwicklung genauso wie mit echter Hardware. Anweisungen in der Konsole auf der linken Seite führt der Emulator sofort aus und darüber hinaus können Quell-Texte sowohl direkt ins RAM als auch ins Dateisystem übertragen werden.

Natürlich ist die Emulation nie völlig kompatibel mit dem Original und die jetzige Version emuliert nur den Touch-Screen, den Button der Uhr und das Datei-System. Damit kann man schon eine ganze Menge machen, aber Bluetooth, GPS oder die anderen Sensoren werden nicht emuliert. Der Aufruf der entsprechenden Funktionen führt zwar nicht zu Fehlern, liefert aber auch keine sinnvollen Ergebnisse.