Einfachste Lösung um einen Taster per USB am PC auslesen mit C#.

#7763936
Lesenswert?

Moin,

ich suche eine einfache, billige und kleine Lösung um Kontakt geschlossen/ offen über USB per C# .net XY am PC auszulesen. Ich hab das mit Arduino und CO. schon gelöst würde mich jedoch über eine kleinere, günstigere und einfacherer Lösung freuen. Gibt es da etwas. Kennt einer einen Ansatz. Chat GPT hat mich schon dazu gebracht ein USB Kabel zu zerschneiden und D+ mit Gnd zu 'kontakten' nur um dann später zu behaupten, dass das doch alles nicht geht :)

#7763966
Lesenswert?

Henning H. schrieb:

Chat GPT hat mich schon dazu gebracht ein USB Kabel zu zerschneiden und D+ mit Gnd zu 'kontakten' nur um dann später zu behaupten, dass das doch alles nicht geht :)

Künstliche Intelligenz schlägt menschliche Dummheit 1:0

sorry, der muste sein ;-)

Ich würd einen ATTiny45 mit VUSB nehmen und einen Tastatur-Tastendruck simulieren.

#7763978
Lesenswert?

Henning H. schrieb:

ich suche eine einfache, billige und kleine Lösung um Kontakt geschlossen/ offen über USB per C# .net XY am PC auszulesen

Ohne spezifische Angaben was einfach, billig und klein ist? :-)

Eine einfache und kleine Variante wäre etwas fertiges zu kaufen (z.B. ein fertiges FTDI Kabel). Da wäre der Chip im USB Stecker. Kabel kann man auf die benötigte Länge abschneiden. Also schon gut klein alles. Abfrage dann über die D2XX Driver. Brauchst du nur runter laden und in dein Projekt einbinden. Fertig.

Eine andere billige Möglichkeit wäre ein kleines Board vom Chinesen o.ä. zu bestellen. Ich würde einen Raspberry Pi Pico oder STM32 (G oder F Serie mit nativem USB) nehmen. Gibt es genügend Implementierungen. Ist eigentlich nur Copy/Paste. Dann musst du nur den richtigen COM Port finden und die Daten extrahieren.

Oliver R. schrieb:

Ich würd einen ATTiny45 mit VUSB nehmen

Den Digispark (ATiny85) gibt es sehr günstig und ist auch sehr klein. Allerdings geht glaube ich VCP nicht mehr zuverlässig an neuen Betriebssystemen.

Oliver R. schrieb:

und einen Tastatur-Tastendruck simulieren

Boah, das ist ja schon etwas hässlich. Und der schreibt dir dann schon in deine E-Mails rein wenn er angesteckt ist? :-)

#7764010
Lesenswert?

Wenn es darum geht, eine Taste abzufragen, ist der Weg über eine serielle Schnittstelle ein ziemlicher Umweg. Mit einem usb-fähigen µC kann ein HID-Gerät implementiert werden, in diesem Fall eine /Tastatur/, die einen Tastendruck abliefert. Man sucht sich einen Tastencode aus, der nicht auf einer normalen Tastatur vorkommt, und kann den z.B. mit einer der Hotkey-Funktionen der Win32-API registrieren, so daß das Programm auch dann den Tastendruck mitbekommt, wenn es nicht den Eingabefocus hat.

Und da HID nur low-speed-USB benötigt, ist eine Lösung auf Basis von V-USB spezifikationskonform, womit der Digistump/Digispark-Ansatz mit Tiny85 wieder im Spiel ist.

Einen Treiber braucht man erst recht nicht, um irgendwelche Com-Ports o.ä. muss man sich natürlich auch nicht kümmern.

#7764164
Lesenswert?

Oliver R. schrieb:

Und was stört es, wenn in der EMail plötzlich <strg>+<alt>+F5 oder irgendwas anderes unbenutztes gedrückt wird?

Wenn ich mit dem PC arbeiten will stört es mich zumindest sehr wohl wenn er <strg>+<alt>+F5 drückt. Denn was dann passiert ist vom jeweiligen Programm abhängig das gerade im Vordergrund ist.

Oliver R. schrieb:

Und ob ein Tiny45 oder ein Tiny85 hängt meist nur davon ab, was man noch rumliegen hat.

Das stimmt. Das ist prinzipiell egal. Den 85er hab ich nur ins Spiel gebracht weil eben der Digispark so weit verbreitet ist. Außerdem ist er klein, preislich gut und hat USB Stick Format. Braucht man nur noch ein Gehäuse für (drucken).

#7764477
Lesenswert?

Peter D. schrieb:

Man könnte einen USB-UART Umsetzer nehmen und die Handshakesignale (CTS) schalten. Unter C gibt es GetCommModemStatus und WaitCommEvent. Kann sein, daß man da unter C# selber Hand anlegen muß.

Von FTDI gibt es da wie gesagt fertige DLLs für C#. Muss man nur einbinden. Je nach Chip können da unterschiedlich viele Pins für IO verwendet werden (ich meine mindesten 4 CBUS Pins). Je nach Verfahren (es gibt mehrere) sind die Zugriffe und Zugriffszeiten unterschiedlich. Bieten andere USB-UART Umsetzer bestimmt auch.

(Firma: Privat) #7764821
Lesenswert?

Könnte man dafür auch eine einfache USB-Maus mißbrauchen ? Da hätte man auch gleich 3 Taster. So eine USB-Maus hat man meist noch darumliegen und die kosten ja auch fast nix mehr.

