Genießen Sie diesen Titel jetzt und Millionen mehr, in einer kostenlosen Testversion

Nur $9.99/Monat nach der Testversion. Jederzeit kündbar.

JavaScript für Raspi, Arduino & Co.: Roboter, Maker-Projekte und IoT-Geräte programmieren und steuern

JavaScript für Raspi, Arduino & Co.: Roboter, Maker-Projekte und IoT-Geräte programmieren und steuern

Vorschau lesen

JavaScript für Raspi, Arduino & Co.: Roboter, Maker-Projekte und IoT-Geräte programmieren und steuern

Länge:
838 Seiten
5 Stunden
Herausgeber:
Freigegeben:
Aug 23, 2018
ISBN:
9783960884231
Format:
Buch

Beschreibung

JavaScript ist die beliebteste Programmiersprache der Welt und der Standard für Webcoder. Elektronikbastler steuern jedoch ihre Geräte im Internet
der Dinge meist mit anderen Sprachen. Warum also nicht diese beiden kreativen Welten zusammenführen?
Dieses ansprechend illustrierte und praxisorientierte Buch bringt Ihnen bei, wie Sie mit JavaScript auf Plattformen wie Arduino, Tessel 2 und Raspberry Pi Wetterstationen, motorisierte Geländefahrzeuge, Bluetooth-Türklingeln und vieles mehr konstruieren können. Schließen Sie einfach alles an, von Motoren über Touchscreens bis hin zu Bodenfeuchtesensoren, und schon geht's los! Mit dem node.js-Framework Johnny-Five sind Sie in der Lage, Arbeitsabläufe für die Entwicklung zu nutzen, die Ihnen als WebentwicklerIn
vertraut sind. So macht Hardware-Prototyping Spaß und funktioniert intuitiv und schnell.
Die Kapselung des Verhaltens in Komponentenklassen, die Johnny-Five bietet, ist leicht zugänglich und der resultierende Code ist meist viel sauberer und leichter handzuhaben als viele Arduino-Bibliotheken. Außerdem können Sie über den Package-Manager npm das nahezu unerschöpfliche Angebot der weltweiten Node.js-Community nutzen und Module importieren.
Sie erhalten einen intensiven Crash-Kurs in Grundlagen-Elektronik – Vorkenntnisse werden nicht erwartet. Schritt für Schritt erweitert das Buch Ihr Wissen. Bald erschaffen Sie Ihre eigenen Konstruktionen, die aufleuchten, Geräusche erzeugen, Daten austauschen, sich bewegen oder ihre Umgebung wahrnehmen können.
Verwenden Sie JavaScript, um das Internet der Dinge zum Leben zu erwecken!
Herausgeber:
Freigegeben:
Aug 23, 2018
ISBN:
9783960884231
Format:
Buch

Über den Autor


Ähnlich wie JavaScript für Raspi, Arduino & Co.

Ähnliche Bücher

Ähnliche Artikel

Buchvorschau

JavaScript für Raspi, Arduino & Co. - Lyza Danger Gardner

liest.

Teil I

Einführung in die Hardware für JavaScript-Programmierer

In diesem Teil des Buchs erhalten Sie eine Einführung in die Grundlagen eingebetteter Systeme und elektronischer Schaltkreise. In Kapitel 1 erfahren Sie, was eingebettete Systeme sind und wie Sie deren Bestandteile untersuchen können. Wir beschäftigen uns damit, was es eigentlich bedeutet, dass JavaScript Hardware »steuert«, und sehen uns verschiedene Möglichkeiten an, mit denen JavaScript und Elektronik zusammenwirken können.

In Kapitel 2 lernen Sie die Entwicklungsplatine Arduino Uno R3 kennen, die wir in allen Experimenten bis Kapitel 7 einsetzen werden. Sie erfahren, wozu die Hauptbestandteile von Entwicklungsplatinen da sind und wie sie mit anderen Hardware- sowie mit Softwarekomponenten zusammenarbeiten. Außerdem führen Sie einige einfache LED-Experimente mit dem Uno durch, wobei Sie sowohl die Arduino-IDE als auch das Node.js-Framework Johnny-Five verwenden.

In Kapitel 3 erlernen Sie die Grundlagen elektronischer Schaltkreise. Wir beschäftigen uns darin mit dem Ohmschen Gesetz, das den Zusammenhang zwischen Spannung, Stromstärke und Widerstand beschreibt. Auf einem Steckbrett bauen Sie Reihen- und Parallelschaltungen mit mehreren LEDs auf.

Wenn Sie diesen Teil des Buchs durchgearbeitet haben, verfügen Sie über Kenntnisse in den Grundlagen eingebetteter Systeme und Schaltkreise. Damit sind Sie bereit, kleine, über JavaScript gesteuerte Projekte mit verschiedenen Arten von Eingaben und Ausgaben zu bauen.

1JavaScript und Hardware zusammenbringen

Inhalt dieses Kapitels

Komponenten und Hardware für Hobbyprojekte und das »Internet der Dinge«

Gängige Komponenten eingebetteter Systeme

Verschiedene Methoden zur Verwendung von JavaScript in eingebetteten Systemen

Werkzeug und Material

Als Webentwickler mit JavaScript-Kenntnissen bedienen Sie sich täglich der Alchemie der Logik. Jetzt aber können Sie Ihre Fähigkeiten zur Softwareentwicklung auch auf eine neue Weise anwenden, nämlich um reale Gegenstände zu programmieren und zu steuern. In diesem Kapitel lernen Sie die Hardware kennen, die in verschiedenen Projekten und Geräten genutzt wird, und erfahren, wie JavaScript und Hardware zusammenwirken können.

