Forum: PC Hard- und Software Einfachste Lösung um einen Taster per USB am PC auslesen mit C#.


von Henning H. (nogood)


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 :)

: Verschoben durch Moderator
von Oliver R. (orb)


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.

: Bearbeitet durch User
von N. M. (mani)


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? :-)

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Den billigsten USB-Stick von Aliexpress kaufen (die Sorte mit 
gefläschtem Flash), den Taster in die Vcc-Leitung bauen, und abfragen ob 
der Stick erkannt wurde.

von Daniel B. (dbuergin)


Lesenswert?

Und wie wäre so was: https://www.adafruit.com/product/4471 MCP2221 USB 
Bridge?

Und dann in C# z.B. so was: https://github.com/smdn/Smdn.Devices.MCP2221 
um auf das Ding zuzugreifen?

So würde ich es auf jeden Fall mal probieren.

Daniel

von Jochen (hermann_kokoschka)


Lesenswert?

Noch eine Idee:
Aus einer billigen 5-Euro USB-Tastatur die Mini-Platine ausbauen und 
einen beliebigen Kreuzungspunkt der Matrix als 'Taster' verwenden.
Dann ist kein gesonderter Treiber nötig.

von Harald K. (kirnbichler)


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.

von Oliver R. (orb)


Lesenswert?

N. M. schrieb:
> Und der schreibt dir dann schon
> in deine E-Mails rein wenn er angesteckt ist? :-)

Und was stört es, wenn in der EMail plötzlich <strg>+<alt>+F5 oder 
irgendwas anderes unbenutztes gedrückt wird?
Und ob ein Tiny45 oder ein Tiny85 hängt meist nur davon ab, was man noch 
rumliegen hat.

von N. M. (mani)


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).

: Bearbeitet durch User
von Harald K. (kirnbichler)


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?

Deswegen nimmt man ja auch einen unbenutzten Tastencode. Ctrl-Alt-F5 
ist schon eher was nervendes.

https://www.obdev.at/products/vusb/hidkeys.html

von Peter D. (peda)


Lesenswert?

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 Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Pullup an D+ sollte der PC auch erkennen. Also Spannungsteiler 1k0/1k5 
und die Mittensanzapfung ueber den Taster an D+.

von N. M. (mani)


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.

von Frank K. (fchk)


Lesenswert?

Kann der MCP2221A auch. Der braucht aber keine Kerneltreiber dafür, der 
nutzt CDC-ACM für den UART und HID für den Rest. Nebenbei gibts da noch 
ein paar Gimmicks wie ADC und DAC und I2C. Microchip hat für 
Windows-User auch DLLs für C# und VB.

https://www.microchip.com/en-us/product/mcp2221a

fchk

von Harald K. (kirnbichler)


Lesenswert?

Uwe B. schrieb:
> Pullup an D+ sollte der PC auch erkennen. Also Spannungsteiler 1k0/1k5
> und die Mittensanzapfung ueber den Taster an D+.

Viele PCs haben einen mit "RESET" beschrifteten Taster. Den erkennen sie 
auch.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Harald K. schrieb:
> Viele PCs haben einen mit "RESET" beschrifteten Taster.

Wie viele aktuelle PCs haben den? Und der ist nicht per USB angebunden.

von Frank O. (frank_o)


Lesenswert?


von Harald K. (kirnbichler)


Lesenswert?

Niklas G. schrieb:
> Wie viele aktuelle PCs haben den? Und der ist nicht per USB angebunden.

Die Idee, mit einem Pullup an einer USB-Datenleitung einen Tastendruck 
"erkennbar" zu machen, halte ich mit für eine der schlechtesten bislang 
vorgestellten.

von N. M. (mani)


Lesenswert?


von Frank O. (frank_o)


Lesenswert?

Der TO hat keinen Preis genannt.
Hier geht es für die Hälfte und womöglich viel umfangreicher:
https://www.amazon.de/VAYDEER-programmierbare-programmierbaren-mechanische-Mini-Tastatur/dp/B08V1LZ128/ref=sr_1_5?

von Harald K. (kirnbichler)


Lesenswert?

N. M. schrieb:
> Das ist doch ein Scherz von denen.

Die sind in Bayern. Da ist so etwas Raketentechnologie.

von Heinz B. (Firma: Privat) (hbrill)


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.

von N. M. (mani)


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?

von Heinz B. (Firma: Privat) (hbrill)


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.

: Bearbeitet durch User
von Norbert (der_norbert)


Lesenswert?

Oliver R. schrieb:
> Künstliche Intelligenz schlägt menschliche Dummheit 1:0

Wahre Worte souverän gesprochen! (Virtuelle zehn Pluspunkte)

von N. M. (mani)


Lesenswert?

Heinz B. schrieb:
> Ich würde da die
> mittlere Maustaste als Taster bevorzugen. Die braucht man eigentlich
> nicht oft.

Du zeichnet also nicht mit CAD 😁👍

von Oliver R. (orb)


Lesenswert?

Harald K. schrieb:
> Deswegen nimmt man ja auch einen unbenutzten Tastencode. Ctrl-Alt-F5
> ist schon eher was nervendes.

OK, sch...lechtes Beispiel. Hab ich aber noch nie benutzt, die 
Kombination.

von Heinz B. (Firma: Privat) (hbrill)


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.

: Bearbeitet durch User
von Mario M. (thelonging)


Lesenswert?


von Andreas (andreas6)


Lesenswert?

Ich würde zum kleinen Guloprog greifen. Der hat auch ein paar wenige 
Bits rein und raus, neben der Programmiermöglichkeit von Controllern. 
Billig und klein ist er auch.

MfG. Andreas

von Frank O. (frank_o)


Lesenswert?

N. M. schrieb:
> dass
> er etwas günstigeres sucht.
> Das kann natürlich alles sein. Einen originalen Uno bekommt er f

Bei mir war nur das "einfach" hängen geblieben.
Hast recht. Aber zumindest bei der letzten von mir gelieferten Lösung 
(für den halben Preis), hat er programmierbare Taster.

von Henning H. (nogood)


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 :)

von Norbert (der_norbert)


Lesenswert?

Henning H. schrieb:
> ich hoffe das das
> Teil nicht so schnell den Hitzetot stirbt wie die Arduinos.

Ja, die verdammten Dinger kann man noch nicht einmal direkt an Drehstrom 
betreiben.

von Niklas G. (erlkoenig) Benutzerseite


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...

von Ob S. (Firma: 1984now) (observer)


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.

von N. M. (mani)


Angehängte Dateien:

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.

von Harald K. (kirnbichler)


Lesenswert?

N. M. schrieb:
> Hab gerade den RP2040 für 0.80€
> angezeigt bekommen.

Der kostet bei Reichelt auch nur 0.99 Euro:
https://www.reichelt.de/raspberry-pi-rp2040-arm-cortex-m0--rpi-rp2040-p306486.html

von N. M. (mani)


Lesenswert?

Harald K. schrieb:
> Der kostet bei Reichelt auch nur 0.99 Euro

War nicht richtig ausgedrückt von mir.
Ich meinte ein fertiges Board mit Quarz, Flash, usw.

https://a.aliexpress.com/_EGFo4NX

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.