[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 via npm 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
  • Visual Studio Code – als Editor per Dateifreigabe

Beispiel LED blinken lassen

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

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

Präsident Clubcomputer / Herausgeber PCNEWS bei ClubComputer.at
Franz ist pensionierter HTL Lehrer (TGM), Präsident von ClubComputer, Herausgeber der Clubzeitung PCNEWS und betreut unser Clubtelefon und Internet Support. Er ist leidenschaftlicher Rapid Wien Fan.

Letzte Artikel von Franz Fiala (Alle anzeigen)