Einstieg in WebIOPi

© UrosZunic, 123RF

Ab ins Netz

Mithilfe von WebIOPi verwandeln Sie den Raspberry Pi in eine vielseitige Schaltzentrale für das Internet der Dinge.

README

Das WebIOPi-Framework bietet eine webbasierte Schnittstelle für das Ansteuern von Geräten und Auslesen von Sensoren über den GPIO-Port des Raspberry Pi. Die entsprechenden Funktionen lassen sich auch in maßgeschneiderten Webapps nutzen, die Sie zudem mit Python-Code erweitern dürfen.

Die Möglichkeit, aus dem Internet auf den Raspberry Pi und auf an ihn angeschlossene Geräte zuzugreifen, eröffnet ganz neue kreative Perspektiven. Man könnte dazu zwar auch ein maßgeschneidertes, webbasiertes Interface selbst entwickeln, doch es spricht einiges dafür, stattdessen zu WebIOPi [1] zu greifen. Dessen Entwickler Erik Ptak preist sein auf Python basierendes Framework für das Ansteuern der GPIO-Schnittstelle via Web als "Schweizer Messer für das IoT" an. Um WebIOPi auszureizen, sind zwar einige Tricks notwendig, doch damit lassen sich auf recht einfache Weise nützliche Webapps zusammenstricken.

WebIOPi einrichten

Zur Installation laden Sie den aktuellen Tarball von der Projekt-Webseite herunter und entpacken ihn. Dann wechseln Sie in das dabei neu entstandene Verzeichnis und rufen dort das Installer-Skript auf (Listing 1). Anschließend rufen Sie WebIOPi entweder händisch mit dem Befehl sudo /etc/init.d/webiopi start auf oder binden es über das Kommando sudo update-rc.d webiopi defaults direkt in den Boot-Vorgang ein, sodass es nach jedem Neustart des RasPi automatisch bereitsteht.

Listing 1

 

$ tar xvf tar xvzf WebIOPi-0.7.0.tar.gz
$ cd WebIOPi-0.7.0
$ sudo ./setup.sh

Sobald WebIOPi läuft, erreichen Sie seine Bedienoberfläche unter http://RasPi-IP:8000, wobei Sie RasPi-IP durch die tatsächliche IP-Adresse des Raspberry Pi in Ihrem Netz ersetzen. Melden Sie sich als Benutzer webiopi mit dem vorgegebenen Passwort raspberry an. Es empfiehlt sich, Letzteres umgehend zu ändern (siehe Kasten "WebIOPi-Passwort ändern"). Nach der Anmeldung erscheint eine Webseite mit Links zu den Funktionsbereichen von WebIOPi. Ein Klick auf GPIO Header führt Sie in eine einfache Webapp, mit der Sie die GPIO-Pins des RasPi ansteuern können (Abbildung 1).

Abbildung 1: Die Benutzeroberfläche von WebIOPi präsentiert sich sehr schlicht.

WebIOPi-Passwort ändern

Ist Ihr RasPi aus dem Internet erreichbar, dann sollten Sie schnellstens das Vorgabepasswort ändern. Dazu rufen Sie sudo webiopi-passwd auf, geben als Benutzername webiopi an und vergeben ein neues Passwort. Bei Bedarf ersetzen Sie das vorgegebene Konto webiopi durch ein anderes, indem Sie einen anderen Benutzernamen und ein Passwort dazu angeben. Nach jeder Änderung starten Sie WebIOPi mit dem Befehl sudo /etc/init.d/webiopi restart neu, damit die neuen Einstellungen greifen.

Angesteuert

In dieser Webapp schalten Sie einzelne GPIO-Pins ein beziehungsweise aus, indem Sie auf den entsprechenden Schalter klicken. Das lässt sich freilich erst austesten, sobald etwas am fraglichen Pin hängt. Schließen Sie also, wie in Abbildung 2 zu sehen, eine LED und einen 2700-Ohm-Widerstand an die 3,3V- und GPIO-25-Pins des RasPi an. Sobald Sie jetzt im Webinterface den Schalter zu GPIO 25 anklicken, ändert sich dessen Status von IN auf OUT und die LED leuchtet auf. Ein erneuert Klick setzt den Status zurück und schaltet die LED wieder aus.

Abbildung 2: Der Aufbau für einen einfachen Funktionstest mit WebIOPi.

Haben Sie WebIOPi zum Laufen gebracht, können Sie als Nächstes darangehen, eine simple Webapp zu erstellen, die auf Knopfdruck den LED-Status umschaltet. Dazu erstellen Sie eine neue Textdatei, in die Sie den Code aus Listing 2 eingeben und die Sie als index.html im Verzeichnis /home/pi/project/html ablegen. Die beiden Hauptbestandteile dieser Webseite lassen sich auch mit rudimentären HTML- und Javascript-Kenntnissen unschwer identifizieren: Der Javascript-Code enthält eine Funktion, die einen Schalter für die Kontrolle des GPIO-Pins 25 definiert; ein CSS-Stylesheet spezifiziert das Aussehen dieses Schalters.

Listing 2

 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>WebIOPi | LED Control</title>
  <script type="text/javascript" src="/webiopi.js"></script>
  <script type="text/javascript">
  webiopi().ready(function() {
    var button = webiopi().createGPIOButton(25, "LED");
    $("#controls").append(button);
    webiopi().refreshGPIO(true);
  });
  </script>
  <style type="text/css">
    button {
      display: block;
      margin: 5px 5px 5px 5px;
      width: 105px;
      height: 45px;
      font-size: 24pt;
      font-weight: bold;
      color: white;
    }
  </style>
