Zugriff auf COM - Anschluss von externem Gerät

Hallo zusammen,

ich möchte gerne über den Arduino einen Barcode-Scanner auslesen. Dieser ist als emulierter COM-Port über die USB-Schnittstelle an den PC angeschlossen. Das Gerät funktioniert einwandfrei. Über ein Putty-Terminal kann ich die Daten des COM-Ports (bzw. die gescannten Werte) anschauen. Nun stellt sich mir die Frage, ob es grundsätzlich möglich ist, mit dem Arduino (der ja schon über einen COM-Port angeschlossen ist), einen anderen COM-Port abzufragen. Das Beispiel "TwoPortRecieve" unter SoftwareSerial hört sich vielversprechend an, aber hier werden wohl "nur" zwei direkt am Arduino angeschlossene serielle Anschlüssen abgefragt. Ich habe die Daten ja schon auf der COM-Schnittstelle liegen. Ich nutze im Moment übrigens einen Uno. Habt Ihr da zufällig eine Idee, ob das geht, oder grundsätzlich nicht möglich ist? Anbei findet Ihr noch ein paar Bilder zur Veranschaulichung.

Ihr seht, dass der Scanner richtig erkannt wurde, die Konfiguration in Putty und das Ergebnis des Einlesevorganges (String "TEST"). Es ist somit alles soweit richtig konfiguriert...

Man könnte die Frage vielleicht auch anders stellen: Kann man den Arduino nutzen, um einen anderen COM-Anschluss abzufragen als den eigenen?

Ich hoffe, ich konnte Euch meine Problemstellung klarmachen.

Vielen Dank im Voraus und Grüße

Bire

Putty_Config.PNG

Putty_COM_14_output.PNG

Hallo,

Putty ist wahrscheinlich der beste ssh Client aber für ne Serielle Verbindung. Schau Dir mal TeraTerm oder andere Terminal Programme.

SoftSerial ist die Antwort die Du suchst:
SoftSerial Referenz
SoftSerial Tutorial

Wenn Du einen Uno hast brauchst Du diese lib. Dann kannst Du den Scanner an z.B.: Pin2 und Pin 3 anschließen. Lade ein Passthrouth Sketch. Dazu kannst Du das Beispiel Sketch "Beispiele->Communication->SerialPassthrouth. Das änderst Du auf SoftSerial und dann kannst Du testweise über den IDE Monitor den Scanner ansprechen.
Alles weitere ist dann Sache des geplanten Projekt.

Gibt es kein Beispiel oder lib für den Scanner?
Ein Link des Scanners wäre gut.

Grüße,
Donny

Hallo,

Ein USB Device kannst du nur mit einen USB Host Controler an den Arduino anschliessen.
Dazu gibt es ein Shield das einen USB Controller zur Verfügung stellt.
Eventuell geht es mit einem Arduino Leonardo, dieser verfügt über einen direkten USB Controller. Diesen zu verwenden ist aber etwas Triky. Und ich weis nicht ob das wirklich funktioniert.
Aber wenn du einen USB zu RS232 TTL Adapter dazwischen legst. Sollte es eigentlich möglich sein den Adapter direkt an die RX/TX Leitung des Arduino anzuschliessen.

Grus Temucin

Eventuell geht es mit einem Arduino Leonardo, dieser verfügt über einen direkten USB Controller.

Host kann der nicht.
(soweit mir bekannt)

@temucin: Ich hatte schon den Verdacht das, dass Ding ein USB Anschluss hat. Der DUE unterstützt USB OTG, beim Leonardo geht das nicht, zumindest wüsste ich nicht wie.

Wenn es wirklich so ist, schaut das ganze natürlich anders aus.
Was allerdings geht ist ein Arduino Mega ADK oder das USB Host Shield (oder das Due mit USB OTG). Die Due Lösung würde ich lassen, es gibt wenige Beispiele und ich kenne nur eine lib.

Für das USB Host Shield bzw. Mega ADK (gleicher IC) gibt es haufenweise Beispiele.

Nachtrag: USB -> Serial Adapter wäre Interessant, sowas wollte ich mal versuchen brauch es aber nicht. Von daher hab ich mich dann nicht weiter damit gespielt.

Grüße,
Donny
PS: Heute ist wohl Tag der offenen Com Ports. :wink:

Hallo,

zunächst einmal vielen Dank für Eure schnellen Antworten. Das Datenblatt des Scanners findet Ihr unter Leuze Scanner. Wie unter 5.6 hab ich den Scanner an der USB-Schnittstelle als COM-Port emuliert. Diese Daten kann ich nun mit Hilfe von Putty abrufen. Das würde ich gerne auch im Serial Monitor von der Arduino IDE "sehen".

