Raspberry Desktop IoT Starterkit

Diese Übersicht beschreibt Besonderheiten eines Raspberry 3B Desktop- Systems und soll keine Raspi- Einführungsliteratur ersetzen. Die Beschreibung kann den Einstieg in die vielfältige Raspberry PI / Arduino Welt aber sicher erleichtern.

Warum ein Raspberry PI 3B und kein Raspberry 4 ?

Der Raspi 3B wird nicht ohne Grund immer noch hergestellt und ist universeller einsetzbar. Er soll nicht wie der 4er leistungsmäßig mit einem PC oder gutem Tablet konkurrieren, sondern so vielfältig wie ein “Schweizer Offiziersmesser” die schnelle Realisierung von Internet of Thinks (IOT) - Projekten erleichtern.

Gegenüber dem Raspi 4 hat der 3B folgende Vorteile:

  • geringerer Stromverbrauch bzw. Verwendbarkeit einfacher Smartphone-Ladegeräte zur Versorgung und keine Notwendigkeit von Lüftern oder Kühlkörpern
  • gängige Micro-USB- und HDMI- Anschlüsse (statt USB-C und unüblichem Micro-HDMI)
  • volle Kompatibilität zu allen Erweiterungen (“Hats”) und Software, ein neuer Video-Core beim Raspi-4 kann zu Display-Inkompatibilität führen
  • größere Auswahl passender Gehäuse für Raspi 2 … 3B
  • geringerer Preis - Ersparnis vor allem bei dem für den Raspi 4 erforderlichem Zubehör (Netzteile, Lüfter, Kühlkörper, Gehäuse etc)

Was gehört alles zum System ?

  1. ein Raspberry 3B Board mit 4-Kern 64-Bit, 1.2 GHz ARM-CPU und 1 GB RAM
  2. ein 3.5’’ TFT-Touch-Display (320*480 Pixel resistiver Touch) mit Stift
  3. eine 64 GB Class 10 microSD Speicherkarte mit aktuellem Raspberry OS
  4. ein PLA 3D-Druck- Gehäuse für Raspi mit bestücktem Touch-Display
  5. ein 12.5 W USB-Netzteil nebst Micro-USB-Kabel
  6. eine faltbare Bluetooth Tastatur mit Touchpad
  7. Sebastian Pohls Raspberry Pi Kompendium (Buch)
  8. ein MQTT WiFi-Wetter-Sensor (Temperatur, Feuchtigkeit, Luftdruck) mit eiinem ESP-8266 Microcontroller
  9. ein Environment-Sensor (Temperatur, Feuchtigkeit, Luftqualität) mit eiinem ESP-8266 Microcontroller
  10. diverse eBooks zu allen relevanten Themen auf der Speicherkarte

vorinstallierte Software

Das System startet über eine microSD-Karte, auf der Raspberry OS 5.4.51 (früher Raspbian), eine Distribution von Debian-Linux installiert ist. Es wurde nur die Grundversion mit LXDE- Desktop (grafische Bedienoberfläche) installiert und folgende Pakete/Metapakete wurden hinzugefügt:

Paketname Name Beschreibung
mc Midnight Commander ein einfacher Dateimanager mit integriertem Texteditor
base-essential C/C++ Entwicklung alle Commandline-Tools zum Bauen von in C/C++ geschriebenen Apps und Libraries
tensilic C/C++ Cross Compiler C/C++ Cross-Compiler Paket für Tensilic Prozessoren (ESP8266 und ESP32)
arduino Arduino einfache C++ Entwicklungsumgebung für Microcontroller
nodejs, npm NodeJS Commandline-Tools zur Javascript Entwicklung
yarn JS Repository neue Paketverwaltung von Facebook für NodeJS Pakete (ersetzt npm)
VS Code Visual Studio Code universelle, freie IDE von Microsoft
openKB openKB Knowledge Base komplett in NodeJS Code
mosquitto mosquitto MQTT Broker service
node-red node-red Orchestrierung von MQTT Netzen

Als Beispiel für einen NodeJS Server ist der Quellcode dieser Wiki/Knowledge Base Software openKB im Verzeichnis /pi/projects/openKB installiert. Der Server kann per npm start gestartet werden und ist dann auf http://ollisraspi:4444 erreichbar. Dieser Server wird auf Port 4444 als TCP-Service gestartet.