Wir sind von kleinen, magischen Dingen umgeben, in denen die physische Welt mit dem Reich der Logik, der Vernetzung und des Virtuellen verschmolzen ist (siehe Abb. 1–1). Ein Schlüsselbund, der drahtlos seinen Standort meldet, sodass Sie ihn über eine App auf Ihrem Smartphone finden können; ein Blumentopf, der Jammerlaute von sich gibt, wenn die Pflanze gegossen werden muss, oder Ihnen vielleicht eine drängende Textnachricht sendet! Überall auf der Erde gibt es Milliarden solcher Objekte, die blinken, piepsen, twittern, automatisch das Licht dämpfen, Tee zubereiten oder ihre sonstigen besonderen Aufgaben ausführen.

Es macht Spaß, diese Sachen zu bauen. Die Kreativität bei der Gestaltung solcher technischen Spielereien und das Pioniergefühl bei der Erfindung selbstgestrickter Projekte sind für Webentwickler sehr ähnlich. Wir sind dazu geboren, Prototypen zu entwickeln, mit neuen Technologien zu experimentieren und neue Wege zu gehen.

Darin einzusteigen, kann jedoch entmutigend sein. Wir sehen überall Drähte und Komponenten, hören Leute in ihrem Jargon reden, schauen von außen auf die Gemeinschaft der Hardwarebastler und die verlangten Fähigkeiten wirken Respekt einflößend und fremdartig. Wenn Sie als JavaScript-Entwickler Ihren ersten zaghaften Vorstoß in die Welt der physischen Hardware unternehmen, sehen Sie sich unter Umständen einigen Hürden gegenüber – scheinbarer Kompliziertheit, einem Überangebot weit verstreuter Informationen und der Verschmelzung der Hardware und Software.

Abb. 1–1Oh, die magischen Dinge in unserer Welt!

Wir werden unsere JavaScript-Kenntnisse als Vorteil nutzen, um zu lernen, wie wir die Art von Dingen entwerfen und bauen können, die das »Internet der Dinge« (Internet of Things, IoT) ausmachen und die Hardwarebastler anregen. Ihre Erfahrungen in der Softwareentwicklung können Ihnen helfen, einigen Ablenkungen auszuweichen und sich schnell auf die neuen Fähigkeiten zu konzentrieren, die Sie erlernen müssen.

Um ein Gefühl dafür zu bekommen, was Sie erwartet, sehen wir uns als Erstes an, was für Arten von Dingen Sie hier zu bauen lernen. Was genau meinen wir damit, wenn wir »Dinge« oder »Hardware« sagen?

1.1Der Aufbau eines Hardwareprojekts

Wir können ein kleines Gerät bauen, das automatisch einen Lüfter einschaltet, wenn es zu warm wird. Diese unabhängige Mini-Klimaanlage überwacht ständig die Umgebungstemperatur. Wenn es zu heiß wird, startet der Ventilator. Kühlt es wieder ab, wird der Ventilator abgeschaltet.

Für die Erfindung eines solchen zugegebenermaßen ziemlich prosaischen Apparats würden wir zwar keinen angesehenen Preis gewinnen, doch seine Grundelemente sind auch in anderen, anspruchsvolleren Dingen zu finden, die Sie hier zu bauen lernen werden.

Eingänge und Ausgänge

Das Wichtigste – besser gesagt, das Einzige –, was unser temperaturgesteuertes Gerät tun muss, ist, einen Ventilator einzuschalten, wenn es zu warm wird, und ihn wieder abzuschalten, wenn die Umgebung abgekühlt ist. Der motorgetriebene Ventilator ist dabei ein Beispiel für ein Ausgangsgerät.

Um kontinuierlich Informationen über die Temperatur der unmittelbaren Umgebung zu erhalten, damit das Gerät entscheiden kann, ob es den Ventilator ein- oder ausschalten soll, brauchen wir Daten von einem Eingang, in diesem Fall von einem Temperatursensor (siehe Abb. 1–2).

Eingänge speisen Daten in das System ein, wobei Sensoren Eingänge sind, die Daten über die physische Umgebung liefern. In Ihren Projekten können Sie alle möglichen Arten von Sensoren verwenden, z.B. für Licht, Wärme, Erschütterungen, Dämpfe, Feuchtigkeit, Gerüche, Bewegung, Flammen oder was auch immer. Einige dieser Sensoren – darunter auch der Temperatursensor für unseren Ventilator – liefern einfache Daten wie einen einzigen Wert für die Temperatur. Andere dagegen, z.B. GPS-Sensoren oder Beschleunigungsmesser, stellen ausführlichere Daten bereit.

Die Ausgänge eines Projekts stellen dessen Nettofunktionalität für den Benutzer dar. Blinkende Lichter, nervtötende Piepsgeräusche, Statusanzeigen auf LCD-Bildschirmen, ein Roboterarm, der sich zur Seite bewegt – all dies sind Formen von Ausgängen. In unserem Projekt ist der Ventilator der einzige Ausgang.

Eingänge und Ausgänge müssen nicht unbedingt der physischen Welt angehören. Wenn ein Kunde ein Produkt online bestellt (virtueller Eingang) und dabei ein Fehler auftritt, kann das dazu führen, dass an einem Gerät auf dem Schreibtisch eines Technikers ein rotes Lämpchen aufleuchtet (physischer Ausgang). Umgekehrt kann eine Veränderung der Bodenfeuchtigkeit (physischer Sensoreingang) veranlassen, dass ein Blumentopf eine Textnachricht mit einer Gießanforderung sendet (virtueller Ausgang).

Abb. 1–2Der automatische Ventilator muss einen Eingang vom Temperatursensor entgegennehmen und als Ausgang einen motorgetriebenen Ventilator steuern.

Verarbeitung

