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.
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.
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.
@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.
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?
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?
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.
@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).
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.
ich glaube ich bin noch schlechter im Erklären als ich dachte... 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).
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).
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)
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.
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
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!