Die Pakete Mosquitto, Mosquitto-clients und node-red ermöglichen Verwaltung und Orchestrierung umfangreicher Internet of Things (IoT) Netzwerke. Message Queuing Telemetry Transport (MQTT) ist das meist verbreitete Netzwerkprotokoll zur Integration unterschiedlichster Geräte in lokale Netze und Internet.

Der node-red Service wird beim Systemstart gestartet und die node-red Bedienoberfläche ist per http://ollisraspi:1880 erreichbar.

erreichbare Services

Service Port Zugang Aufgabe
SSH 22 pi@ollisraspi remote Terminal
VNC 5900 ollisraspi remote Desktop
openKB 8080 http://ollisraspi:4444 Knowledge Base
node-red 1880 http://ollisraspi:1880 Node Red Entwicklungsumgebung
node-red 1880 http://ollisraspi:1880/ui Node Red Dashboard
mosquitto 1883 MQTT messages Message Queue Telemetry Transport (MQTT)

Systemstart und Verbindungsmöglichkeiten

Verwendung mit externem HDMI Monitor

Als Voreinstellung wird der grafische Desktop auf einem angeschlossenem HDMI-Bildschirm gestartet, eine Passworteingabe ist nicht nötig.

Vorgehensweise zum Start:

  • HDMI Monitor am Raspi HDMI Ausgang anschließen und Monitor einschalten
  • Netzteil am Stromnetz anschließen und microUSB-Kabel mit dem microUSB-Anschluss des Raspi verbinden
  • Bluetooth Tastatur einschalten
  • das eingebaute Display sollte weiß leuchten und der HDMI-Monitor zuerst ein farbiges Quadrat und später den Desktop darstellen
  • sollte der Mauszeiger nicht auf Touchpad-Aktionen reagieren, die Bluetooth Tastatur noch mal aus- und wieder einschalten. Die Tastatur sollte mit dem Raspi bereits “gepaired” sein, ansonsten erneut pairen (Beschreibung nachfolgend).

Verwendung mit aufgestecktem LCD-Touchdisplay oder externem HDMI Monitor

Der Wechsel zwischen externem HDMI-Monitor und integriertem Touchdisplay erfordert einen Neustart per Kommandozeile. Dabei werden sowohl grafischer Desktop als auch Text-Terminal-Betriebsart auf dem jeweiligen Bildschirm angezeigt. Der grafische LXDE-Desktop kann auf dem LCD-Display aber mangels Auflösung nicht vollständig dargestellt werden. Dies Display ist eher für mit dem System erstellte Anwendungen gedacht, die dann per Touch-Display bedienbar sind. Dabei erfolgen Entwicklung und Pflege aber im HDMI-Modus und mir die Anwendung selbst wird mit Touchscreen-Modus genutzt.

Die folgende Befehlszeile schaltet vom HDMI-Modus in den LCD-Modus:

$ sudo ~/LCD-show/LCD35-show

Mit folgender Befehlszeile kommt man in den HDMI-Modus zurück:

$ sudo ~/LCD-show/LCD-hdmi

Beide Befehle führen zum sofortigen Neustart des Systems im aktuell ausgewählten Display-Modus.

Nutzung per grafischem Desktop oder Textterminal (Befehlszeilen)

Der automatische Start des grafischen Desktops kann mit dem Befehl raspi-config im Menüpunkt 2: Display Options abgeschaltet werden. Die folgenden Systemstarts zeigen dann nur einen Login-Prompt an, wie er bei Linux Servern üblich ist.

Als Benutzername ist pi eingerichtet, das anfängliche Passwort lautet 05car und kann mit dem Befehl passwd geändert werden.

Das funktioniert für beide oben beschriebenen Display-Arten gleich und eignet sich besonders gut zum Arbeiten mit dem kleinen LCD-Display.

Der Desktop kann dann mit dem Befehl startx jederzeit gestartet werden, nach Neustart erscheint aber weiterhin der Textbildschirm:

$ startx

Remote-Nutzung

Bei der vorliegenden Installation sind die Services SSH und VNC eingeschaltet. Mit einem anderen Rechner kann der Befehl ssh oder ein Terminalprogramm wie PuTTY (für Windows) genutzt werden, um eine Befehlszeilen-Sitzung mit dem Raspi zu starten:

$ ssh pi@192.168.178.42  # 192.168.178.42 ist die hier nur als Beispiel dienende IP4- Addresse im lokalen Netzwerk