@Donny: Dieses Beispiel hatte ich mir angeschaut. Das würde ich auch hinbekommen, aber mein Gedanke war, dass ich direkt auf den COM-Anschluss (14) zugreife und mir die Verkabelung zu den RX/TX-Pins sparen kann, aber das geht offensichtlich nicht.

@Temucin: Das heißt, dass es für diese Applikation immer einen USB Host Controller benötigt? Auch wenn ich einen COM-Port emuliert habe, oder hat das nichts miteinander zu tun?

Vielen Dank Euch und Grüße

Bire

Das Datenblatt des Scanners findet Ihr unter Leuze Scanner.

Na, endlich!

3.1 Pinbelegungen der Anschlusskabel
3.1.1 KB 232-1 IT 190x Art-Nr. 50114517
Spiralkabel, maximale Länge 3 m. Signalpegel 0 und +5 Volt TTL

Das ist das richtige für deinen Arduino.

Alternativ:

3.1.3 KB PS2-1 IT190x Art-Nr. 50114519
Spiralkabel, maximale Länge 3 m.
Pinbelegung der Mini-DIN Buchse bzw. Stecker beim Kabel CBL-720-300-C00

Hallo,

ok, alles klar, noch einmal zur Versicherung: Es gibt nur die Möglichkeit, direkt die Signale RX/TX abzugreifen (entspricht der Variante B im angehängten Bild) und keine Möglichkeit, über den Arduino auf einen anderen COM-Port zuzugreifen (Variante A)? Das bedeutet, dass ich zwingend so einen USB zu RS232 TTL und eine Verkabelung benötige?

Vielen Dank Euch.

Grüße

Bire

Von deinem Bild verstehe ich überhaupt nichts...
Was du wo abgreifen willst, ist mir auch ein Rätsel.

Sach doch mal genau, was du da für einen Scanner, mit welchem Kabel, hast ...

Die USB Variante?
Dann nur mit USB Hostshield (wenn überhaupt)
Aber das wurde dir doch schon gesagt!

Hallo,

der Scanner ist der IT 1910i mit einer normalen USB-Leitung (Zubehör Nr. 50114521, Seite 23 im PDF von oben).

Noch einmal die Nachfrage: Unabhängig von meinem Scanner: Es ist nicht möglich, einen COM-Port zu lesen?

Vielen Dank Euch und Grüße

Bire

Hallo Zusammen Hallo bire

mit dem uno und einem USB "Gerät " wird das nix. der kann kein HOST sein. Eventuell mit einem Leonardo oder so. ob das klappt kA.

Aber wenn du zu dem "Scanner" das auf Seite 13 beschriebene Kabel KB "232-1 IT 190x" incl. Netzteil nimmst
und einen RS232 zu TTL Wandler ähnlich dem hier Bausatz RS232/TTL Wandler online kaufen | Pollin.de
dazwischen klemmst sollte es klappen.

PS: Der Link ist nur ein Beispiel und keine Kaufempfehlung.

gruß und viel Spass beim Basteln

old56man

Es ist nicht möglich, einen COM-Port zu lesen?

Com Ports finden sich an Windows PCs.
Nirgendwo anders.
Also nochmal: Was meinst du?

Hallo zusammen,

@old56man: Vielen Dank, ich dachte mir mittlerweile schon, dass das sich als Variante abzeichnet...

Ich hätte jedoch "lieber" den direkten Zugriff auf einen COM-Anschluss des PCs (in diesem Fall 14). Der Arduino selbst belegt ja auch einen (hier 13). Mit einem Terminalprogramm kann ich den Anschluss ja lesen (siehe Bilder oben), jetzt war die Frage, ob ich das externe Gerät, welches an einem zweiten COM-Anschluss angeschlossen ist, lesen kann ohne zusätzliche Adapter, Kabel, etc.

Bitte fragt noch einmal nach, ich bin nicht gut im Erklären (ausserdem bin ich Maschinenbauer, habt also bitte Geduld mit mir).

DANKE und Grüße

Bire

Hallo

Wenn der PC dazwischen was machen soll, ist das auch möglich.
die Kommunikation muss dann ein Programm machen.
Für mich sah das im Eingangspost so aus als wenn der Arduino den Code lesen und daraus was machen soll.

old56man

Hallo oldman56,

ich glaube ich bin noch schlechter im Erklären als ich dachte... :disappointed_relieved: Ja, es ist so wie DU es verstanden hast: Der PC ist "nur" dafür da, den Barcode vom Scanner zu empfangen und dann an den Arduino weiterzuleiten um dann eine Aktion auszuführen. Wenn ich das jedoch jetzt richtig kapiert habe, geht das prinzipiell ohne Probleme, jedoch nicht über einen direkten Zugriff auf den COM 14-Anschluss, sondern -so wie Du es mir erklärt hast- über den RS232/TTL-Wandler und dann auf die RX/TX-Eingänge des Arduino.

