[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.

 

 

Zur Werkzeugleiste springen