Unser automatischer Ventilator braucht auch ein Gehirn, also etwas, das auf die Messwerte des Temperatursensors achtet und den Ventilator einschaltet, wenn es zu heiß wird. Bei diesem Gehirn handelt es sich um einen winzigen Computer: einen Prozessor mit etwas Arbeitsspeicher und der Fähigkeit, Eingänge zu verarbeiten und Ausgänge zu steuern. Wenn Prozessor, Arbeitsspeicher und E/A-Funktionalität in einem Gehäuse vereint sind, nennen wir den betreffenden Chip einen Mikrocontroller (siehe Abb. 1–3).

Abb. 1–3Der automatische Ventilator braucht ein Gehirn. Eine gängige Möglichkeit dafür ist ein Mikrocontroller, der einen Prozessor, Arbeitsspeicher und E/A-Fähigkeiten in einem einzigen Gehäuse vereint.

Mikrocontroller (kurz MCUs für Microcontroller Unit) sind nicht so leistungsfähig wie die Allzweckprozessoren in Laptops. Die meisten sind nicht in der Lage, ein Betriebssystem auszuführen (die meisten, nicht alle, wie wir noch sehen werden), aber dafür sind sie billig, zuverlässig, klein und verbrauchen nur ein Minimum an Strom. Aus diesen Gründen sind sie in Hardwareprojekten und Produkten wie unserem zweifelhaften automatischen Ventilator praktisch allgegenwärtig.

Strom, Schaltkreise und Systeme

Wir haben jetzt also einen Eingang, einen Ausgang und ein Gehirn. Damit ist es an der Zeit, die Einzelteile zu einem System zusammenzubauen. Wir müssen die Komponenten über einen oder mehrere elektronische Schaltkreise miteinander verbinden und außerdem mit Strom versorgen. Zur Konstruktion eines Systems gehören sowohl die Planung des Schaltkreises als auch die physische Anordnung der Komponenten (siehe Abb. 1–4).

Der unmittelbare Anschluss von Drähten an die Kontakte eines Mikrocontrollers, die meistens als Pins bezeichnet werden, würde Lötarbeiten und eine ruhige Hand erfordern. Außerdem hätten wir dann am Ende eine Menge einzelner, nur über Drähte verbundener Teile, die sich nur schwer handhaben lassen. Als Hilfe für Hardwareentwickler sind Mikrocontroller oft auf Entwicklungsplatinen montiert (siehe Abb. 1–5), die es unter anderem erleichtern, E/A-Geräte anzuschließen.

Abb. 1–4Diese grobe Übersicht zeigt, wie der Eingang, der Ausgang und der Mikrocontroller in einem System mit Stromversorgung und Schaltkreisen verbunden sind. Machen Sie sich keine Sorgen, wenn Ihnen die hier gezeigten Symbole noch neu sind – im weiteren Verlauf werden wir Schaltkreise noch genauer besprechen.

Abb. 1–5Entwicklungsplatinen mit Mikrocontroller erleichtern den Anschluss von Eingangs- und Ausgangsgeräten.

Eine Entwicklungsplatine ist schon praktisch, aber wir haben dabei immer noch mit einer Menge Drähte und loser Komponenten zu tun. Um für Ordnung zu sorgen, verwenden Hardwarekonstrukteure für den physischen Aufbau der Schaltkreise ein Hilfsmittel zur Prototypentwicklung, das als Steckbrett bezeichnet wird (siehe Abb. 1–6).

Abb. 1–6Ein Steckbrett besteht aus einem Raster leitend verbundener Kontakte, auf denen Sie elektronische Schaltkreise aufbauen können.

Logik und Firmware

Unser Hardwaredesign macht schon Fortschritte, aber woher soll der Mikrocontroller wissen, was er zu tun hat? Wie das folgende Listing zeigt, ist dazu eine Logik erforderlich, die den Sensor abfragt, eine Entscheidung trifft und Anweisungen zum Ein- oder Ausschalten des Ventilators sendet.

Listing 1–1: Pseudocode für den temperaturgesteuerten Ventilator

initialize temperatureSensor

initialize outputFan

initialize fanThreshold to 30 (celsius temperature)

loop main

read temperatureSensor value into currentTemp

if currentTemp is greater than fanThreshold

if outputFan is off

turn outputFan on

else if currentTemp is less than or equal to fanThreshold

if outputFan is on

turn outputFan off

Die beherrschende Sprache für die Programmierung von Mikrocontrollern war lange Zeit C (bzw. C-ähnliche Derivate). C-Code für Mikrocontroller ist jedoch oft plattformspezifisch und kann ziemlich maschinennah sein. Es kommen dabei häufig Verweise auf bestimmte Speicheradressen sowie Bitoperationen vor.

Der Code wird in architekturspezifischen Assemblercode kompiliert. Um den Code auf das Projekt zu übertragen, wird er physisch in den Programmspeicher des Mikrocontrollers hochgeladen (wobei man auch von Flashen spricht).

Dieser Programmspeicher ist gewöhnlich nicht flüchtig, also ROM, die Art von Speicher, die es dem Mikrocontroller erlaubt, sich auch dann noch an ein Programm zu erinnern, wenn er zwischendurch abgeschaltet wurde (im Gegensatz zum RAM-Speicher, der seinen Inhalt nur behält, während er eingeschaltet ist). Der für Programme verfügbare Platz ist beschränkt und bewegt sich meistens in der Größenordnung von wenigen Dutzend Kilobyte, weshalb Programme für Mikrocontroller sorgfältig optimiert werden müssen.

Wenn ein Programm auf den Mikrocontroller hochgeladen wurde, dient es als dessen Firmware. Wird der Mikrocontroller eingeschaltet, so führt er das Programm kontinuierlich aus, bis er mit etwas anderem programmiert (oder zurückgesetzt) wird.