Geht für mich auch. Ich habe mich nur gefragt, ob der Arduino nicht parallel zum eigenen COM13 auch andere Ports abfragen kann (die Daten sind ja "irgendwie" da, was der Ausgang in Putty zeigt).

Viele Grüße und DANKE

Bire

bire:
Ich hätte jedoch "lieber" den direkten Zugriff auf einen COM-Anschluss des PCs (in diesem Fall 14). Der Arduino selbst belegt ja auch einen (hier 13). Mit einem Terminalprogramm kann ich den Anschluss ja lesen (siehe Bilder oben), jetzt war die Frage, ob ich das externe Gerät, welches an einem zweiten COM-Anschluss angeschlossen ist, lesen kann ohne zusätzliche Adapter, Kabel, etc.

"Direkten Zugriff" von einem externen Gerät, das an einen PC angesteckt ist (z.B. Arduino) auf ein anderes externes Gerät, das am selben PC angesteckt ist (z.B. Barcode-Scanner) gibt es nicht (zum Glück).
Du brauchst keine zusätzlichen Kabel oder Adapter aber zusätzliche Software.
Nämlich eine, die die Daten von COM14 empfängt und an COM13 weiterleitet/sendet.
Vielleicht gibt es so etwas fertig und gratis (vielleicht hilft Tante Google beim Finden), vielleicht kannst du dir so etwas selbst schreiben in einer die geläufigen Programmiersprache (für den PC).

über den RS232/TTL-Wandler

Was willst du mit einem "RS232/TTL-Wandler" anstellen?

Der ist doch völlig fehl am Platze, oder?
Denn: Ich sehe da NICHTS was mit RS232 zu tun haben könnte.

Hi

Wenn der Scanner am PC-COM-Port hängt und der Arduino am PC-COM-Port hängt - wie sollen sich diese beiden Geräte 'von selber' sehen können?
Ehrlich wäre ich erschreckt, wenn Das ohne mein Zutun ginge!
Wenn Du Beides am PC hängend betreiben willst, musst Du die Daten, Die der Arduino sendet, zum Scanner schicken und umgekehrt - dann kann Das vll. was werden.
Wenn der Scanner aber von Haus aus eh ein serielles Gerät ist (und dann noch mit 5V-Logik schafft) - dann solltest Du das Ding sogar ohne COM<->USB-Wandler an den Arduino betreiben können.
Wenn das genannte Kabel Das bietet - nimm dieses Kabel.
Beim Kabel kann man Es verschmerzen, wenn Da die Garantie futsch ist, weil man irgend einen Stecker abgebissen hat - beim Scanner könnte Das ärgerlicher werden, wenn man in Dessen Innereien rumlötet.

MfG

PS: Du könntest eine weitere Baustelle aufmachen und mittels einer nahezu beliebigen Hochsprache beide COM-Ports öffnen und quasi eine 'Netzwerk-Brücke' bauen.
... vor Jahren in VisualBasic Mal in der Richtung gespielt, zu PureBasic müsste ich auch eine Lizenz haben (Letzteres müsste auch auf Linux 'können' - aber auch schon Jahre her)

Hallo,

Deine Variante B funktioniert grundsätzlich schon!!

Aber du brauchst dazu ein USB Host Shield. Link zur lib <- Da ist ein Foto eines USB Host Shield dabei, das kannst Du nehmen oder das von Arduino selbst. Beide und das Arduino Mega ADK verwenden den MAX3421E.

Ein Arduino Mega ADK hat den selben IC wie das Shield und auch einen USB Host <- damit geht es auch!
Das Arduino Due kann OTG USB (On-The-Go), das Leonardo NICHT!

Ob das sinnvoll ist oder wie der code dazu ausschaut ist wieder etwas anderes.

Grüße,
Donn

Hallo zusammen,

es funktioniert! Nach postmaster-ino's Beitrag habe ich den Barcode Reader "einfach" als Tastatur emuliert (S. 18 im oben beigefügten PDF) und diese dann als Eingang für den seriellen Monitor genutzt. Fuktioniert einwandfrei. Über die Zeilen

String a;
Serial.begin(38400);
a= Serial.readString();
Serial.println(a);

wird -bei aktivem seriellen Monitor- dann der Inhalt des Barcodes in der Stringvariablen abgespeichert. Genau das wollte ich. Das wird vermutlich nicht die letzte Lösung sein, da ich noch mehr Funktionalitäten im Arduino abbilden muss, aber für meine ersten Inbetriebnahmezwecke reicht das aus.

Euch allen vielen Dank für Eure Unterstützung und die Hinweise bezüglich der COM-Schnittstelle und USB-Geräaten. Ich habe viel gelernt!

Viele Grüße

Bire