Steuern via Weboberfläche

Der Raspberry Pi ist ein MiniPC der mittlerweile an Gewicht gewonnen hat. Speziell bei Anwendungen, die Hardware nah aufgebaut werden sollen, hat er große Vorteile. Eines meiner Projekte befasst sich mit eben diesem Thema und ermöglicht die Steuerung von Beleuchtung, Geräten etc. über eine kleine Webseite.

Hardware

Der Aufbau ist recht einfach: Über den PCA9685, der via I2C-Bus an den Raspberry Pi angeschlossen ist, werden die LEDs mit einem PWM-Signal angesteuert. Zwei LEDs (D1,D2) zeigen Bus-/LED-Versorgungsspannung an, dienen aber lediglich der schnellen Kontrolle.

Die Hardware-Adresse kann über J1/J2 verändert werden. Sollten noch mehr Module (bis  2^6 Module) benötigt werden, so muss die Schaltung, bzw. das Layout angepasst werden.

Die LEDs, in diesem Fall 5 RGB-LEDs von Typ ***, können bis 25mA/10mA pro Port (PCA9685 als Senke/Quelle) direkt, oder mit entsprechenden Treibern indirekt betrieben werden. Die Spannungsversorgung kann bis zu einem entsprechenden Grad direkt über die Stiftleisten SV5..SV9 erfolgen, sollte jedoch je nach Strombedarf der LEDs direkt am LED-Modul gepuffert werden. Andernfalls könnte es sich auf den Controler oder andere Peripherie auswirken.
Aufgrund der Periodendauer und der Auflösung von 12Bit/Periode lassen sich die LEDs zudem nicht nur im Bereich des Nennstroms, sondern auch im Bereich darüber betreiben. Genaueres steht hierzu im entsprechenden Datenblatt des LED-Chips. Bei einem Betrieb im Überstrom-Bereich muss nur sichergestellt werden, dass die LED wirklich nur kurzzeitig eingeschaltet bleibt, da sonst ein Hitzetot des Bauteils eintritt.

Software

Zur Steuerung der LEDs wird zum einen eine kleine Webseite mit einem Javascript für AJAX mit einem Apache-Webserver bereit gestellt. Die eigentliche Ansteuerung des PCA9685 übernimmt ein zweiter, deutlich kleineres Serverprogramm, welches in C geschrieben wurde und lediglich auf entsprechende Post reagiert. Diese werden ausgewertet und schickt entsprechende Befehle an die I2C-Schnittstelle.

In der Funktion userfunct(…) wird die Behandlung von Anfragen programmiert, die auf der Webseite generiert werden. Diese sind in der CSS-ID auf der Webseite versteckt und können so recht einfach angepasst werden.

Installation

Sofern die Hardware vorhanden ist, ist die Installation schnell erledigt. Benötigt wird hierzu ein Raspberry Pi Version B mit installiertem Arch-Linux. Mit

1
pacman -Suy

wird das System zuerst auf den neuesten Stand gebracht. Dann wird mit

pacman -S apache

der Webserver, mit

pacman -S i2c-tools

die Libarys für den I2C-Port und mit

pacman -S gcc

der C-Compiler installiert.

Zur Einrichtung wird nun noch der I2C-Port initialisiert und die Schreibrechte für alle freigegeben. Dies ist zwar Sicherheitstechnisch nicht sinnvoll, vorerst aber ok.
Da dieser Vorgang nach jedem Bootvorgang wiederholt werden muss, wird direkt in die Datei /etc/rc.conf folgender Code eingetragen:

modprobe i2c-dev
modprobe i2c-bcm2708
chmod 777 /dev/i2c-1

Bei nun angeschlossenem I2C-Modul kann man mit i2cdetect -y 1 einmal alle möglichen Adressen anfragen und sollte auf der entsprechenden Adresse des Moduls ein Feedback bekommen. Ein direkter Lese-/Schreibzugriff ist per i2c-get -y 1 <devadr> <ramadr> bzw. i2c-get -y 1 <devadr> <ramadr> <value> (alles Hex-Codiert mit 0x..) möglich.

Zum Compilieren des Codes für den zweiten Teil des Servers müssen zuerst die Quellcodes auf den RPI übertragen werden. Dies kann per SSH oder aber auch per FTP geschehen. Danach werden die Quellcodes mittels gcc -o <programmname> <alle Codefiles mit Lehrzeichen> compiliert werden. Danach kann der Server mit ./<programmname> ausgeführt werden und ist startklar.

Nun muss nur noch der Code für die Webseite angepasst und in das Verzeichnis /etc/http/ kopiert werden und schon ist die Installation abgeschlossen.

Warnung an der Stelle

Da die Sourcodes recht simple geschrieben sind und keinerlei Sicherheitsprüfung beinhalten, sind sie mit Vorsicht zu genießen. Da eine Weiterentwicklung aus Zeitgründen vorerst nicht möglich ist, rate ich zu einer Anwendung im lokalen Netzwerk, OHNE Freigabe nach außen. Zudem stellt jeder offene Port auf einem Rechner eine mögliche Schwachstelle dar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.