Für JavaScript-Entwickler, die an eine Logik höherer Ebene gewöhnt sind, kann diese architekturspezifische Maschinennähe abstoßend wirken. Aber keine Sorge – hier kommt uns JavaScript zu Hilfe, denn damit können wir Programme für Mikrocontrollerhardware schreiben, ohne C benutzen und uns mit den Feinheiten von hexadezimalen Registeradressen herumschlagen zu müssen.

Außerdem ist der Vorgang, um Programmfirmware auf einen Mikrocontroller zu übertragen, dank der Fortschritte in der Chiptechnologie und der breiten Verfügbarkeit bastlerfreundlicher Entwicklungsplatinen inzwischen viel einfacher geworden (siehe Abb. 1–7).

Abb. 1–7Nicht flüchtiger Programmspeicher (EEPROM und Flash) und benutzerfreundliche Platinen machen es einfacher, Mikrocontroller mit Firmware zu programmieren.

EEPROM (Electrically Erasable Programmable ROM, also »elektrisch löschbarer, programmierbarer ROM«) und insbesondere sein bekanntester Vertreter, der Flash-Speicher, werden häufig für Mikrocontroller verwendet. Diese Art von überschreibbarem Speicher macht es möglich, Mikrocontroller immer wieder mit neuer Logik zu programmieren.

Entwicklungsplatinen erleichtern nicht nur den Anschluss von E/A-Verbindungen, sondern helfen Hardwareentwicklern auch dadurch, dass sie komfortable Schnittstellen für die Programmierung des Mikrocontrollers bereitstellen (hauptsächlich USB). Dadurch entfällt die Notwendigkeit von besonderen Hardwareprogrammiergeräten. Dieser Tage ist zur Programmierung von Mikrocontrollern oft nicht mehr nötig, als ein USB-Kabel anzuschließen und in einer IDE auf eine Schaltfläche zu klicken.

Gehäuse

Das Design für unseren Ventilator ist fast fertig. Wir können es aber noch verbessern, indem wir unseren automatischen Lüfter in ein ansprechendes Gehäuse packen, also unser System in etwas anderes einbetten, sodass die Drähte und Schaltkreise nicht mehr sichtbar sind (siehe Abb. 1–8). Voilà!

Abb. 1–8Der komplette automatische Ventilator mit Gehäuse ist ein Beispiel für ein eingebettetes System. Eingaben und Ausgaben werden von einem Computer auf der Grundlage eines Mikrocontrollers verarbeitet, Stromversorgung und Schaltungen unterstützen die Funktion und das Gesamtwerk ist in einem originellen Gehäuse verpackt – eben deswegen.

Eingebettete Systeme

Der Begriff eingebettetes System klingt ein wenig formal und vielleicht sogar furchteinflößend, aber in Wirklichkeit ist die Sache gar nicht kompliziert. Ein winziger Computer, der aus einem Prozessor, Arbeitsspeicher und E/A-Möglichkeiten besteht, bildet das Gehirn. Wie Sie bei unserem automatischen Ventilator gesehen haben, entsteht durch die Verbindung von Eingängen, Ausgängen und Mikrocomputer sowie einer Stromversorgung ein unabhängiges System. Wir nennen es eingebettet, da es oft in irgendetwas anderes eingebaut wird – ein Gehäuse, einen Teddybären, das Bedienfeld einer Waschmaschine oder einen Regenschirm.

Ein automatischer Ventilator, ein Regenschirm, der bei Regen aufleuchtet, und ein Teddybär, der Tweets versendet, wirken auf den ersten Blick nicht gerade ähnlich, aber sie haben mehr gemeinsam, als Sie vielleicht glauben. All diese Beispiele und der Großteil der Hardwareprojekte und Geräte, die das IoT bilden, können als eingebettete Systeme bezeichnet werden.

Als Nächstes sehen wir uns an, wie JavaScript in dieses Bild passt.

1.2Wie JavaScript und die Hardware zusammenarbeiten

Bei der Verwendung von JavaScript für eingebettete Systeme müssen wir die elektronischen Schaltkreise immer noch auf die gleiche Weise bauen wie bei anderen Hardwareprojekten. Es gibt nach wie vor Eingänge und Ausgänge, Drähte und Komponenten. Um festzulegen, was der Mikrocontroller oder Prozessor des Projekts tut, verwenden wir jedoch weder Assemblercode noch C, sondern JavaScript.

Es gibt verschiedene Möglichkeiten, um die Logik für Hardwareprojekte mithilfe von JavaScript bereitzustellen. Diese Methoden können wir danach einteilen, wo die JavaScript-Logik ausgeführt wird: auf einem Hostcomputer, der von dem eingebetteten System getrennt ist, auf dem Mikrocontroller des eingebetteten Systems oder irgendwo anders.

Host-Client-Methode

Um die Einschränkungen zu umgehen, die für manche Mikrocontroller gelten, können Sie JavaScript mithilfe der Host-Client-Methode auf einem leistungsfähigeren Hostcomputer ausführen. Während der Host den Code ausführt, tauscht er Anweisungen und Daten mit der eingebetteten Hardware aus, die sich dabei als Client verhält (siehe Abb. 1–9).

Viele Mikrocontroller weisen Einschränkungen auf, die die Ausführung von JavaScript auf ihnen beeinträchtigen. Der Programmspeicher ist begrenzt, sodass umfangreiche Programme entweder überhaupt nicht hineinpassen oder stark optimiert werden müssen. Des Weiteren haben viele billige Mikrocontroller eine 8- oder 16-Bit-Architektur mit Taktgeschwindigkeiten, die im Vergleich zu denen von Desktopcomputern relativ gering sind. Die meisten sind nicht in der Lage, ein Betriebssystem auszuführen, was es unmöglich macht, Node.js oder eine andere JavaScript-Laufzeit direkt auf dem Chip einzusetzen.

