go seven !

RaspberryPi, Relaisboard, WebGPIO und was ich damit anstelle

Kurzes Vorwort: Ich habe einen RaspberryPi, ein Relaisboard (als 4er oder 2er) und dafür eine Websteuerung geschrieben. Nun was damit anfangen? In meiner Studentenbude habe ich (auch mit einem Pi) ein Heimkinosystem mit Beamer, Soundsystem & co. Da man als Automatisierungstechniker grundsätzlich faul ist, möchte ich den Beamer nicht per Fernbedienung einschalten (und auch Kanalwechsel und co per Handy steuern) sowie das Soundsystem & Beamer komplett vom Netz trennen können (da ich ja in dem Zimmer schlafe).

Dazu soll der Beamer (Benq MP610) per Seriell-Verbindung gesteuert werden und alle Komponenten per Relaisboard spannungsfrei geschaltet werden. Letzteres habe ich nun (Prototypenmäßig) realisiert. Für Bastelwillige, die dies nachbauen wollen, hier eine Materialliste:

  • RaspberryPi
  • WLAN-Modul (wenn man kein LAN-Kabel verlegen will)
  • Aufputz-Verteilerdose (oder ähnliches, großes Gehäuse)
  • Relaisboard
  • Diverse NYM-Kabel (gibt es bei Obi, alternativ kann man auch flexibles Kabel nehmen)
  • Diverse Steckkabel (Jumperkabel, female-female und male-female)
  • Steckdosen (an die die Relaisausgänge im Endeffekt angeschlossen werden)
  • 5V Netzteil

Der Pi, wird mit Spannungsversorgung (5V) sowie den Railaisboard(s) in der Verteilerdose untergebracht:

pi-box

Ich möchte an dieser Stelle darauf hinweisen, dass die Verkabelung nicht Final ist. Es handelt sich hierbei um einen PROTOTYPEN. Man möge mir deshalb die Unprofessionalität verzeihen. Kurz zusammengefasst kann ich die Verdrahtung so zusammenfassen:

Das schwarze Kabel sorgt für die Spannungsversorgung (230V). Derzeit nur per Schuko-Steckdose – also Maximal 16A. Später soll der Pi im Unterverteiler meines Zimmers sitzen und dann werden die 3 Phasen auf die diversen Relais aufgeteilt (jedes Maximal 10A), um eine Lastverteilung zu garantieren und mehr als nur 16A Gesamtstrom haben zu können. Diese Spannungsversorgung speist das 5V Netzteil (ganz links) sowie die Eingänge der Relais 1 bis 6.

Die 5V Spannungsversorgung speist den Pi (über PIN 2 und 6) sowie VCC der Relaisboards (VCC und GND, der Jumper zwischen JD-VCC und VCC muss gesetzt sein). Die Steuereingänge der Relaisboards gehen direkt auf die GPIO-Pins des Pi.

Zusätzlich habe ich eine LED angebracht (Rot, hinter einem 100Ohm Widerstand), welche den Betriebszustand signalisiert. Diese ist direkt zwischen GND und PIN11 angeschlossen (MIT Widerstand 😛 ).

Die Softwareseite ist regelmäßigen Lesern schon bekannt. Ich setze Raspbian ein, zusätzlich meine Websteuerung. Damit kann ich über ein Webinterface die GPIO’s lesen und schreiben.

Todo:

  • Serielle Verbindung zum Beamer herstellen
  • Oberfläche bereinigen, anpassen
  • Als Android-App umsetzen
  • Umsetzung auf Hutschiene (bei Pollin gibt es da ein tolles Set)

UPDATE:

Auf Wunsch eines Lesers habe ich hier mal die grundsätzliche Verschaltung dargelegt:

connection

Man entschuldige bitte die Unprofessionalität der Zeichnung – sie entstand in kürzester Zeit im Zug 🙂 Wichtig: Die hier dargestellte Weise funktioniert zwar, ist aber bezüglich der Spannungsversorgung des Boards nicht zu empfehlen, wenn der Pi nur über MicroUSB befeuert wird. Am besten werden das Board UND der Pi an den GPIO’s versorgt. PS: Die GPIO’s sind frei wählbar. Der Jumper muss gesetzt sein.

RaspberryPi als PPTP-VPN-Server