Die eigene, per DHCP IP-4 vergebene Adresse kann mit dem Befehl //ifconfig// abgefragt werden, welcher die IP-4 Adressen aller Netzwerkschnittstellen ausgibt.

Ein remote Desktop ist über das offene VNC-Protokoll mit einem VNC-Client wie Real VNC möglich. Hier ist beim Client nur die IP-Addresse (wie bei SSH oben) einzugeben und es muss noch ein Passwort eingegeben werden.

Als Passwort voreingestellt ist hier 05carl und kann mit dem Befehl vncpasswd geändert werden.

Damit das funktioniert, muss der Raspi im Desktop-Modus laufen und an einen HDMI-Monitor angeschlossen sein (dieser kann evtl. auch abgeschaltet sein).

Offene Ports und Schnittstellen

RaspiOS als Betriebssystem eines “Bastelrechners” unterstützt sehr viele Schnittstellen und Busse, die wiederum per raspi-config ein- oder abgeschaltet werden können. Hier eine Zusammenfassung der Voreinstellungen:

Schnittstelle/Bus Zustand verwendet von
Kamera deaktiviert Raspberry Kamera Erweiterung
SSH aktiviert IP-Protokoll (Befehlszeile)
VNC aktiviert IP-Protokoll (remote desktop)
SPI aktiviert Serial Peripheral Interface (Speicher, LCD-Display
I2C deaktiviert 2-Draht serieller Bus (Sensoren, Displays etc. )
Serial deaktiviert serielle Schnittstelle (V.24, RS-232, RS-422)
1-Wire deaktiviert 1-Draht serielle Schnittstelle (Sensoren)
Remote GPIO deaktiviert externer Zugriff auf Ein/Ausgabeschnittstellen

Die abgeschalteten Schnittstellen sind erst nach Entfernen des aufgesteckten Displays erreichbar und liegen - mit Ausnahme des Flachkabel-Anschlusses für die Kamera - auf der Steckerleiste für das Display erreichbar. Das Display ist über den SPI-Bus angeschlossen. An populären I/O-Schnittstellen fehlt dem Raspi nur der im Automobilbereich übliche CAN-Bus, dafür sind aber “Hats” erhältlich, die wie das Display aufgesteckt werden können, um mit dem Raspi auch Automobil-Netzwerke zu steuern.

Netzwerk-Schnittstellen

Der Raspi ist prädestiniert für allerlei Netzwerk-Anwendungen. Mit einer RJ-45 Buchse kann er direkt an ein 100 Mbit Ethernet angeschlossen werden (hier hat der Raspberry 4 durch Gigabit-Ethernet und Stromversorgung via Ethernet einen Vorteil). Außerdem kann er über Wlan 802.11bgn und low power Bluetooth mit Netzen und Peripherie kommunizieren.

Weitere Peripherie kann über 4 USB-Schnittstellen angeschlossen werden. Hersteller-spezifische Treiber (wie Windows) braucht der Raspi nicht, dank Linux werden angeschlossene Geräte durch eine “Probing”-Phase beim Booten anhand verbauter Bauteile erkannt und automatisch eingerichtet.

In Verbindung mit den per Steckerleiste erreichbaren Peripherie-Bussen (wie SPI und I2C) eignet sich der Raspi besonders zur Bereitstellung Hardware-naher Dienste und kleiner Server, die eine Reihe von IoT-Geräte steuern (Internet of Things). Solche Dienste können entweder über ein angeschlossenes Touch-Display oder einen Webservice konfiguriert und eingestellt werden. Ein typischer Anwendungsfall ist die Verwendung eines Raspis als MQTT-Broker (etwa mit der bereits installierten Software //Mosquitto//), um sämtliche IoT-Geräte im (Smarthome-)Haushalt zu verwalten. Bei solchen ständig eingeschalteten kleinen Servern wirkt sich auch der sehr geringe Stromverbrauch des Raspberry 3B auf Dauer positiv aus.

Die gesamte IoT-Peripherie kann dann mittels mit Espressif Microcontrollern wie ESP32 oder dem älteren ESP8266 bestückten, “Internet-fähig” gemachten Hausgeräten via Wlan oder Bluetooth gesteuert werden. Zum Einstieg sind zwei Sensoren (Wetter und Hausklima) mitgeliefert, die mit ESP8266 Microcontrollern MQTT Messages an den Mosquitto- Broker schicken. Mit dem ebenfalls installiertem Node-Red Server können umfangreiche Smart-Home Szenarien orchestriert werden.

Ein typischer Anwendungsfall ist auch die Steuerung einer kleineren “Farm” von 3D-Druckern, CNC-Fräsen oder Lasercuttern mit der Software Octoprint, die zentral alle Jobs verwaltet. Hier reicht oft schon die Leistung eines kleinen Raspi aus, um den Status der ganzen “Farm” etwa per Smartphone zu überwachen.

Beliebt ist auch die Verwendung von Raspis als Firewall oder Wlan-Bridge, wenn etwa die Sicherheit der seitens Router vorgegebenen Möglichkeiten nicht ausreichen. FÜr NAS-Anwendungen sollte man aber besser einen Raspberry 4B einsetzen, weil dort Gigabit-Ethernet und USB-3 Anschlüsse mehr Performance bieten. Als Webserver für lokal betriebene und eher schwach frequentierte Seiten eignet sich aber auch der 3B bereits gut. Als Massenspeicher sollte man hier aber eine SATA-Festplatte oder -SSD über einen USB-Adapter anschließen. Auch der Raspi 3B kann bereits so konfiguriert werden, dass er direkt von Festplatte statt SD-Karte bootet.

Arduino Software und ESP8266 Microcontroller

Auf dem Raspi ist eine auf der Arduino IDE basierende Microcontroller-Entwicklungsumgebung für die populären megaAVR (Arduinos) - und Espressif - Controller (ESP8266 und ESP32) vorinstalliert. Letzere sind in den beiden mitgelieferten MQTT-Sensoren verbaut, auf welche mittels der Arduino Software neue Programmstände geflashed werden können.

Ein Upload angepasster Software ist für beide Sensoren leider nötig, damit sie Zugang zu dem WLAN bekommen, in welchem sich auch der Mosquitto Server (auf dem Raspi) befindet. Dazu sind einige #define-Zeilen am Anfang des C/C++ Quellcodes nötig:

Sketchname Dateipfad Verwendung
climate-publisher ~/Arduino/climate_publisher Wettersensor (Thermometer, Hygrometer, Barometer)
envy-publisher ~Arduino/envy-publisher Raumklima-Sensor (Thermometer, Hygrometer, schädliche Gase)
#define WLAN_SSID         "Cisco Disco"   // die SSID des WLAN-Netzes muss geändert werden
#define WLAN_PASSWORD     "123456789"     // das WLAN Passwort

#define MQTT_BROKER_HOST "ollisraspi.local" // ggf. ein anderer Hostname oder die IP-Addresse des Brokers
#define MQTT_BROKER_PORT  1883  // der MQTT Standardport
#define MQTT_TOPIC_OUT    "ESP/Sensor/"  // Topic-Prefix aller MQTT Messages

#define SLEEP_TIME        10000000  // Mikrosekunden Wartezeit bis zur nächsten Messung (ggf. ändern, besonders bei Batteriebetrieb der Sensoren auf einige Minuten verlängern

** Wichtig: vor dem “flashen” des runden Enyy-Sensors muß der Deckel entfernt werden und die beiden Tasten “Reset” und “Flash” müssen folgendermaßen gedrückt werden:**

  1. Reset drücken und halten
  2. Flash drücken und halten
  3. Reset loslassen
  4. Flash loslassen
  5. erst danach den Upload starten

file

Node Red - Orchestrierung von Datenflüssen (Flows)

Node Red ist eine NodeJS Umgebung, die den Datenfluß unterschiedlichster Internet-Protokolle (wie Webservices und insbesondere MQTT) mit als Node darstellbaren Javascript-Moduln in einer graphischen Oberfläche zu Flows verbindet und auf Webseiten visualisiert.

Beispiel 1: Flows für einen Wetterbericht

file

wird so angezeigt: file

Beispiel 2: Flows zur Steuerung des Raspis

file

wird so dargestellt und erlaubt auch eine Fernsteuerung des Rechners:

file

War dieser Artikel hilfreich? Bewertungen: 0
Artikeldetails:
Veröffentlichungsdatum: 2020-12-30 10:44AM
Zuletzt aktualisiert: 2020-12-30 12:15PM (Klaus - klaus@zerbe.cloud)
Artikel teilen: 
Autor: Klaus (klaus@zerbe.cloud)
Permalink: http://openkb.zerbe.cloud/kb/raspberry-desktop-iot-starterkit