Abb. 1–9Die Host-Client-Methode zur Steuerung von Hardware mit JavaScript

Stattdessen läuft die JavaScript-Logik bei der Host-Client-Methode auf einem Hostcomputer, z.B. einem Laptop, der die erforderliche Leistung hat, um ein Betriebssystem auszuführen. Dieser Hostcomputer kann Node.js einsetzen und damit das weltweite JavaScript-Umfeld nutzen (einschließlich npm und das Web).

Der Trick besteht darin, dafür zu sorgen, dass die Clienthardware (hier der Mikrocontroller) und das Hostsystem (Ihr Laptop) miteinander in einer »Sprache« kommunizieren, die beide verstehen können, also über eine gemeinsame API (siehe Abb. 1–10).

Um unser automatisches Fächersystem für diese Vorgehensweise einzurichten, müssen wir die eingebettete Hardware erst vorbereiten, indem wir eine besondere Firmware in den Programmspeicher des Mikrocontrollers hochladen. Anders als ein spezifisches Programm für die Steuerung des Ventilators sorgt diese Firmware dafür, dass der Mikrocontroller in beiden Richtungen mit anderen Quellen kommunizieren kann, die dieselbe Sprache (d.h. dieselbe API) verwenden. Sie macht die mikrocontrollergestützte Hardware also zu einem Client, der auf den Hostcomputer lauscht und bereit ist, dessen Anweisungen auszuführen (siehe Abb. 1–11).

Abb. 1–10Damit Hostcomputer und Clienthardware bei der Verwendung dieser Methode miteinander kommunizieren können, müssen sie eine gemeinsame API verwenden.

Abb. 1–11Eine besondere Firmware macht aus der Hardware einen Client.

Die Hardware ist jetzt kommunikationsbereit. Der nächste Schritt besteht darin, auf dem Hostcomputer Software für den Ventilator zu schreiben. Damit die Hardware und die Software miteinander reden können, muss der Hostcomputer seine Anweisungen in einer Sprache geben, die der Mikrocontroller verstehen kann. Dazu schreiben wir Code mithilfe einer Bibliothek oder eines Frameworks, das die gemeinsame API implementiert (siehe Abb. 1–12).

Abb. 1–12Auch der Host muss über die gemeinsame API kommunizieren.

Der Host ist über ein Kabel (meistens USB) oder drahtlos (WLAN oder Bluetooth) mit der Clienthardware verbunden.

Anschließend führen wir den JavaScript-Code zur Ventilatorsteuerung auf dem Hostcomputer aus, der nun ständig Anweisungen für den Betrieb des Lüfters an den Client sendet. Der Client wiederum sendet Meldungen an den Host, nämlich die Daten des Temperatursensors (siehe Abb. 1–13).

Aber keine Angst, es ist nicht erforderlich, maschinennahe API-Software mit einem Firmware-Protokoll zu schreiben! Es gibt einfach zu verwendende Open-Source-Angebote für die Firmware und Node.js-Frameworks, die die Firmware-Protokolle implementieren. Daher können Sie die hostseitige JavaScript-Logik mit einem Minimum an Aufwand schreiben.

Der Vorteil der Host-Client-Methode besteht darin, dass sie sich leicht einrichten lässt und auf vielen Plattformen funktioniert. Vor allem aber können Sie dadurch das gesamte Node.js-Angebot nutzen und die Leistungs- und Speichereinschränkungen billiger Mikrocontroller umgehen. Der Nachteil ist jedoch, dass die Clienthardware ohne den Host nutzlos ist – sie kann nur dann etwas tun, wenn der Hostcomputer die Software ausführt.

Wir werden uns auch noch mit drahtlosen Verbindungen beschäftigen, aber zu Anfang nutzen wir die einfachste der Host-Client-Methoden, nämlich die Anbindung über USB. Das bedeutet, dass unsere Projekte zunächst physisch mit dem Computer verbunden sein müssen.

Abb. 1–13Während der Host die JavaScript-Logik ausführt, tauschen Client und Host kontinuierlich Anweisungen und Daten über eine gemeinsame API aus.

Eingebettetes JavaScript

Bei eingebettetem JavaScript wird die JavaScript-Logik zur Steuerung des Projekts unmittelbar auf dem Mikrocontroller der Hardware ausgeführt.

Viele Mikrocontroller sind nicht in der Lage, JavaScript direkt auszuführen, aber bei einigen ist es doch möglich. Angesichts des technischen Fortschritts ist es auch nicht verwunderlich, dass billige Mikrocontroller immer ausgefeilter werden. Auf bestimmten eingebetteten Prozessoren kann mittlerweile JavaScript oder eine optimierte JavaScript-Variante laufen.

Bei den Plattformen für eingebettetes JavaScript handelt es sich jeweils um Kombinationen aus Hardware und Software, die zusammenarbeiten. Die Hardware besteht dabei aus Entwicklungsplatinen, die leistungsfähigere (aber immer noch kostengünstige) Chips enthalten und damit in der Lage sind, Code direkt auszuführen.

Die meisten Plattformen bieten auch eine Suite von Softwaretools als Ergänzung zu der Hardware. Dabei kann es sich um eine Bibliothek oder ein Framework zum Schreiben von kompatiblem JavaScript-Code und um eine Befehlszeilenschnittstelle (Command-Line Interface, CLI) oder eine andere Methode zum Vorbereiten und Hochladen des Codes handeln.

Espruino (www.espruino.com) ist ein Beispiel für eine JavaScript-fähige eingebettete Plattform. Die JavaScript-Variante des Espruino kombiniert optimiertes Kern-JavaScript mit einer API mit hardwarerelevanten Merkmalen. Beispielsweise können Sie Code für den Espruino Pico in einer webgestützten IDE schreiben und dann über USB auf die Platine hochladen (siehe Abb. 1–14). Wenn wir für unseren automatischen Ventilator eine Espruino-Platine verwenden möchten, müssen wir die Logik mithilfe der Espruino-API schreiben.

Abb. 1–14Die Espruino-Plattform besteht aus kleinen Platinen und einer integrierten Entwicklungsumgebung (IDE).

Ein weiteres Beispiel für eingebettetes JavaScript ist der Tessel 2 (https://tessel.io/), eine Entwicklungsplattform auf der Grundlage von Node.js. Mit dem npm-Modul tessel-cli können Sie den Tessel steuern und Code auf ihn hochladen, und zwar sogar drahtlos, da der Tessel 2 über einen eingebauten WLAN-Anschluss verfügt (siehe Abb. 1–15).

Abb. 1–15Der Tessel 2 ist eine Open-Source-Plattform, auf der Node.js direkt ausgeführt werden kann.

Mit der Möglichkeit, JavaScript unmittelbar auf der eingebetteten Hardware auszuführen, lassen sich stromsparende und unabhängige Systeme konstruieren. Projekte sind unabhängige Systeme, die für sich allein laufen können. Anders als bei der Host-Client-Methode, die eine Firmware zur Übersetzung von JavaScript in Maschinencode benötigt, gibt es hierbei (gewöhnlich) weniger Abstraktionsschichten zwischen JavaScript und der Hardware.

Das klingt so gut, dass Sie sich vielleicht fragen, warum wir nicht ausschließlich diese Methode anwenden. Es gibt jedoch auch einige Nachteile. Erstens gibt es zurzeit ein geringeres Angebot an Hardware. Außerdem weist jede Plattform ihre besonderen Techniken auf (Software, Werkzeuge, Methodiken), was beim Lernen der Hardwaregrundlagen eher ablenkt. Die meisten dieser Plattformen unterliegen außerdem Einschränkungen, entweder in der Unterstützung einzelner Merkmale der Sprache JavaScript oder bei den verwendbaren Arten von Eingängen und Ausgängen. Insgesamt aber ist dies eine vielversprechende Methode mit einer großartigen Zukunft.

Andere Kombinationen von Hardware und JavaScript

Neben der Host-Client-Methode und der mit eingebettetem JavaScript gibt es noch einige andere Möglichkeiten, um JavaScript in Hardwareprojekten einzusetzen.

Kleine Ein-Platinen-Computer (Single-Board Computers, SBCs) stellen eine Verschmelzung von Host und Client zu einer einzigen Einheit dar. Clouddienste machen es möglich, JavaScript-Code online zu schreiben und drahtlos auf der Hardware bereitzustellen. Neu aufkommende experimentelle Einrichtungen in Webbrowsern bieten für Millionen von Webentwicklern einen Zugang zur Welt der Hardware.

JavaScript auf Ein-Platinen-Computern ausführen

Ein-Platinen-Computer wie der Raspberry Pi und der BeagleBone Black können eine komplette Betriebssystemumgebung (meistens Linux) und damit auch Node. js ausführen. Anstatt eines 8- oder 16-Bit-Mikrocontrollers verfügen sie über leistungsfähigere Allzweck-Prozessoren. Bei vielen von ihnen sind E/A-Pins und E/A-Fähigkeiten gleich in die Platine eingebaut (siehe Abb. 1–16).

Mit der Verwendung eines Ein-Platinen-Computers zur Steuerung eines Hardwareprojekts vereinen Sie die Aspekte der Host-Client-Methode und von eingebettetem JavaScript. Der Prozessor muss die JavaScript-Logik wie im Host-Client-Modell kontinuierlich ausführen, damit das Projekt funktioniert, aber alles Erforderliche ist auf einer einzigen Platine enthalten, weshalb das Ganze eher wie eine unabhängige, eingebettete Einrichtung wirkt.

Im Gegensatz zu Mikrocontrollern, auf denen eingebettete JavaScript-Logik läuft, können Ein-Platinen-Computer nicht nur ein einziges, zweckgebundenes Programm ausführen, sondern gleichzeitig auch mehrere andere Prozesse.

Ein-Platinen-Computer werden immer billiger. Zurzeit können Sie einen Raspberry Pi Zero schon für 5 € bekommen (falls Sie ihn bekommen – dieses Modell ist dafür berüchtigt, ständig ausverkauft zu sein) und den WLAN-fähigen Pi Zero W für wenig mehr. Es gibt keinen erheblichen Kostenunterschied mehr zwischen leistungsarmer Mikrocontroller-Hardware und echten Minicomputern mit Prozessoren, die denen von Tablets und Smartphones Konkurrenz machen.

Abb. 1–16Verschiedene Ein-Platinen-Computer: Intel Galileo Gen. 2 (oben), Raspberry Pi 2 Model B (unten links) und Raspberry Pi Zero (unten rechts)

Die Ausführung von JavaScript auf Ein-Platinen-Computern mit GPIO (General-Purpose I/O, also Allzweck-E/A) bietet Ihnen zwar viele Möglichkeiten in einem einzigen Hardwarepaket, weist aber auch einige Nachteile auf. So ist der Stromverbrauch nicht so gering wie bei Platinen mit Mikrocontrollern. Der Raspberry Pi 2 Model B beispielsweise zieht 4 W. Die Ein-Platinen-Computer, mit denen wir uns beschäftigen werden, unterstützen zwar GPIO, aber die Pinbelegung und -nutzung kann verwirrend sein und die Dokumentation ist oft lückenhaft und in technischem Jargon gehalten, weshalb die Verwendung für Einsteiger eine Herausforderung darstellen kann. Außerdem müssen Sie bereit sein, sich mit Systemadministration zu beschäftigen, da Linux-Distributionen für Ein-Platinen-Computer, insbesondere bei der Kombination mit Node.js, einiges an Debugging und Geduld erfordern.

Clouddienste und der Browser

Diese letzte, weit gefasste Kategorie für Hardware/JavaScript-Kombinationen ist zugegeben ziemlich schwammig. Dinge ändern sich, und zwar schnell. Das aktuelle Wachstum bei kommerziellen Clouddiensten für das IoT folgt der »Hockey-Stick-Kurve« und wir sehen uns gerade den ersten Fortschritten gegenüber, die einen direkten Zugriff vom Browser auf die Hardware ermöglichen.

Clouddienste sollen die Verwaltung ganzer »Flotten« von IoT-Geräten vereinfachen. Die meisten davon sind für Unternehmensanwendungen gedacht. Resin.io beispielsweise erstellt Containeranwendungscode, stellt ihn für vorgehaltene Geräte bereit und kümmert sich auch um einige der Sicherheits- und Automatisierungsprobleme.

Auch im Browser selbst kommen jetzt viele hochmoderne Hardware-JavaScript-Kombinationen auf. In einigen wenigen Browsern können Sie bereits mit Web Bluetooth experimentieren. Diese API gehört zwar noch nicht zum Standard, ist aber möglicherweise ein Vorbote zukünftiger Webentwicklungen. Wie der Name schon sagt, ermöglicht Web Bluetooth Ihnen, von Ihrem Browser aus mit JavaScript Verbindung mit BLE-Hardware (Bluetooth Low Energy) aufzunehmen und sie zu steuern.

Abb. 1–17Der Dienst Resin.io hilft, die Bereitstellung von Anwendungen auf Linux-fähigen Ein-Platinen-Computern und deren Verwaltung zu rationalisieren.

Physical Web, ein weiteres offenes Projekt von Google, baut auf einer einfachen Idee auf: Ein kleines Gerät bekommt die Fähigkeit, einen URL über Bluetooth Low Energy zu senden. Mit einem solchen Beacon kann beispielsweise ein Bushalteschild den URL einer Webanwendung mit Informationen über die tatsächlichen Ankunftszeiten der Busse senden (siehe Abb. 1–18). Ein einfaches, aber vielseitiges Konzept!

Abb. 1–18In dieser Beispielanwendung für Physical Web verwendet das Schild einer Bushaltestelle einen BLE-Beacon, um einmal pro Sekunde einen URL zu senden (1). Personen in der Nähe können auf ihren Geräten nach verfügbaren Beacons suchen und den der Bushaltestelle auswählen (2). Das Gerät des zukünftigen Passagiers ruft den vom Beacon gesendeten URL ab und zeigt ihn im Browser an (3).

Von allen Verknüpfungen zwischen JavaScript und Hardware ist diese Variante – die tiefe Verzahnung von Web und Hardware – die unberechenbarste. Sie ist gleichermaßen faszinierend wie unvorhersehbar. Sehr wahrscheinlich wird der Bedarf an weiteren Möglichkeiten, um IoT-Produkten mit JavaScript zu erstellen, zu einer atemberaubenden Beschleunigung in diesem Bereich führen.

1.3Ist JavaScript für Hardware geeignet?

Wir können also auf verschiedene Weise JavaScript zur Steuerung von Hardware einsetzen – aber sollten wir das auch tun? Ist das wirklich nützlich oder nur Selbstzweck?

Als vor einigen Jahren die Idee aufkam, JavaScript zur Hardwaresteuerung zu nutzen, war die Reaktion nicht von allgemeiner Begeisterung gekennzeichnet. Manche hielten dies für eine willkürliche Vorgehensweise und für fehlgeleitete Pfiffigkeit. Darin kam ein Überdruss nach dem Motto »Müssen wir JavaScript eigentlich überall einsetzen?« zum Ausdruck. Andere argumentierten, dass die Leistung von JavaScript auf eingeschränkter Hardware niemals für irgendwelche Anwendungen außerhalb des reinen Hobbybereichs ausreichen würde. Eine gewisse Gereiztheit der »alten Garde« trat zum Vorschein, Kommentarthreads verloren sich in leidenschaftlichen Beschimpfungen von allem außer C/C++ und die Bremser warnten davor, dass eine Sprache höherer Ordnung die wichtigen maschinennahen Hardwarenuancen für Neulinge verschleiern würden.

Es gab jedoch auch einige, die der neuen Idee gegenüber aufgeschlossen waren. Schließlich klang das Argument »Warum JavaScript verwenden, wenn C/C++ gut genug ist?« verdächtig nach dem Argument für einen früheren Paradigmenwechsel bei der Hardwaresteuerung: »Warum C verwenden, wenn Assemblersprache gut genug ist?«

Ob es nun eine geniale Idee ist oder nichts taugt – und wir werden hier nicht darüber diskutieren –, so ist doch JavaScript de facto die Programmiersprache des Internets. Sie ist bekannt, sie wird verwendet, sie ist überall. Ihre Allgegenwärtigkeit gibt JavaScript die einzigartige Möglichkeit, als Portal für Millionen von Webentwicklern zu dienen, die gern ihre ersten Gehversuche im IoT unternehmen möchten.

Einige Aspekte von JavaScript eignen sich sogar sehr gut für die Hardwaresteuerung, insbesondere die Leistung bei der Ereignisbehandlung und bei asynchronen Prozessen. Außerdem ist JavaScript ein gutes Werkzeug zum Erstellen von Prototypen und ein großes Plus für kurze Iterationen.

Es wird faszinierend sein zu sehen, wohin diese Entwicklung schließlich führen wird. Der JavaScript-Zug fährt aus dem Hardwarebahnhof heraus und eine Menge Leute springen noch auf.

1.4Der Werkzeugkasten für die Hardware

Sie haben jetzt im Schnelldurchlauf die Bestandteile von eingebetteten Systemen und die Methoden zur Kombination von Hardware und JavaScript kennengelernt. Als Nächstes sehen wir uns an, welche Arten von Hardware, Zubehör und Werkzeugen Sie benötigen, um Projekte dieser Art zusammenzubauen. Damit können Sie sich einen Fundus an Grundmaterialien zulegen, um Ihre ersten Schritte zu unternehmen.

In unseren Projekten kombinieren wir eine Entwicklungsplatine mit Eingangsund Ausgangshardware. Um Schaltkreise aufzubauen und die Systeme zu verbinden, brauchen Sie zusätzliche elektronische Bauteile wie Kabel, Stromversorgung und sonstiges Zubehör. Nehmen Sie noch ein paar einfache Werkzeuge hinzu und Sie können anfangen.

Entwicklungsplatinen

Entwicklungsplatinen – auch als Prototypplatinen oder kurz Platinen bezeichnet – sind physische Entwicklungsplattformen, die einen Mikrocontroller oder eine andere Verarbeitungseinheit mit nützlichen ergänzenden Einrichtungen kombinieren (siehe Abb. 1–19). Sie bilden das A und O für Hardwarebastler. Die Kosten bewegen sich von wenigen Euro bis zu über 100 € für gehobene Ein-Platinen-Computer.

Dreh- und Angelpunkt dieser Platine ist ihr Gehirn, eine Kombination aus Prozessor, Arbeitsspeicher und E/A-Möglichkeiten. Einfache Prototypplatinen für Einsteiger wie die meisten Arduinos (siehe Abb. 1–20) verwenden einen 8- oder 16-Bit-Mikrocontroller. Platinen mit anspruchsvolleren 32-Bit-Mikrocontrollern können sogar in der Lage sein, eingebettetes JavaScript auszuführen.

Nicht alle Platinen verwenden einen Mikrocontroller. Die leistungsfähigeren Ein-Platinen-Computer weisen Komponenten auf, wie man sie auch auf dem Motherboard eines Computers finden kann. Die Architektur dieser Platinen ist dementsprechend vielschichtiger und umfasst ein oder mehrere SoCs (System on a Chip) sowie zusätzliche Anschlüsse wie HDMI, Audio und Ethernet.

Abb. 1–19Einige typische Entwicklungsplatinen mit Mikrocontrollern, von oben links im Uhrzeigersinn: Tiva C-Series LaunchPad von Texas Instruments, Arduino Uno R3, Adafruit Trinket (5-V-Modell) und Particle Photon.

Abb. 1–20Das Gehirn dieses Arduino Uno ist ein 8-Bit-Mikrocontroller vom Typ AVR ATmega 328-P.

Ein-Platinen-Computer können zwar physische E/A-Schnittstellen aufweisen – wie es beispielsweise bei den Modellen des Raspberry Pi der Fall ist –, aber ihre Allzweckprozessoren können auch leicht für Projekte anderer Art eingesetzt werden.

Eingangs- und Ausgangskomponenten

Was für eine Menge von Sensoren und Dingsdas es gibt, die man in seinen Projekten an die Platinen anschließen kann! Man kann damit viel Spaß haben, aber auf den ersten Blick kann dieses Überangebot schon überwältigend wirken. Außerdem wird man von technischen Fachbegriffen fast erschlagen und es gibt so viele Zahlen, Werte und technische Daten, mit denen man sich beschäftigen muss. Beim Durcharbeiten dieses Buchs werden Sie aber lernen, sich zurechtzufinden.

Die meisten Eingangs- und Ausgangskomponenten, mit denen wir arbeiten, sind von einfacher Konstruktion und für den Anschluss an ein Steckbrett bereit. Einige sind auch als Erweiterungsplatinen (Breakout Boards) ausgeführt. Ebenso wie die Entwicklungsplatinen den Anschluss von E/A-Geräten erleichtern, indem sie die winzigen Kontakte des Mikrocontrollers mit besser zugänglichen Pins verdrahten, erleichtern diese Erweiterungsplatinen die Arbeit mit Sensoren und Ausgabegeräten, indem sie deren Kontakte über komfortablere Anschlüsse zugänglich machen (siehe Abb. 1–21).

Abb. 1–21Gebräuchliche Eingangs- und Ausgangskomponenten

Weitere elektronische Bauteile

Um elektronische Schaltkreise zusammenzubauen, brauchen Sie verschiedene zusätzliche elektronische Bauteile.

Es mag den Anschein haben, als gäbe es dabei eine Unmenge winziger Teile. Die Grundbausteine wie Widerstände, Kondensatoren, Dioden und Transistoren (siehe Abb. 1–22) sind jedoch billig und können auch bequem in Starterkits gekauft werden. Wir nehmen uns die Zeit, all diese Teile kennenzulernen. Schon bald werden sie Ihnen vertraut vorkommen!

Abb. 1–22Mit gebräuchlichen Bauteilen wie diesen können Sie funktionierende elektronische Schaltkreise aufbauen.

Stromversorgung, Kabel und Zubehör

Sie werden recht bald feststellen, dass es viele Möglichkeiten gibt, um ein Projekt mit Strom zu versorgen!

Entwicklungsplatinen können über USB oder über einen Gleichstromadapter

Sie haben das Ende dieser Vorschau erreicht. Registrieren Sie sich, um mehr zu lesen!
Seite 1 von 1

Rezensionen

Was die anderen über JavaScript für Raspi, Arduino & Co. denken

0
0 Bewertungen / 0 Rezensionen
Wie hat es Ihnen gefallen?
Bewertung: 0 von 5 Sternen

Leser-Rezensionen