Ich stelle mir das mal so vor : Mit der Geräte-ID oder GUID o. ä., die man erst auslesen müßte, könnte exakt diese Maus identifiziert werden. Mit den Windows-Messages $0201 : wm_LButtonDown + $0202 : wm_LButtonUp für z.b. die linke Maustaste wären die Zustände ja leicht per API raus zu bekommen.

Ist jetzt nur mal so eine Idee von mir. Die Experten hier wissen da wahrscheinlich mehr darüber.

#7764831
Lesenswert?

Frank O. schrieb:

Der TO hat keinen Preis genannt.

Naja. Er meinte dass er es bereits mit "Arduino" umgesetzt hat und dass er etwas günstigeres sucht. Das kann natürlich alles sein. Einen originalen Uno bekommt er für unter 20€. Einen ESP oder Digispark für 4-5€. Und einen wirklich kleinen RP2040 für um die 2€.

Heinz B. schrieb:

Könnte man dafür auch eine einfache USB-Maus mißbrauchen ? Da hätte man auch gleich 3 Taster.

Keine Ahnung. Kann man die Events/Clicks wo diese Maus generiert abfangen damit nicht ständig jemand auf dem Desktop rumklickt?

(Firma: Privat) #7764836
Lesenswert?

Man kann per API alle 3 Tasten kontrollieren und sogar ob die Maus bewegt wurde. Damit hatte ich mal so ein kleines Drag & Drop realisiert.

Ich habe nur die Befürchtung, daß das mit 2 Mäusen (eine für Normalnutzung und die eine für die Tasterabfrage) kollidieren könnte. Ich würde da die mittlere Maustaste als Taster bevorzugen. Die braucht man eigentlich nicht oft. Eigentlich nur, wenn man lange Texte per Maus scrollt.

Aber vlt. täte es ja auch ein ausgedienter Joystick.

(Firma: Privat) #7764859
Lesenswert?

N. M. schrieb:

Du zeichnet also nicht mit CAD

Nö, höchstens ganz selten. Meine Behauptung zum Gebrauch der mittleren Maustaste trifft wahrscheinlich nur auf mich zu. Dachte eher, daß ich zur Gruppe der Normal-User zähle.

PS: hatte gerade gesehen, daß die WINMM.DLL, die zu Windows gehört, auch Joystick-Funktionen bereitstellt. Somit wäre das dann auch möglich.

#7765487
Lesenswert?

Danke für die vielen Vorschläge... die Bestellung ist raus.

@alle Ich versuch jetzt erstmal den Weg mit dem Adafruit MCP2221A. Ich weiß, dass ich ja Arduino etc. nicht wollte und jetzt doch so was in der Art versuche. Naja 6 € für das teil ist schon mal okay und ich hoffe das das Teil nicht so schnell den Hitzetot stirbt wie die Arduinos. Und von einem einfachen Schalter bin ich auch weg zu Lichtschranke :)

Wenn dann alles nicht funzt und es qualmt melde ich mich :)

Persönliche Seite #7765492
Lesenswert?

Henning H. schrieb:

Naja 6 € für das teil ist schon mal okay

Das geht bestimmt auch für <1€ ...

Henning H. schrieb:

as das Teil nicht so schnell den Hitzetot stirbt wie die Arduinos.

Naja, die Arduinos, zumindest die AVR-basierten, sind schon recht robust. Was die killt, ist für alle anderen Lösungen ziemlich sicher auch nicht so gut.

Das heißt du solltest mal überprüfen wodurch der Arduino plötzlich überhitzt...

(Firma: 1984now) #7765607
Lesenswert?

Peter D. schrieb:

Man könnte einen USB-UART Umsetzer nehmen und die Handshakesignale (CTS) schalten. Unter C gibt es GetCommModemStatus und WaitCommEvent. Kann sein, daß man da unter C# selber Hand anlegen muß.

Nein, muss man nicht. Der System.IO.Ports.SerialPort liefert das Zeug hübsch aufbereitet als Properties (synchron) oder als asynchrone Events. Es war nie einfacher, diesen Kram zu benutzen als mit .Net.

#7765619
Lesenswert?

Ich hab gerade eben noch etwas mit dem RP2040 als SCPI Device über SerialUSB rumgespielt, weil ich sowas ähnliches auch noch gebrauchen könnte (8 DIs- und 8 DOs). Falls es jemand brauchen kann hängt es im Anhang.

VID und PID sind definiert: https://github.com/raspberrypi/usb-pid Man könnte also in seiner UI nur nach diesen Devices suchen. Zusätzlich kann man ja wenn man die Schnittstelle offen hat noch den Identifier (*IDN?) auslesen um ganz sicher zu sein.

Man kann noch die Eingaben besser abfangen und natürlich auch noch einige Funktionen erweitern, aber im groben geht es.

Platz hat es noch genug:

1
RAM:   [==        ]  15.3% (used 41336 bytes from 270336 bytes)
2
Flash: [          ]   0.2% (used 4038 bytes from 2097152 bytes)

Niklas G. schrieb:

Das geht bestimmt auch für <1€ ...

Als Willkommensgruß bei Ali bestimmt :-) Hab gerade den RP2040 für 0.80€ angezeigt bekommen. Allerdings Stückzahl 1. Normale Preise für den liegen eher bei 1.5-3€. Aber da gibt es wirklich kleine Boards.

Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren