[Nachlese nach einem Vortrag von Andy Kunar am 5. 3.2019]
Im Beitrag Raspberry für USB-OTG wurde der der Raspberry Pi Zero (hier im Bild) vorgestellt, mit dem das Beispiel onoff realisiert wurde. Aber prinzipiell sind diese ersten Schritte mit jeder Raspberry-Version ausführbar.
node.js
- Läuft unter Windows, Mac, Linux (damit auch am Pi) und mit OS-Erweiterungen (Termux,…) auch auf Android
- node ist die JavaScript Engine von Chrome/Chromium (V8-Engine) + … als Laufzeitumgebung für JavaScript Programme
- Extrem schnell (trotz dem interpretativen Charakter von JS)
- Mit Erweiterungen für Betriebssystemzugriff,…
- Für CLI Anwendungen oder Server (Ein-/Ausgabe über http = Web-Browser Frontend, REST oder dedizierte IO) – d.h. ohne GUI!
- npm (nicht: node package manager) – JavaScript Modulverwaltung
- Erste Schritte mit node.js (am PC)
Werkzeugkasten: npm
- Modulverwaltung mit 2 Module-Repositories:
global (npm –g ...
) und aktuelle Applikation (./node_modules
) - Versionsverwaltet!
- Installieren von Modulen npm i[nstall] <module>
- Update npm auf aktuelle Version:
npm i -g npm
- Anzeigen (global) installierter Module
npm list [-g] --depth=0
Werkzeugkasten: Visual Studio Code
- Komplette Entwicklungsumgebung, unterstützt breite Palette von Programmiersprachen + AddOns
- Visual Studio ist gratis und open source – läuft unter Windows, macOS, Linux, damit ggf. auch nativ am Linux-Pi
- Komplett neu in JavaScript (eigentlich TypeScript) unter
node.js
(eigentlich Electron) entwickelt – damit läuft es eben überall - Super “Technologiedemo” was mit JavaScript alles möglich ist!
- Im aktuellen Verzeichnis mit
code
. starten
Node.js Architektur & Demo
- Lädt und exekutiert JavaScript code
- JavaScript ist leicht ähnlich zu C/C++
- Primär single-threaded
console.log("Hello World");
Event-loop mit callbacks für Asynchrones – z.B. timer
var i=1; function nachricht() { console.log("Hello",i++); } setInterval(nachricht, 3000);
Node.js am Raspberry Pi
- Pi installieren – inkl. Netzwerk, ssh, samba (Dateifernzugriff)
- Für GPIO Diagnose ev. gpio Hilfsprogramm installieren
git clone git://git.drogon.net/wiringPi cd ~/wiringPi ./build (danach wiringPI Ordner wieder löschen – wir brauchen nur gpio)
- node.js über “n” (Versionsmanager für node.js) installieren
sudo apt -y install git Zugriff auf github sudo apt -y install npm JavaScript package management sudo npm install -g n node.js Versionsmanagement sudo n current aktuelle Version von node.js
Werkzeugkasten & Pi – Demo
- Pi Fernzugriff via ssh und Dateifreigabe
- npm & Module
- GPIO Zugriff:
onoff
(installiert vianpm i onoff
) - Es gibt jede Menge Module / Frameworks !! z.B. Angular, React, …
npmjs.com
listet alle Module (meistens mit Github Projekten)npm list [-g] --depth=0
zeigt die aktuell lokal/global installierten
- GPIO Zugriff:
- Visual Studio Code – als Editor per Dateifreigabe
Beispiel LED blinken lassen
- Hardwareaufbau: z.B. LED auf GPIO14 (gegen Gnd/Masse)
- Genaueres (aber mit anderem LED Pin): https://www.w3schools.com/nodejs/nodejs_raspberrypi_gpio_intro.asp
- Versuchsanordnung:
DEMO JavaScript Beispielcode
var Gpio = require('onoff').Gpio; // modul "onoff“, Klasse Gpio für GPIO Zugriff // wird installiert via: "npm i onoff" var led = new Gpio(14, 'out‘); // pin GPIO14 als "Ausgang" initialisieren function blinkLED() { // Blinkfunktion led.writeSync(led.readSync() ^ 1) // exklusiv-oder mit 1 } var blinkInterval = setInterval(blinkLED, 500); // blinkLED alle 500ms aufrufen
node.js und “native” – NAN/NAPI
- Node.js hat eine Schnittstelle um “native” Funktionen (C/C++) einzubinden – z.B. onoff verwendet diese für den Hardwarezugriff
- Alte Methode: nan (Problem: neu kompilieren für jede node-version!)
- Neue Methode: n-api (wird noch kaum verwendet)
- Nachteil: Hardwareabhängig!
Typescript
- Javascript bietet riesige Auswahl an Bibliotheken, Hilfsmitteln
- Aber: Javascript ist eigentlich ein “Horror”
- Kein Strong Typing, … – Tippfehler können zu Zeitbomben werden
- Ein Ausweg – TypeScript (Microsoft)
- Erfunden vom Vater von TurboPascal, Delphi, C# – Anders Hejlsberg
- “erwachsenes” Superset von Javascript – stong typing, generics,…
- Kompiliert nach Javascript (inkl. spezifischer js Versionen)
- Open Source, kostenlos
- Wer verwendet es: Microsoft (VS code), google (Angular 2+), …
Electron
- Node.js hat KEIN GUI, es ist für webserver, services,…
- GUI = Web Browser
- Electron (von Github entwickelt) – eine Paketierlösung für node.js zusammen mit der Rendering Engine von Chrome/Chromium + Cross-Platform Systemunterstützungs-funktionen (z.B. Betriebssystem Notifications,…). Läuft auf Windows, macOS, linux (d.h. auch am Pi)
- Beispiele für Electron Apps
- Atom, Visual Studio Code, Skype, Slack, WordPress, …
Wir bedanken uns bei Andy Kunar für seine Einblicke in die Raspberry Welt und bitten ihn – wenn es wieder Neues gibt – uns wieder darüber zu berichten.
Links
- Dieser Text (5.März 2019)
- Erste Schritte mit node.js (am PC)
- Raspberry für USB-OTG
- Folien zum Vortrag
- Fotos und Unterlagen
- Anmeldeseite
- Nachlese nach dem ersten Teil (27. September 2018)
Nachtrag “Raspberry als DNS”
In unserem Ordner “clubintern” sowohl sichtbar am cc|drive (https://drive.ccc.at)1) als auch auf unserem gemeinsamen OneDrive-Speicher im Ordner “Geteilt”2) findet Ihr den Artikel “2019-03-12 Raspberry Internetzugang.pdf”, eingesendet von Robert (Danke!). Im Artikel wird ein eigener DNS-Server beschrieben, der mit einem Raspberry Pi realisiert ist und der das häusliche Netzwerk in eine werbefreie Zone verwandelt.
1) Mit der Club-Id auf https://drive.ccc.at anmelden. Nach dieser erstmaligen Anmeldung eine Mail an buero {at} clubcomputer . at mit dem Text “Bitte um Aufnahme in die Gruppe clubcomputer.at” senden. Dann nehmen wir Dich in diese Gruppe auf.
2) Mit einem Windows-PC hast Du in der Regel auch eine Microsoft-Id. Bitte sende uns diese E-Mail-Adresse und wir können Dich in die gemeinsame Gruppe aufnehmen und Du bekommst damit automatisch Zugang zu unseren gemeinsamen Dateien.
Franz Fiala
Letzte Artikel von Franz Fiala (Alle anzeigen)
- Orientierung WordPress - 1. Juni 2023
- Orientierung-BOM - 29. Mai 2023
- Automatische Verzeichnisse - 27. Mai 2023
Neueste Kommentare