[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 war pensionierter HTL Lehrer (TGM), Präsident von ClubComputer, Herausgeber der Clubzeitung PCNEWS und betreute unser Clubtelefon und Internet Support. Er war leidenschaftlicher Rapid Wien Fan. Er ist leider Anfang Jänner 2024 nach langer schwerer Krankheit verstorben.
Neueste Kommentare