Einfache Steuerung der parallelen Schnittstelle: Unterschied zwischen den Versionen
Admin (Diskussion | Beiträge) |
Admin (Diskussion | Beiträge) |
||
(3 dazwischenliegende Versionen des gleichen Benutzers werden nicht angezeigt) | |||
Zeile 21: | Zeile 21: | ||
vim blink.c | vim blink.c | ||
Inhalt, das Programm stammt übrigens aus diesem Forumbeitrag: | Inhalt, das Programm stammt übrigens aus diesem Forumbeitrag: | ||
− | <source | + | <source> |
/*Dieser Code laesst LEDs die an Pins 2...9 (Datenregister) | /*Dieser Code laesst LEDs die an Pins 2...9 (Datenregister) | ||
angeschlossen sind blinken. */ | angeschlossen sind blinken. */ | ||
Zeile 76: | Zeile 76: | ||
</source> | </source> | ||
Dann wird ein kleines Makefile erstellt: | Dann wird ein kleines Makefile erstellt: | ||
− | vim Makefile | + | vim Makefile |
Inhalt: | Inhalt: | ||
+ | <source lang=bash> | ||
CC = gcc | CC = gcc | ||
PROG = blink | PROG = blink | ||
Zeile 87: | Zeile 88: | ||
clean: | clean: | ||
rm -f $(PROG) $(PROG).o *~ | rm -f $(PROG) $(PROG).o *~ | ||
+ | </source> | ||
Nun kompilieren wir das ganze mit: | Nun kompilieren wir das ganze mit: | ||
make | make | ||
Zeile 101: | Zeile 103: | ||
vim index.php | vim index.php | ||
Inhalt der Datei index.php: | Inhalt der Datei index.php: | ||
+ | <source lang=html4strict> | ||
<HTML> | <HTML> | ||
Zeile 119: | Zeile 122: | ||
?> | ?> | ||
</center> | </center> | ||
− | + | </source> | |
Nun sollte beim Aufrufen oder Aktualisieren der Seite ein blinken der LED's sichtbar sein. Es sind nun diverse Funktionen möglich. Z.B. können über Optokoppler Relais geschaltet werden. Über diese Relais können so Verbraucher übers Internet geschaltet werden. Zudem kann das ganze mit einem Netzwerkkabel an den S0 Bus der Telefonanlage angeschlossen werden (siehe: CAPI, Asterisk etc.). | Nun sollte beim Aufrufen oder Aktualisieren der Seite ein blinken der LED's sichtbar sein. Es sind nun diverse Funktionen möglich. Z.B. können über Optokoppler Relais geschaltet werden. Über diese Relais können so Verbraucher übers Internet geschaltet werden. Zudem kann das ganze mit einem Netzwerkkabel an den S0 Bus der Telefonanlage angeschlossen werden (siehe: CAPI, Asterisk etc.). |
Aktuelle Version vom 29. Januar 2011, 12:17 Uhr
Ziel dieser Beschreibung ist es, die parallele Schnittstelle über ein Webinterface steuern zu können. Ich verwende eine Schaltung aus 4 Leds, die auf eine Rochlasterplatine gelötet wurden. Damit kann man sich sehr leicht den Zustand der einzelnen Ports anzeigen lassen. Ich verwende dabei keine Vorwiderstände da ich ultra helle LED's genommen habe. Zur Sicherheit empfiehlt es sich aber 100 Ohm Vorwiderstände zu verwenden. Im wesentlichen gibt es zwei Möglichkeiten den parallelen Port unter Debian zu steuern. Zum einen lässt sich der Port direkt per Speicher Adresse aus einem C Programm heraus schreiben und lesen. Nachteil dabei: Speicher Adressen darf nur Root schreiben. Es ist also nicht möglich das ganze per www-data User aus einer Website heraus zu starten. Die andere Möglichkeit besteht darin den Hardware Zugriff über ein C Programm das ein paar Linux Kernel Module benötigt vorzunehmen. Die Module können wiederum einem bestimmten Linux User oder einer Gruppe angehören. So kann der parallele Port dann auch über ein Webfrontend (PHP, Ajax etc.) gesteuert werden. Auf diese Möglichkeit möchte ich hier genauer eingehen.
Als erstes sollten die benötigten Module geladen werden:
modprobe parport modprobe ppdev
lsmod|grep parport
sollte dann folgende Ausgaben produzieren:
parport_pc 32132 0 parport 33256 2 ppdev,parport_pc
nun benötigen wir den gcc und alle Programme die zum kompilieren nötig sind:
apt-get install build-essential
nun legen wir uns einen Ordner zum kompilieren an. Für alle die wenig Erfahrung im kompilieren von Linux Software haben biete ich hier meine kompilierte ausführbare Datei zum Download an. (Debian etch 2.6.18-6-686):
mkdir /usr/src/blink cd /usr/src/blink
Darin speichern wir unsere C Quellcode Datei mit folgendem Inhalt:
vim blink.c
Inhalt, das Programm stammt übrigens aus diesem Forumbeitrag:
/*Dieser Code laesst LEDs die an Pins 2...9 (Datenregister) angeschlossen sind blinken. */ #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <linux/ppdev.h> #include <linux/parport.h> #include <sys/ioctl.h> int main() { int fd,loop=0; unsigned char datareg=0xFF; unsigned char controlreg=0x00; struct ppdev_frob_struct frob; /*parallele Schnittstelle öen*/ if((fd = open ("/dev/parport0", O_RDWR))!=-1) { ioctl (fd, PPCLAIM); } else { printf("Konnte Schnittstelle nicht oeffnen\n"); return 1; } /*Pins 2..9 als Ausgang konfigurieren*/ frob.mask = 0x20; frob.val =0x00; ioctl (fd, PPFCONTROL, &frob); /*10 mal LEDs ein- und ausschalten*/ while ((loop++)<1) { datareg=0xFF; ioctl(fd,PPWDATA ,&datareg); sleep(1); datareg=0x00; ioctl(fd,PPWDATA ,&datareg); sleep(1); } /*parallele Schnittstelle schliessen*/ ioctl(fd,PPRELEASE); close(fd); return 0; }
Dann wird ein kleines Makefile erstellt:
vim Makefile
Inhalt:
CC = gcc PROG = blink all: $(CC) -c $(PROG).c $(CC) -o $(PROG) $(PROG).o clean: rm -f $(PROG) $(PROG).o *~
Nun kompilieren wir das ganze mit: make und schon erscheint eine ausführbare Datei mit dem Namen blink. Wir starten die Datei mit:
./blink
Jetzt sollten die LED's an der parallelen Schnittstelle aufblinken...Um zu testen ob das Programm auch als www-data User läuft, könnnen wir das Programm als www-data ausführen:
su www-data ./blink
Wenn alles bis dahin klappt können wir uns ein PHP Skript schreiben das dieses Programm über ein Webfrontend aufrufen kann. Ich verwende hier ein einfaches Beispiel um die Funktion darzustellen. Achtung: Wegen Sicherheitslücken sollte das Programm nur zu Testzwecken benützt werden.
apt-get install apache php5 cd /var/www mkdir blink chown www-data www-data ../* vim index.php
Inhalt der Datei index.php:
<HTML> <TITLE>Parallele Schnittstelle per Webfrontend steuern...</TITLE> </HEAD> <BODY> <font face="arial"> <CENTER><h3>Öffnet beim Neu Laden den Parallelport...</h3></CENTER> <body bgcolor=ffffe9> </BODY> </HEAD> <CENTER> <html> <?php shell_exec('/usr/src/blink'); echo exec('whoami'); ?> </center>
Nun sollte beim Aufrufen oder Aktualisieren der Seite ein blinken der LED's sichtbar sein. Es sind nun diverse Funktionen möglich. Z.B. können über Optokoppler Relais geschaltet werden. Über diese Relais können so Verbraucher übers Internet geschaltet werden. Zudem kann das ganze mit einem Netzwerkkabel an den S0 Bus der Telefonanlage angeschlossen werden (siehe: CAPI, Asterisk etc.).