Wenn man (aus welchem Grund auch immer) Zugriff auf ein anderes Netzwerk haben möchte, das direkte Mitlesen beim Surfen im Internetcafé unterbinden will oder einfach nur mal eine andere IP-Adresse braucht, dann ist man sicher schon mal auf den Begriff VPN gestoßen. Ein VirtuellesPrivatesNetzwerk – Netzwerktunnel oder so ähnlich. Nun kann man sich bei einem Anbieter für teuer Geld Produkte (CyberGhost, AvastVPN etc.) verkaufen lassen, in die man nicht “hineinschauen” kann. Oder man greift sich seinen RaspberryPi und macht es selber. Es ist einfacher als gedacht!

Ich setze mal voraus, dass Raspbian oder eine vergleichbare Distribution installiert ist. Internetzugriff ist natürlich auch essentiell.

Als Erstes bringen wir den Pi auf den aktuellen Stand:

sudo apt-get update ; sudo apt-get upgrade ; sudo apt-get dist-upgrade

Dann testen wir die Vorbedingungen:

sudo modprobe ppp-compress-18

Keine Fehler? Dann kann es ja losgehen. Wir installieren den Server:

sudo apt-get install pptpd

Wenn dies erfolgreich geschehen ist, müssen noch ein paar Anpassungen in Konfigurationsdateien durchgeführt werden. Als erstes nehmen wir und die pptp.conf vor:

sudo nano /etc/pptp.conf

Darin wird folgende Zeile angepasst:

localip 192.168.0.1

Die IP-Adresse muss natürlich durch die Adresse des Pi’s ersetzt werden (per ifconfig herausfinden). Mit Strg+x schließen und speichern. Jetzt öffnen wir /etc/ppp/pptpd-options :

sudo nano /etc/ppp/pptpd-options

Und geben folgendes ein am Ende der Datei ein:

ms-dns 8.8.8.8
ms-dns 8.8.4.4

Die IP-Adressen könne so gelassen werden (wenn der Pi wie meinem im Rack hängt (PCextreme.nl o.ä.)) sollten aber hinter einem Router durch dessen IP ersetzt werden. Speichern und in der Datei /etc/ppp/chap-sectrets die Nutzernamen und Passwörter festlegen.

sudo nano /etc/ppp/chap-secrets

Beispiel:

# Secrets for authentication using CHAP
# client              server     secret                                  IP adresses
nutzername    *                 passwort                            *

Speichern. Und Service neustarten.

sudo service pptpd restart

Jetzt musst die IP-Weiterleitung aktiviert werden. Dazu wird /etc/sysctl.conf editiert:

sudo nano /etc/sysctl.conf

Jetzt net.ipv4.ip_forward=1 suchen oder einfügen. Speichern. Als letzten schreiben wir noch folgendes in /etc/rc.local vor exit 0:

sudo sysctl net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

nano-vpn-rc.local

Jetzt den Pi neustarten und: Fertig!

Temeraturgesteuerter Lüfter für den RaspberryPi

Ich habe meinen RaspberryPi im Einsatz für die Hausautomation und als Datencenter. Damit er und die Zusatzkomponenten (Netzteil, Relaiskarte…) nicht “rumliegen” habe ich alles in ein Gehäuse gesetzt. Dieses habe ich sehr kompakt gehalten. Allerdings gibt es dabei einen Nachteil: Die Hitze von Netzteil und Pi stauen sich darin (trotz Lüftungsöffnungen). Da ich dies vorhergesehen habe kaufte ich gleich noch einen Lüfter um diesen automatisiert einzusetzen – d.h. immer wenn die CPU-Temperatur des RaspberryPi über 50°C steigt, wird der Lüfter für 15 Sekunden aktiviert, dann erfolgt eine neue Abfrage der Temperatur, falls diese < 50°C ausfällt, schaltet der Lüfter aus und wartet bis zum nächsten Temperaturanstieg.

Die Hardware dazu ist simpel. Am Pi hängt ein PicoBorg und dahinter ein günstiger 5V-Lüfter von Amazon. Wesentlich interessanter ist ist die Software-Seite. Ich habe herumprobiert mit einem Shell-Script, dieses stürze aber oft nach einigen Minuten ab (und der Lüfter blieb an…). Deshalb versuchte ich es mit Python und war erfolgreich. Das Script sieht nun so aus:

import RPi.GPIO as GPIO
import time
import os
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT) 

def getCPUtemperature():
res = os.popen(‘vcgencmd measure_temp’).readline()
return(res.replace(“temp=”,””).replace(“‘Cn”,””))

