Öfters möchte man einen kleinen oder auch größeren Schaltkreis über den PC steuern, wäre da nicht die komplizierte Umsetzung mit einem geeigneten Mikrocontroller und der benötigten Software.
Doch es geht viel einfacher: Der parellele Port, auch LPT-Port genannt, steht auf den meisten PC zur Verfügung und kann Kinderleicht dazu verwendet werden verschiedenen Pins einzeln mit Spannung zu versorgen.
Hardware
Dieser Anschluss, der vormals DER Standard für den Anschluss eines Druckers war, lässt sich für die Steuerung eines Schaltkreises verwenden indem man einen Draht in einen der Pins 2-9 und einen Draht in einen Pin von 18 bis 25 steckt.
Die Pins 2 bis 9 können einzeln vom PC mit Spannung geschaltet werden und stellen eine (Steuer-)Spannung von ca. 5 V bereit. Diese Spannung kann sollte mit einem Transistor verwendet werden, um über einen Steuerstromkreis den Arbeitsstromkreis mit (nahezu) beliebiger Spannung zu betreiben.
Außerdem kann über die Pins 10-13 ein Signal enpfangen werden, was in diesem Fall bedeutet, dass der Stromkreis geschlossen ist und Strom von den Pins 18-25 zu den Pins 10-13 fließt.
Ein LPT-Kabel, das in meinem Fall einen alten Drucker mit Daten versorgte, verlegt den Anschluss bequem nach vorne und erspart einem so manchen Schlag mit dem Kopf gegen die Tischplatte.
Software
Beispiel eines TCP-Clients zum Steuern einer LED:
Für das einfache Anlegen einer Spannung auf einem Pin empfehle ich das Programme lptout.exe. Für komplexere Aufgaben ist jedoch die Klasse inpout32.dll bzw. inpout64.dll geeignet. Da ich keine Rechte für die genannten Programme besitze, möchte ich nicht auf einen Download verlinken, doch eine Google-Suche bringt einem schnell ans Ziel.
Ich habe mir für leichtere Handhabung eine kleine C#-Klasse geschrieben:
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Runtime.InteropServices;
6
7namespace WindowsFormsApplication1{
8
9 public class LPTController{
10
11 [DllImport("inpout32.dll")]
12 private static extern UInt32 IsInpOutDriverOpen();
13
14 [DllImport("inpout32.dll")]
15 private static extern void Out32(short PortAddress, short Data);
16
17 [DllImport("inpout32.dll")]
18 private static extern char Inp32(short PortAddress);
19
20 [DllImport("inpout32.dll")]
21 private static extern void DlPortWritePortUshort(short PortAddress, ushort Data);
22
23 [DllImport("inpout32.dll")]
24 private static extern ushort DlPortReadPortUshort(short PortAddress);
25
26 [DllImport("inpout32.dll")]
27 private static extern void DlPortWritePortUlong(int PortAddress, uint Data);
28
29 [DllImport("inpout32.dll")]
30 private static extern uint DlPortReadPortUlong(int PortAddress);
31
32 [DllImport("inpoutx64.dll")]
33 private static extern bool GetPhysLong(ref int PortAddress, ref uint Data);
34
35 [DllImport("inpoutx64.dll")]
36 private static extern bool SetPhysLong(ref int PortAddress, ref uint Data);
37
38 private bool _X64;
39 private short _PortAddress;
40
41 public LPTController(short PortAddress){
42 _X64 = false;
43 _PortAddress = PortAddress;
44
45 try{
46 uint nResult = 0;
47 try{
48 nResult = IsInpOutDriverOpen();
49 }
50 catch (BadImageFormatException){
51
52 }
53 if (nResult == 0){
54 throw new ArgumentException("Unable to open InpOut32 driver");
55 }
56 }
57 catch (DllNotFoundException){
58 throw new ArgumentException("Unable to find InpOut32.dll");
59 }
60 }
61
62 public void Write(short Data){
63 Out32(_PortAddress, Data);
64 }
65
66 public byte Read(){
67 return (byte)Inp32(_PortAddress);
68 }
69 }
70}
Mit dieser Klasse kann man einfach den Zustand Auslesen und ihn ändern:
1LPTController lpt = new LPTController(888);
2
3if(lpt.Read() == 255){
4 lpt.Write(0);
5}
6else{
7 lpt.Write(255);
8}
Hinweis
Natürlich geschieht das alles auf Ihre eigene Gefahr und ich übernehme keine Haftung für jedwede Schäden an Gerät und Gesundheit. 230V haben hier nichts verloren!!!
Update 13.03.2016: Natürlich muss es der parallele und nicht der serielle Port.