</head>
<body>
  <div id="controls" align="center"></div>
</body>
</html>

Jetzt gilt es, WebIOPi das Verzeichnis /home/pi/project/html als Document-Root unterzuschieben. Dazu öffnen Sie die Datei /etc/webiopi/config in einem beliebigen Texteditor und fügen ihr im Abschnitt [HTTP] folgende Zeile hinzu:

doc-root = /home/pi/project/html

Anschließend starten Sie WebIOPi über das Kommando sudo /etc/init.d/webiopi restart neu. Sobald Sie jetzt im Browser WebIOPi aufrufen, erscheint Ihre neue Webapp und Sie können per Knopfdruck die LED ein- und ausschalten.

Neben den in Listing 2 verwendeten Parametern id und label kennt die Funktion webiopi().createButton einen weiteren optionalen Parameter, über den Sie dem Schalter eine auszuführende Funktion übergeben können. Auf diesem Weg lässt sich die Webapp auch für die Bedienung des in einem früheren Artikel (auch auf der Heft-DVD) bereits beschriebenen Transistorschalters anpassen [2]. Wie Sie sich erinnern, schaltete dort ein einfaches Python-Skript den Transistorschalter jede halbe Sekunde um. Um es aufzurufen, mussten Sie den entsprechenden Befehl entweder eintippen oder den RasPi so konfigurieren, dass er das Skript beim Start ausführte.

Dank WebIOPi ersetzen Sie das Python-Skript jetzt durch eine simple Webapp, in der das Ganze per Knopfdruck funktioniert. Dafür verwenden Sie den Code aus Listing 2 als Schablone und ersetzen lediglich den Javascript-Codeblock durch jenen aus Listing 3. Letzterer ähnelt seinem Vorgänger weitgehend, nutzt aber diesmal die bereits angesprochene Möglichkeit, webiopi().createButton eine zusätzliche Funktion mitzugeben – hier heißt sie outputSequence.

Listing 3

 

<script type="text/javascript">
  webiopi().ready(function() {
    var content, button;
    content = $("#content");
    button = webiopi().createButton("trigger", "Trigger!", outputSequence);
    content.append(button);
  });
  function outputSequence() {
    var sequence = "01"
    webiopi().outputSequence(25, 500, sequence, sequenceCallback);
  }
  function sequenceCallback(gpio, data) {
    alert("Triggered on GPIO" + gpio);
  }
</script>

Diese Funktion kümmert sich um zweierlei: Zum einen definiert sie eine Signalsequenz, zum anderen gibt sie diese in einem definierten Intervall (500 ms) auf einen bestimmten GPIO-Pin (25) aus. Die Sequenz ("01") schaltet also alle halbe Sekunde den Pin an ("1") beziehungsweise ab ("0"). Der letzte Parameter im Aufruf von webiopi().outputSequence, die Funktion sequenceCallback, sorgt für die Anzeige einer Meldung, die als Bestätigung dafür dient, dass der Code erfolgreich ausgeführt wurde.

Bauen Sie nun gemäß dem Schaltplan in Abbildung 3 den Transistorschalter auf und verwenden Sie die Webapp, um ihn anzusteuern. Im bereits erwähnten Artikel diente er dazu, den Auslöser einer analogen Spiegelreflexkamera zu bedienen; er lässt sich aber auch für viele andere Zwecke einsetzen.

Abbildung 3: Der Schaltplan für den Transistorschalter.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

06/2019
Home Improvement

Diese Ausgabe als PDF kaufen

Preis € 9,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Verschlungene Pfade

    Mit Schleifen, Fallunterscheidungen und Funktionen programmieren Sie komplexe Skripte auf einfache und elegante Weise.

  • Extrem genau

    Mit einem A/D-Wandler messen Sie bei Bedarf Spannungen. Der MCP3424 macht dabei konstruktionsbedingt eine gute Figur.

  • Verbindungsaufnahme

  • Süßer Wecker

    Dem RasPi fehlen sowohl eine Echtzeituhr als auch ein BIOS, ein zeitgesteuertes Wecken erfordert also Zusatzkomponenten. Hier springt der Witty Pi Mini in die Bresche, ein µHAT von UUGear.

  • Windows to go

    Das Aufsetzen zuverlässiger und sicherer Remote-Desktop-Lösungen erfordert einiges Know-how. Die RasPi-basierte Pinbox von Pintexx reduziert den Konfigurationsaufwand auf ein Minimum.

  • Prima Klima

    In Museen ist es Pflicht, zu Hause nützlich: das permanente Prüfen und zentrale Erfassen der Feuchtigkeit und Temperatur in Räumen.

  • Auf einen Blick

    Ein maßgeschneiderter Infoscreen auf RasPi-Basis mit stromsparendem E-Ink-Display zeigt Termine, Bilder, Mitteilungen und Wetterinformationen an.

  • Sanft berührt

    Mit einem RasPi und dem Controllermodul PiXtend lassen sich mühelos Roboterarme ansteuern und deren Bewegung automatisieren.

  • Popcorn-Kino

    Mit Kodi 18.0 unterstützt LibreELEC 9.0 jetzt die von vielen Streaming-Diensten genutzte DRM-Verschlüsselung. Die Integration von Netflix, Amazon und Co. erfordert allerdings Handarbeit.

  • So nah und doch so fern

    Der RasPi kommt häufig als Server oder Steuerrechner für spezielle Zwecke zum Einsatz. Mit Anydesk erhalten Sie dazu eine Steuersoftware mit grafischer Oberfläche.