SOLL_temp = “50.0” 

while 1:
if (getCPUtemperature() >= SOLL_temp):
GPIO.output(18, True) 
time.sleep(15) 
continue
else:
GPIO.output(18, False) 
time.sleep(20)

In meinem Fall wird GPIO 18 verwendet – das müsste man anpassen, wenn ein anderer PIN verwendet werden soll. Ich habe das Script als “status.py” in “/home/pi/lueftersteuerung/” abgelegt und per sudo chmod +x status.py ausführbar gemacht. Wenn man nun noch in “/etc/rc.local” vor dem “exit 0″ folgendes einträgt wird der Script automatisch beim Start geladen: “sudo python /home/pi/lueftersteuerung/status.py”.

eGalax Touchscreen am RaspberryPi

Wie die regelmäßigen Leser hier wissen besitze ich einen RaspberryPi. Neulich war es weider mal Zeit, diesen an einen Touchscreen anzuschließen. Leider wird eben dieser nicht “out of the box” unterstützt (Stand: August 2013 Kernel 3.6.11). Nun gibt es die arg umständliche Variante, den Kernel neu zu kompilieren – oder man ersetzt einfach alle relevanten Daten mit einem von mir vorkomiliertem Kernel. Dies ist relativ einfach und soll in der folgenden Anleitung beschrieben werden.

Voraussetzungen

Vorgehen

Als erstes fahren wir den Pi herunter und setzen die Speicherkarte in den Kartenleser ein. Es sollten 2 Laufwerke erscheinen. Dies sind die 2 Partitionen auf der SD-Karte. Die kleinere davon enthält die Datei namens kernel.img, welche wir auch im Archiv von oben wiederfinden. Wir kopieren also (nachdem wir ein Backup des alten Kernel angelegt haben) die kernel.img-Datei auf die kleine SD-Partition.

boot-partition

 

Jetzt benötigen wir ein Terminal. Darin öffnen wir den Datei-Manager las Root.

terminal

 

Es öffnet sich ein Dateimanagerfenster. Mit jenem verschieben wir alle Dateien aus “firmware” nach /lib/firmware und dann alle Dateien aus “modules” nach /lib/modules .

Jetzt brauchen wir noch die aktuellste Firmware… von https://github.com/raspberrypi/firmware/archive/next.tar.gz . Diese einfach entpacken nach /opt/vc .

Fertig! Euer Pi sollte starten. Eventuell muss euer Touchscreen noch kalibriert werden. Dazu nutzt ihr xinput_calibrator .

GPIO-Kontrolle des RaspberryPi

Sicher haben schon einige vom GPIO-Steuerungs-System WebIOPi gehört. Ein System mit dem sich auf dem Raspberry per Webinterface die GPIO steuern lassen und vieles mehr. Zu viel mehr habe ich mir gedacht, da ich “nur” einen PicoBorg einsetze, welcher bekanntlich nur 4 GPIO’s nutzt.

Deshalb habe ich mir vor geraumer zeit das Ziel gesetzt, eine eigene, leichte Steuerung per PHP auf die Beine zu stellen – angepasst für den PicoBorg. Und da ist sie: RaspberryPi GPIO PicoBorg.

Mit der Aktuellen Version 0.3.3 sind die Grundzüge erreicht, alle Basis Funktionen implementiert. Doch was genau macht meine Weboberfläche?

Features:

  • Steuern der GPIO 4, 7, 8, 18 per Webinterface
  • Mobiles Interface
  • Installer (NOOB-Variante)
  • Ansprechende Grafische Oberfläche
  • GPIO’s werden nach Installation & Neustart automatisch gesetzt
  • Anpassbare Oberfläche (siehe Android-Bild, auf meinem Raspberry werden 2 Steckdosen & ein Netzteil gesteuert)

Bilder:

raspberrygpio
RaspberryPi GPIO PicoBoard Desktop Version
rpigpiopb
RaspberryPi GPIO PicoBoard Mobile Version

Features in Version 1.0 (folgen so bald als möglich)

  • Android-APP
  • Windows 8-APP
  • PWM-Steuerung auf GPIO 18 (Umschaltbar zu OUTput)

Alle Informationen, Installationsinstruktionen und den Download findet gibt es auf GitHub. Vorschläge zu weiteren Features werden hier entgegengenommen, Bugs bitte bei GitHub einreichen!